2026-06-11 · Pre-build review · Awaiting Sam approval

Modern Lao Homes
Architecture Diagrams

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.

Site · modernlaohomes.com
Portal · clients.modernlaohomes.com
Odoo · New custom plan (pending credentials)
Slack · T0B7L6SG482 (MLG workspace)

Master Architecture

All layers from visitor entry to Sam/Gary approval. Left to right = user journey. Top to bottom = data flow. Color = system boundary.

Entry / Frontend
API / Ops Service
Odoo (system of record)
Slack (approval layer)
Portal (client view)
Human operators
ENTRY FRONTEND OPS API RECORD APPROVE modernlaohomes.com Public website (EN + LO) WhatsApp wa.me/856 direct Facebook Lead bot (future) Referral / Manual Gary / Sam intake "THE BUILD" — Cinematic Site GSAP ScrollTrigger · Higgsfield video · 8 scenes Portfolio · Process · Company · EN+LO Onboarding Wizard 5 entry doors · AI agent · Voice/text/tap Cinematic step-by-step form Client Portal Entry clients.modernlaohomes.com OTP auth · Allowlist tenant-mlg-ops — Integration Layer /api/lead · /api/onboard · Slack bot HTTP Events · Odoo JSON-RPC client · Approval Packet builder Odoo — system of record (modernlao DB) CRM · Contacts · Project · Documents Sign · Accounting/Invoicing · Helpdesk New custom plan · external API · Sam sharing creds MLG Slack — approval layer (T0B7L6SG482) #mlg-odoo-approvals · #mlg-finance-review #mlh-warranty-support · #mlh-legacy-issues modern_lao_odoo_contr bot · HTTP Events API SAM — final call Phone / laptop · >$1K · DNS · legal GARY — final call Phone / laptop · ops ≤$500 · site Agents (90% work) Qualify · follow-up · draft · suggest Client Portal clients.modernlaohomes.com Room from template (ONE per client type) Proposal · Contract · Brief (from Odoo) Project stages (Odoo read-only mirror) Invoices · Payments · Draw schedule Documents · e-Sign (DocuSeal) Warranty tickets → Helpdesk read-only RULE: No agent has final authority. Sam + Gary = only final call.

"The Build" — Scroll Story Storyboard

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.

Implementation note: Each scene = a frame sequence (60–120 frames, ~30fps equivalent). Higgsfield renders construction motion from real site photos. Scrub mapped 0→1 via ScrollTrigger progress. Content overlays appear via IntersectionObserver at scene entry points. Mobile fallback: poster frame per scene + IntersectionObserver fades (no scroll-scrub on low-end).
SCENE 00 · ENTRY
🌄
Sabaidee + Hello
Language gate. Two words. EN/LO choice. Then the camera descends from sky onto empty red-earth land.
LANG: EN | LO · FADE: 0→1s · AUDIO: ambient wind
SCENE 01 · SCROLL 0%
🏜️
Empty Land
Wide drone shot. Raw Laos earth. Nothing built yet. Side panel: "This is where every build begins."
CONTENT: hero statement · NO overlay on action zone
SCENE 02 · SCROLL 12%
📐
Survey & Clear
Engineers on site. Stakes, tape, laser level. Land being measured. Panel: "We design for your land, not a template."
CONTENT: Process step 1–2 · Design contract USD 3,000
SCENE 03 · SCROLL 25%
🏗️
Foundation Poured
Excavators, rebar cages, 37 tonnes of concrete. Nathong slab reference. Panel: "Every detail engineered before a single bucket is poured."
CONTENT: Engineering specs · Photo: Nathong 2026-03-31
SCENE 04 · SCROLL 40%
🏢
Structure Rises
Columns, beams, floor slabs growing upward. Time-lapse feel. Panel: "8–14 months, milestones every fortnight."
CONTENT: Project stage tracking · Portal preview
SCENE 05 · SCROLL 55%
🏠
Shell Complete
Walls go up, roof sealed. The shape is visible. Panel: "You can walk through your home before a wall is plastered."
CONTENT: 3D renders / walkthrough tech · Warranty
SCENE 06 · SCROLL 72%
Finishing Work
Tiling, joinery, landscaping, gates. Interior photos. Panel: "173 finished details. Every material chosen by you."
CONTENT: Photo gallery (real photos) · Materials
SCENE 07 · SCROLL 90%
🗝️
Handover
Golden hour. Owner walks through. Keys. Smiles. This is the emotional peak. Panel: "Your home. Exactly as designed."
CONTENT: Testimonials · Warranty 12 months
SCENE 08 · SCROLL 100%
🚀
Start Your Build
CTA panel expands full screen. Wizard launches. "Your land. Your vision. Let's build it." Big button. Emotional peak.
→ WIZARD ENTRY POINT
VIEWPORT (100vw × 100vh) LEFT CONTENT ZONE ≤ 25% width ACTION ZONE Construction footage / video frames GSAP scroll-scrubbed · NO content overlap 50% of viewport width RIGHT CONTENT ZONE ≤ 25% width

