Café Fausse knowledge map

Not the restaurant. MVP = official SRS freeze.

Part 3 — HLD + Meghna FE/BE flow (architect cut)

Who: Claude Part 3. Audience: Architecture talk (Part 3 NATURAL) · on-camera slides. Label: PROTOTYPE visuals · not Quantic submit. No FR/NFR IDs on the diagrams. On camera: cafe.artof.link = MSAIE staging (temporary — not production forever). Avoid “weekend Lightsail.” Prefer these for the architect dual-env cut. Older as-is HLD / AWS staging HLD stay on Stack as history / probe archive.

Folded into Stack. Deploy table: Local vs AWS. Pack index: Parts 3–5 materials. Part 4 companion: Coding overview. ID map: Handoff mapping — not spoken on camera.


Honesty (diagrams)


Index

#VisualTitleSpoken cue (one line)
1SVG · 720 PNGLocal setup (dev) — HLD“Local on the developer machine — Vite, Flask, Postgres — iterate without touching the shared demo.”
2SVG · 720 PNGMSAIE staging — HLD (cafe.artof.link)“MSAIE staging at cafe.artof.link — same design, shared HTTPS proof. Knowledge is a separate hostname.”
3SVG · 720 PNGMeghna demo path — frontend / backend“What Meghna clicks vs what hits Flask — static pages from freeze; booking through slots and reservations.”
4SVG · 720 PNGCoding overview (Part 4)“Forms → API → modules → Postgres. Freeze for static pages; booking through slots + reservations.”

1. Local (hld-local)

cts-ai box: Frontend (Vite / React+JSX) → Backend (Flask :5000) → Data (local PostgreSQL). freeze.json sits under both FE and API. Fail-closed without DB; full book → 409. Coding and iteration — not the shared demo URL.

Local setup (dev): Vite React frontend, Flask API with key routes, local PostgreSQL, shared freeze.json. Fail-closed without DB. Not the shared demo URL.

Fallback raster: hld-local-720.png.


2. MSAIE staging (hld-aws-msaie)

Speakable title: MSAIE staging at cafe.artof.link. Browser → DNS/TLS → Flask + built SPA → on-box Postgres (MSAIE staging) — not a shared RDS. Knowledge Pages (knowledge.cafe.artof.link) is a separate column — two hostnames, two jobs. Same key API routes as local. Newsletter store-only. Dashed / out of cut: ELB wildcard · permanent hosting (Future). Off-camera ops line: tip 73d202d.

MSAIE staging at cafe.artof.link: Knowledge Pages separate; browser to DNS/TLS to Flask+SPA to on-box Postgres. ELB wildcard out of cut. Newsletter store-only.

Fallback raster: hld-aws-msaie-720.png.


3. Meghna FE / BE (flow-part2-fe-be)

Click path: Home → Gallery → Menu → Reservations (+ newsletter optional). Ends with a handoff to Architecture (Part 3).

Meghna demo path: Home Gallery Menu from freeze at build (no /api/menu). Reservations GET /api/slots then POST /api/reservations. Newsletter optional POST /api/newsletter store-only.

Fallback raster: flow-part2-fe-be-720.png.

StepFrontendHits Flask?Data
Home / Gallery / MenuReact pagesNo /api/menu from FE — @shared/freeze.json (+ menu-presentation) at buildfreeze · images via GET /images/…
ReservationsBooking formGET /api/slots?date= → POST /api/reservationsPostgres customers/reservations · 409 if full
Newsletter (optional)Footer formPOST /api/newsletterPostgres store-only
Operatornot Meghna pathGET /api/operatorread-only helper

The diagram also lists the full Flask surface (/api/health, /api/menu, /api/site, …) so Architecture can point at exposed routes without inventing FE arrows.


Flask routes (main) — quick legend

MethodPathRole
GET/api/healthDB ping
GET/api/menufreeze menu (API; FE Menu page imports freeze)
GET/api/sitefreeze site fields
GET/api/slots?date=reservation slots
GET/api/availabilityremaining tables
POST/api/reservationscreate · 409 full · fail-closed
POST/api/newsletterstore-only until SES
GET\POST/api/newsletter/unsubscribeunsubscribe API
GET/unsubscribeunsubscribe page
GET/api/operatorread-only helper
GET/images/<path>allowlisted images
GET/ · /<path>SPA catch-all

No FR/NFR IDs on the diagrams.


Related


Packed 2026-09-06 Europe/Berlin · PROTOTYPE · architect cut HLD trio + Meghna FE/BE honesty (freeze vs API).