Stack
In plain English: This page is the architecture companion for the two public hostnames: the Knowledge map at knowledge.cafe.artof.link (GitHub Pages) and the restaurant app at cafe.artof.link (React + JSX, Flask, PostgreSQL). Pictures here show the same design on two deploy targets — local (dev) and MSAIE staging — not a florist essay, Path B, 14 hats, Kafka/BFF, or 3DX Lab. Grade floor stays official FR-1..FR-18 / NFR-1..NFR-9; this companion cites those IDs only when a row links the freeze. The official SRS PDF is the source of truth; docs/srs.md is the working freeze. It does not invent FR-19 or NFR-10. If this page and the freeze disagree, the freeze wins.
- This knowledge map at
knowledge.cafe.artof.link— GitHub Pages. Explains the project. Does not take reservations. - The restaurant app at
cafe.artof.link— React + Flask + PostgreSQL. Weekend Lightsail staging (#57), not forever production. Permanent hosting is still Future #22.
They do not share a load balancer. GitHub only. Short labels: Glossary.
flowchart TB Map["This map — GitHub Pages
knowledge.cafe.artof.link"] App["Restaurant — weekend staging #57
cafe.artof.link"] Later["Not yet — Future #22
Permanent hosting"] Map --> App App -.-> Later
Two hostnames, two jobs. This map does not take reservations.
Probe date: 2026-09-05 Europe/Berlin (this session) for hostname rows. Journey / NFR evidence stays the 2026-09-02 records on Coverage.
Two hostnames
| Hostname | Job | This session |
|---|---|---|
knowledge.cafe.artof.link | This knowledge map | HTTPS GET 200. HTTP 301 to HTTPS. TLS VERIFY_OK. CN/SAN match. Let’s Encrypt, expires 2026-11-30. Pages cname matches. https_enforced=true. Cert approved. |
cafe.artof.link | Prefer live share this session (Lightsail staging) | HTTPS GET 200 (SPA + /operator + /api/health). TLS CN/SAN cafe.artof.link. DNS A <STAGING_IP>. #57 weekend window — not production forever. Longer-term hosting stays #22. |
They do not share a load balancer. This site is not the shop.
Knowledge surface — Café Fausse Knowledge
Allowlisted markdown under knowledge/ is built to static HTML (knowledge/build.py) and published as GitHub Pages (workflow .github/workflows/knowledge-site.yml). There is no CMS. No GitLab Pages.
Implementation surface — Café Fausse App
- Runtime in-repo on
main(PRs #9 + timezone #12): React + JSX (frontend/), Flask (backend/cafe_fausse/), PostgreSQL (backend/schema.sql). - MVP: official SRS only (
docs/srs.md, FR-1..FR-18, NFR-1..NFR-9; PDF SoT). - Local path (cts-ai; this VM did not reach it): Vite
http://127.0.0.1:5173, Flask:5000, Dockercafe-pg. App this session: Journey J1–J8 PASS (DB up); J9 PASS (Vite-only viewports + theme; not Flask+Postgres). After the J1–J8 handoff, App reportedcafe-pgunreachable. See Coverage. - Hosting of
cafe.artof.link: Lightsailcafe-fausse-stagingthis weekend (#57): Route53 A, Caddy + Let’s Encrypt, Flask + built SPA, on-box Postgres (MSAIE staging) — not a shared RDS. Not a permanent claim. Longer-term hosting stays #22. AWS is not in the restaurant MVP PR. - Extra features after the SRS belong in Future. AWS RDS column dump vs local schema: map + rationale (no cts-ai required).
Local (dev) vs AWS MSAIE staging
On camera: say cafe.artof.link is the staging environment for the MSAIE project (temporary — not production forever). Full architect table + why/how questions: Local vs AWS. Lightsail / Caddy / Route53 names stay on this page — not in NATURAL spoken lines.
Same design, two deploy targets. React + JSX → Flask → PostgreSQL. Fail-closed without a database. Newsletter is store-only (do not claim outbound SES).
| Local (dev) | AWS MSAIE staging | |
|---|---|---|
| What was used | Clone on cts-ai at C:\projects\code\aea-interactive-design | Deployed staging at cafe.artof.link — MSAIE project staging |
| Explanation | Coding, iteration, and CI-adjacent work without touching the shared demo | Shared public HTTPS host graders (and the team) can open; same product surface Meghna walks |
| Rationale | Fast local iterate | Prove the same stack on a public HTTPS host; one URL for the talk |
| Implementation | Vite + Flask + local Postgres | Caddy (TLS) → Flask → on-box Postgres (MSAIE staging) (host tip 73d202d; not a shared RDS) |
Talk spine pointer: Part 2 UX/business · Part 3 architecture why/how · Part 4 coding why/how · Part 5 honesty. See Parts 3–5 materials. Architect visuals: Part 3 HLD + Meghna FE/BE · Part 4 coding overview. Developer inventory (API / schema / FE/BE): Developer system map.
Same usecase, three depths: Part 2 UX = frontend view (what Meghna shows) · Part 3 Architecture = view behind it (HLDs + FE/BE flow) · Part 4 Coding = how it is actually implemented (forms/functions/FE/BE/API/DB).
Architect dual-env HLD (behind the UX)
On camera: cafe.artof.link is MSAIE staging (temporary — not production forever). Same design, two deploy targets. Notes: Part 3 HLD + flow. Older as-is / AWS staging SVGs stay below as history / probe archive.
PROTOTYPE visuals — not Quantic submit.
Local (dev) — Vite / Flask / local Postgres on cts-ai. Coding and iteration. Not the shared demo URL.
Fallback raster: hld-local-720.png.
MSAIE staging — browser → DNS/TLS → Flask + built SPA → on-box Postgres (MSAIE staging) — not a shared RDS. Knowledge Pages is a separate hostname. Newsletter store-only.
Fallback raster: hld-aws-msaie-720.png.
Meghna FE↔BE flow (behind the UX)
What Meghna clicks vs what hits Flask. Home / Gallery / Menu read the freeze at build — not GET /api/menu. Booking = GET /api/slots?date= then POST /api/reservations. Newsletter optional POST /api/newsletter store-only. Notes: Part 3 HLD + flow.
Fallback raster: flow-part2-fe-be-720.png.
Part 4 coding overview (implementation of that flow)
Forms · functions · frontend · backend · API · DB. Static pages import freeze.json; booking goes through slots + reservations; newsletter is store-only. Notes: Part 4 coding overview. Plain English: freeze.json (why / how / scope).
Fallback raster: flow-coding-overview-720.png.
AWS staging facts (this weekend)
Owner-probed implementation, not a second product. This session this agent also GET 200 on https://cafe.artof.link/ (~0.04s), /operator 200, /api/health 200 {"ok":true}; DNS A <STAGING_IP>; TLS CN/SAN cafe.artof.link, Let’s Encrypt notAfter=2026-12-04.
| Fact | Status |
|---|---|
| Lightsail | cafe-fausse-staging, us-east-1, small_3_0 (~$12/mo), IP <STAGING_IP> |
| DNS | Route53 cafe.artof.link A → that IP, TTL 60. Overrides the *.artof.link ELB wildcard. That wildcard is not Café Fausse. |
| Edge | Caddy + Let’s Encrypt HTTPS |
| App | Flask + built React SPA on the instance |
| Database | On-box Postgres (MSAIE staging) on the Lightsail instance — not a shared RDS. |
| Prefer share | https://cafe.artof.link/ (+ /operator, /api/health) |
| Interim backup | https://<STAGING_IP_DASHED>.sslip.io/ (same IP; not the primary paste) |
| Stale tunnels | shaky-deer-drive.loca.lt, happy-glasses-film, real-goats-shop |
| IAM | cts account <AWS_ACCOUNT_ID> |
| Window | Staging stays up until Quantic scoring is done, or the owner overrides tear-down (owner lock 2026-09-09). Knowledge Pages stay up the same window. Whether Quantic graders need the host up for video evaluation remains Unknown until the owner shares correspondence (#57). |
/operator | Read-only recording helper. Not FR-19. Not an admin console. |
| Newsletter | Store/register FR-15 / FR-16 only. No outbound mailer in the SRS MVP. |
| Permanent hosting | Still Future #22. #57 does not close it. |
History / probe archive (prefer hld-aws-msaie for the architect cut): AWS staging SVG.
As-is HLD (history / probe archive)
What is true now: knowledge Pages is live; prefer https://cafe.artof.link/ as the weekend Lightsail staging share (#57) — not production forever; the restaurant code still lives on main (local Vite / Flask / cafe-pg).
flowchart TB
subgraph K["Café Fausse Knowledge — live this session"]
MD["knowledge/*.md"] --> PY["knowledge/build.py"]
PY --> GHA["GitHub Actions → GitHub Pages"]
GHA --> KH["knowledge.cafe.artof.link"]
end
KH -.-> P["HTTPS GET 200 · HTTP 301 to HTTPS"]
subgraph N["Staging share this session — not production forever"]
CAFE["cafe.artof.link"] --> R53["Route53 A TTL 60 → STAGING_IP"]
R53 --> CADDY["Caddy + Let's Encrypt"]
CADDY --> APP["Flask + built React SPA"]
APP --> BOXPG["PostgreSQL on the instance"]
end
subgraph L["Local MVP on main"]
VITE["Vite :5173"] --> FLASK["Flask :5000"]
FLASK --> PG["cafe-pg PostgreSQL"]
endStatic copy (renders if Mermaid JS is blocked): as-is SVG — history / probe archive. Prefer local HLD + MSAIE staging HLD for the architect cut. Same probe facts in more detail: AWS staging SVG (also archive).
To-be HLD (permanent vs staging keep-up)
Knowledge stays GitHub Pages. Weekend staging is live this session and stays up until Quantic scoring is done, or the owner overrides tear-down (owner lock 2026-09-09). Knowledge Pages stay up the same window. Whether Quantic graders need the host up for video evaluation remains Unknown until the owner shares correspondence. Permanent restaurant hosting remains Future #22 and stays dashed.
flowchart LR
subgraph K2["Knowledge — already published"]
PAGES["GitHub Pages"] --> KH2["knowledge.cafe.artof.link"]
end
subgraph S["Weekend staging — kept until Quantic scoring"]
B["Browser"] --> HOST["cafe.artof.link Lightsail #57"]
HOST --> RE["React SPA"]
RE --> API["Flask"]
API --> DB["Postgres on the instance"]
end
subgraph R["Permanent hosting — still Future #22"]
HOST -.-> FUT["Dashed on purpose · not production forever"]
endStatic copy: to-be SVG.
CI/CD (this repo)
- GitHub Actions only. No GitLab CI, no
.gitlab-ci.yml, no AWS pipelines here. - Knowledge: build on pull requests; deploy Pages from
main. - App CI (
.github/workflows/ci.yml): fail closed ifdocs/srs.md/ official PDF SHA256 missing; Flask tests against PostgreSQL; frontend test + build. - Public repository. Assignment collaborator
quantic-graderis required; the owner must add that person — agents must not. - Author does not merge their own PR. MRC COMMENT is the role-approve signal (see PR #14 / issue #13). For
artofdream-authored PRs,cursor[bot]may merge after this-run green checks and Bugbot resolve-or-decline.
Archify (Documented)
Same-origin Archify HTML under `/archify/` after Pages deploy. Documented aid — not Live. Thin Knowledge Pages ratchet map (freeze → PR → MRC COMMENT → New Bot → probe). Source: `knowledge/archify/`. Companion wording on Honesty.
Honesty
knowledge.cafe.artof.linkwas HTTPS GET 200 this session. HTTP GET returned 301 to HTTPS. Pageshttps_enforced=true.- Prefer
https://cafe.artof.link/as the weekend Lightsail staging share (#57). Route53 A overrides the*.artof.linkELB wildcard; that wildcard is not Café Fausse. Staging database is on-box Postgres (MSAIE staging) — not a shared RDS. Not production forever. Longer-term hosting stays #22. - Journey J1–J8 PASS (cts-ai, DB up); J9 PASS (Vite-only viewports + theme). This VM did not reach Vite.
- NFR-1 / NFR-2 local Vite notes (56 ms / 32 ms) are not an SRS-budget “met.” NFR-7 is partial (Edge all routes + Firefox home; Chrome/Safari Unknown).
- Mentioned tunnel
https://nine-teams-try.loca.lt/— GET timed out this session. - Do not claim this system is antifragile.