Onboarding Wizard — "Start Your Build"

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.

🔍
Still searching for land?
Help them find land + connect to Laos relocation services
📍
Have land, need to build?
Main path — site, budget, timeline, vision
✏️
Just need design?
Design-only contract path — USD 3,000 design fee
💡
Want to know the reality?
Feasibility consult — costs, timelines, what's possible in Laos
🤝
Let's Build Together!
Ready now — fast intake path, all fields prefilled by AI
Sabaidee / Hello Choose language 5 Entry Doors Tap or voice Land search path Location pref · budget · timeline · relocation needs Build path (main) Site location · land status · budget · start date · style Design path Brief · style ref · rooms · USD 3,000 fee info Feasibility path Country status · budget range · timeline · questions Fast-track path Full 11-field form · AI pre-fills · confirm + submit AI Agent Conversational · Voice/text Detects language/nationality Fills form in visitor's style Odoo crm.lead Structured data + transcript Slack #mlg-leads Lead card ping Agents → Qualify Sam/Gary final call 🎤 VOICE BUTTON — tap to speak, AI transcribes or type · or tap dropdown options

Business Workflows — Slack ↔ Odoo (W1–W8)

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.

Record-first rule (locked): Create the Odoo record with full evidence first. Post to Slack with the Odoo record ID. Wait for explicit approval. Execute only after approval. Update/close Odoo record. Agents suggest and prepare — Sam or Gary approve.
W1 — LEAD INTAKE
New lead arrives
TriggerForm / WhatsApp / FB bot / manual
Odoocrm.lead created (modernlao DB)
SlackPing only — no approval gate
OutputLead card + 24h follow-up activity
NOTIFY ONLY
W2 — CLIENT ONBOARDING
"Promote to client" action
TriggerLead qualified → promote button
Odoores.partner + portal slug created
Slack#mlg-odoo-approvals — Sam/Gary
OutputPortal room + allowlist + welcome draft
APPROVAL GATE
W3 — DESIGN CONTRACT
Proposal accepted → sign
TriggerVerbal / written proposal acceptance
Odoosale.order + Sign request (DocuSeal)
Slack#mlg-odoo-approvals — legal review
OutputSigned bundle (hash + timestamp)
APPROVAL GATE · LEGAL
W4 — INVOICE / PAYMENT
Stage gate or draw due
TriggerProject stage advance / draw schedule
Odooaccount.move (invoice) drafted
Slack#mlg-finance-review — Gary/Sam
OutputApproved send · receipt logged in Odoo
APPROVAL GATE · FINANCE
W5 — PROJECT STAGE UPDATE
Site progress milestone
TriggerGary marks stage complete on site
Odooproject.task stage updated + photos
SlackPost-only (no gate)
OutputPortal mirror updated · client notify draft
POST-ONLY · NOTIFY CLIENT
W6 — WARRANTY / ISSUE
Client raises a defect
TriggerClient portal report / WhatsApp
Odoohelpdesk.ticket (warranty team)
Slack#mlh-warranty-support — gate if $$/legal
OutputResolution + evidence attached to ticket
GATE IF $$ OR LEGAL
W7 — LEGACY DISPUTES
Existing MLH-Sole cases
TriggerShaun/Sunny case · Gary claims · disputes
Odoohelpdesk.ticket (legacy team) + Documents
Slack#mlh-legacy-issues — evidence-first
OutputLawyer loop · evidence package built
ALWAYS GATED · LEGAL
W8 — CONTENT / SOCIAL
FB recovery + social posts
TriggerSam/Gary approves a post
Odoo— (no Odoo record needed)
SlackOps channel — schedule review
OutputPostiz scheduled · FB page (parked for now)
PARKED — FB NOT RECOVERED YET

