Full system blueprint for the MLH/MLG rebuild — six diagrams covering the master architecture, cinematic scroll storyboard, onboarding wizard flow, Slack↔Odoo business workflows, GitHub lane placement, and before/after state audit. No build begins until Sam reviews and approves this pack.
All layers from visitor entry to Sam/Gary approval. Left to right = user journey. Top to bottom = data flow. Color = system boundary.
Sam's concept: hero = empty land. Scrolling drives the build forward, scene by scene. Content panels stay in protected side zones and never overlap the action. Ends at emotional peak → CTA. GSAP ScrollTrigger scrub. Raw footage from 173 customer photos + 1,429 FB photos → Higgsfield image-to-video.
5 entry doors based on where the visitor is in their journey. AI agent helps fill in their own words. Voice button + typing + tap-options. Ends as an Odoo CRM lead + Slack ping. Agents take over from there.
Every business action maps to a named workflow. Trigger → Odoo record (record-first rule) → Slack gate (if required) → output. No Slack approval without an Odoo record. No customer-facing action without a Slack approval.
Modern Lao is neither a "client" nor an "associate" in the Viewport Corp model — it is the 49% partner, occupying its own isolated lane under viewport-corp. Three repos, three runtimes, one GitHub label system, one approval matrix.
The product is live. Every row = a specific verified issue (from 2026-06-11 recon), what it becomes, and which phase fixes it. Phase 0 = decisions. Phase 1 = stop the bleeding. Phases 2–5 = rebuild.
?devNoAuth=1 on clients.modernlaohomes.com disables auth entirely. /cameron/* returns 200 with zero authentication. Auth is client-side JS only — any curl bypasses it. This ships in Phase 1 before any new build work.
| Component | Before (verified 2026-06-11) | After (target) | Phase |
|---|---|---|---|
| Portal auth | Client-side JS only · ?devNoAuth=1 bypasses entirely · /cameron/ public · CLIENT_CHOICES hardcoded in auth.js | Server-side nginx auth_request · dev bypass removed · slug-routed rooms · allowlist from Supabase public.clients (RLS) | P1 · URGENT |
| Lead capture | Form POSTs to Supabase · no notification · leads sit silently · mailto fallback dies on phones | /api/lead → Odoo crm.lead → Slack #leads ping instantly · WhatsApp as fallback intake | P1 |
| Anti-copy scripts | 2 overlapping scripts · blocks ALL copy/cut · @media print hides everything · hostile UX | Both removed. Real legal deterrents go in T&C, not JS. | P1 |
| nginx 404 / redirects | Default nginx 404 leaks version · /contact 301 → HTTP · www returns 200 (no redirect) | Branded 404 page · all redirects HTTPS · www → apex 301 | P1 |
| Public site pages | 1 URL in sitemap · all sections are anchor links · /about/, /projects/, /careers/ all 404 | Full page structure: home, about, projects index, per-project pages, process, apply, contact, privacy, terms, careers | P2 |
| Frontend design | Good bones (Embassy Garden Ledger) but static, no cinema, English-only, mobile video 51MB | "THE BUILD" cinematic scroll · GSAP ScrollTrigger · Higgsfield video · EN+LO i18n · ≤3MB poster+lazy | P2 |
| Portfolio | 14 projects as anchor-linked ledger entries · 5 text-only "past" entries · 173 customer photos unused | Per-project pages from data file · cinematic storyboard format · all 173 photos + 1,429 FB photos in | P2 |
| Orphan /contact/ | Old site-v4 /homes/ leftover · wrong fonts · broken links · different copyright entity | Deleted · contact page in new site structure | P1 |
| Client rooms | Hand-built per-client HTML · 3 duplicate tree copies (active/old/staging) · onboarding = Sam copies folder | 4 room templates (design-client, lead-onboarding, project-contract, scaffold) · new client = 1 action | P3 |
| Portal data | All content hardcoded in HTML per client · no connection to Odoo · Cameron's room has real data manually entered | Portal reads Odoo (JSON endpoint, RLS per client) · proposal/contract/stages/invoices/docs from Odoo | P4 |
| E-signing | No e-sign capability at all · contracts sent as PDF via email | DocuSeal integration via Odoo Sign · in-portal signing · hash + timestamp logged | P4 |
| Odoo instance | Self-hosted 17, "tested, not properly working" · SaaS 19.3 exists with unknown relation · confusion between two instances | New custom plan (Sam bought, credentials pending) · external API · single source of truth · no self-hosted 17 | P4 |
| Odoo modules | Only basic modules installed/tested · no CRM pipeline · no project stages · no helpdesk · no e-sign | CRM, Contacts, Project, Documents, Sign, Accounting/Invoicing, Helpdesk all configured per MLH workflows | P4 |
| Slack enforcement | 15 channels exist · bot in all channels · zero automation built · "PARTIAL FOUNDATION" (policy on paper) | tenant-mlg-ops service: lead cards, approval packets, W1–W7 automation, record-first enforced | P4 |
| Languages | English-only · html lang="en" · no hreflang · /lo and /th both 404 · zero Lao despite Lao audience | EN (primary) + LO (Lao) routes from one content source · hreflang · lang switcher · Thai later | P2 |
| Legal entity in footer | "Modern Lao Sole Co., Ltd." (MLH-Sole, WINDING DOWN) · sameAs empty · orphan says "Modern Lao Group" | MLG entity (51/49, Sam) · sameAs with live channels · correct founding info | P2 |
| Facebook presence | 1,429 photos exported · FB business page compromised ($900 fraud, Greg) · lead bot not built · 0 sameAs links on site | FB page recovery (W8, parked) · Postiz for scheduling · lead bot (W1) · social links in sameAs | P5 |
| Privacy & terms | Both 404 · form collects name/email/phone/budget with no consent text · GDPR/privacy exposure | Privacy + terms pages in new site · consent checkbox on form | P2 |
Nothing gets built until Sam reviews this diagram pack and approves the direction. Four decisions need answers to proceed.
/srv/viewport/secrets/platformx.env.
This unblocks W1–W8 diagram wiring in Phase 4.
Generated 2026-06-11 · Grounded in 7-source recon (modernlaohomes.com, clients.modernlaohomes.com, /migration/*, local CLAUDE.md, WhatsApp forensics, plan file) · No secrets embedded.
Source: viewport-corp/viewport-ops · MLH Dossier →