diff --git a/src/views/welcome-view.js b/src/views/welcome-view.js --- a/src/views/welcome-view.js +++ b/src/views/welcome-view.js @@ -3,12 +3,10 @@ import { escapeHtml } from "../utils/html.js"; const navLinks = [ ["/", "Home"], - ["/services", "Services"], ["/plans", "Plans"], - ["/mobile-app", "Mobile app"], - ["/contact", "Contact"], + ["/onboarding", "Onboarding"], + ["/demo", "Demo"], ["/app", "Login"] ]; const serviceHighlights = [ @@ -53,18 +51,18 @@ const services = [ ["Notifications", "Push, in-app, email, optional SMS, SOS alerts, check-in and checkout messages, request responses, estate announcements, and visitor history links."], ["Analytics", "Visitor statistics, guard performance, traffic analytics, risk analysis, weekly resident stats, estate engagement, heatmaps, and plan-limited exports."], - ["Payments", "Subscription billing, payment confirmation, provider switching, webhooks, grace periods, invoices for estate admins, and service charge workflows by plan."], - ["Compliance and Security", "Audit logs, device logs, access history, incident logs, data export controls, privacy policy links, retention rules, and data processing terms."], - ["Demo Environment", "Approved estate prospects can test the web demo at /demo with production or local test service modes after onboarding review and payment confirmation."] + ["Payments", "Subscription billing, payment confirmation, grace periods, invoices for estate admins, and service charge workflows by plan."], + ["Compliance and Security", "Audit trails, device logs, access history, incident logs, data export controls, privacy policy links, retention rules, and data processing terms."], + ["Protected Demo", "Approved estate prospects can test the web demo at /demo only after registration, verification, review, and time-limited access approval."] ]; const roleWorkflows = [ ["Resident", "Create visitor passes, complete profile, receive check-in and checkout alerts, review allowed visitor history, submit complaints, and see estate plan benefits."], ["Guard", "Use scanning only after OTP verification, complete profile, estate assignment, gate assignment, admin or supervisor approval, and active shift readiness."], ["Security Supervisor", "Create residents when delegated, assign gates and shifts, respond to incidents, send security broadcasts, and monitor guard readiness."], ["Estate Admin", "Deactivate estate users, manage gates, announcements, residents, guards, subscription visibility, feature settings, visitor intelligence, and request workflows."], ["Sales Admin", "Review onboarding pipeline, approved demos, estate data, subscription readiness, and client follow-up without entering private resident operations."], - ["Platform Operations", "Business-approved controls manage plans, payment confirmation, demo approvals, audit trails, and enterprise access."] + ["GateWise Operations", "Approved controls manage onboarding, payment confirmation, demo approvals, audit trails, and enterprise access."] ]; @@ -150,12 +148,12 @@ const mobileScreens = [ foot: "Estate-wide controls with plan-based limits and delegated messaging." }, { - role: "Business Ops", + role: "Operations", title: "Feature settings", items: ["Role toggles", "Plan features", "Plan controls", "Approved demos"], foot: "Central control for all roles, plans, estates, and enterprise access." }, @@ -167,7 +165,7 @@ const partners = [ ["Estate managers", "Run multiple estates, standardize gate workflows, and report resident engagement to estate owners."], ["Security companies", "Bring guard performance, gate accountability, incident history, and shift management into one platform."], ["Sales and implementation partners", "Help estates onboard, validate needs, configure plans, and guide administrators through activation."], - ["Payment providers", "Support subscription billing, service charge payments, webhooks, provider switching, and payment confirmation."], + ["Payment operations", "Support subscription billing, service charge payments, provider switching, and payment confirmation."], ["Smart gate and hardware providers", "Future enterprise integrations can connect GateWise workflows to physical gate systems and devices."] ]; @@ -210,6 +208,7 @@ function renderHeader(pathname) { ${navLinks .map(([href, label]) => `${escapeHtml(label)}`) .join("")} + `; @@ -246,7 +245,7 @@ function renderHomePage() {

Smart estate visitor management

GateWise NG gives every estate a safer visitor journey.

- GateWise connects residents, guards, supervisors, estate admins, sales teams, and businesss around one trusted flow: + GateWise connects residents, guards, supervisors, estate admins, sales teams, and operations around one trusted flow: invite visitors, verify at the gate, notify the right resident, track history, respond to incidents, and keep plan limits clear.

@@ -374,7 +373,7 @@ function renderServicesPage() {

Service controls

-

Businesss can activate or deactivate features for roles, plans, selected estates, or the whole platform.

+

Approved feature controls can activate or deactivate tools for roles, plans, selected estates, or the whole platform.

Feature settings are designed to support plan packaging, pilots, temporary restrictions, enterprise access, and future product expansion.

@@ -596,15 +595,47 @@ function renderPlanCard(plan) {

${escapeHtml(plan.name)}

${escapeHtml(plan.price)}
+

${escapeHtml(planSummary(plan))}

Limits

${renderList(plan.limits)}
@@ -605,9 +636,41 @@ function renderPlanCard(plan) { ${renderList(plan.features)}
${plan.missing.length ? `

Resident upgrade prompts

${renderList(plan.missing)}
` : ""} + ${escapeHtml(planCta(plan))} `; } + +function planSummary(plan) { + if (plan.name.includes("Starter")) { + return "Best entry point for small estates that need QR visitor access, resident profiles, requests, and basic announcements."; + } + if (plan.name.includes("Secure")) { + return "Adds multi-gate operations, guard shifts, service workflows, reports, and stronger visitor intelligence."; + } + if (plan.name.includes("Luxury")) { + return "Recommended for larger estates that need AI visitor safety signals, heatmaps, audit logs, and priority response."; + } + if (plan.name.includes("Business")) { + return "Built for estate managers and owners that need multi-estate visibility, advanced analytics, payments, and incident escalation."; + } + return "Custom enterprise coverage for dedicated infrastructure, integrations, white-labeling, and VIP onboarding."; +} + +function planCta(plan) { + if (plan.name.includes("Business")) { + return "Talk to GateWise"; + } + if (plan.name.includes("Enterprise")) { + return "Request custom plan"; + } + return `Choose ${plan.name.replace("GateWise ", "")}`; +} function renderList(items) { return ``; diff --git a/src/config/legal-links.js b/src/config/legal-links.js --- a/src/config/legal-links.js +++ b/src/config/legal-links.js @@ -62,23 +62,18 @@ export function renderPublicPolicyFooter() { A product of Globulus Technology Limited.
diff --git a/src/views/legal-view.js b/src/views/legal-view.js --- a/src/views/legal-view.js +++ b/src/views/legal-view.js @@ -84,6 +84,9 @@ async function loadPolicyDocument(app, doc) { throw new Error("Policy document could not be loaded."); } const markdown = await response.text(); + if (!markdown.trim() || markdown.trim().toLowerCase().startsWith("