GitHub Placement — Partner Lane

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.

github.com/viewport-corp/ — Viewport Corporation GitHub org
├── viewport-ops exists Corporate operations, migration status, Hermes config
├── viewport-os exists CompanyOS, agent registry, approval gates, enforcement
├── viewport-kb exists Knowledge base index
── PARTNER LANE: Modern Lao (49% — Sam + Gary) ──
├── public-modernlao-homes create
Public website source — deploys to modernlaohomes.com
src/ (components, pages, content) · public/ (assets) · scripts/ (build + deploy)
GitHub Actions → rsync → VPS nginx · smoke tests on deploy
Labels: page/ · design/ · content/ · deploy/ · i18n/
├── tenant-mlg-portal create
Portal source + room templates — deploys to clients.modernlaohomes.com
templates/ (design-client, lead-onboarding, project-contract, scaffold) · shared/ (auth, style)
Server-side auth (nginx auth_request) · Supabase OTP allowlist · slug routing
Labels: room/ · auth/ · portal/ · deploy/ · client/
└── tenant-mlg-ops create
Glue service + runbooks — container on VPS
api/ (lead, onboard, slack-events) · odoo/ (JSON-RPC client) · slack/ (bot, approval-packet)
runbooks/ (onboarding, warranty, disputes, deploy, rollback) · RuntimeContract.yaml
Labels: workflow/ · api/ · ops/ · agent/ · runbook/
TO DELETE (after migration to repo-based deploys):
mlh-clients-portal-clean mlh-clients-portal-clean-v2 mlh-clients-portal-clean-v3 dokploy-staging mlh-api-handler-bad-* mlh-api-handler-prev-* before-cameron-*
4 staged portal variants + 3 rollback copies. All must be on repo + CI before deleting.

Existing State Audit — What Changes

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.

Critical security issue (Phase 1, ship now): ?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
P1 · URGENT Stop the bleeding — ships now, before any build
P2 · REBUILD Public site + cinema + i18n (weeks 2–3)
P3/4 · CONNECT Portal templates + Odoo + Slack wiring (weeks 3–6)
P5 · LEVERAGE FB recovery, Postiz, tenant template, watchers (ongoing)

Open Decisions — Blocking Build

Nothing gets built until Sam reviews this diagram pack and approves the direction. Four decisions need answers to proceed.

D1 — ODOO CREDENTIALS
New custom Odoo plan — share details
Sam bought a new custom Odoo plan with external API access. Need: instance URL, admin credentials, API key. Store in VPS /srv/viewport/secrets/platformx.env. This unblocks W1–W8 diagram wiring in Phase 4.
D2 — PHASE 1 GO
Security hotfixes — ship now?
The ?devNoAuth=1 bypass and /cameron/ public access are live security holes right now. These are 30-min fixes. Sam confirms → ships before any design work begins.
D3 — FRONTEND APPROVAL
Diagrams reviewed — build approved?
Sam reviews this diagram pack (6 diagrams). If direction is approved, next session = design tokens + component structure for "THE BUILD" site. If anything is wrong, corrections go here before a line of code is written.
D4 — LAUNCH LANGUAGE
EN only at launch, or EN + LO?
Building i18n routing upfront costs ~20% more time but avoids a painful retrofit. Recommendation: EN + LO routes from day one (architecture accommodates it). Lao copy can be added after launch. Sam decides.

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 →