Café Fausse knowledge map

Not the restaurant. MVP = official SRS freeze.

FR / NFR coverage map

Presentation map for the Quantic course. Every freeze ID from docs/srs.md (official PDF SoT). FR-1..FR-18 and NFR-1..NFR-9 only. Do not invent FR-19 / NFR-10.

This page is not the restaurant. Paths are the in-repo Café Fausse App on main (PRs #9 + timezone #12) plus knowledge/CI where that is the evidence.

Evidence classes: code = committed file this session; CI = GitHub Actions job in .github/workflows/; local GET this session = HTTP GET from this agent VM; Unknown = no probe this session.

This agent VM did not reach cts-ai Vite :5173 / Flask :5000. Journey 1–9 pass/fail stays Unknown. NFR load and submit timings stay Unknown (no stopwatch this session).

Functional requirements

IDSummaryIn-repoEvidenceWhy it matters for the course
FR-1Display Café Fausse’s name prominentlyfrontend/src/pages/Home.jsx (<h1> from freeze); frontend/src/components/Layout.jsx wordmarkcodeHome is the first SRS product function. Graders look for the restaurant name on the digital front door.
FR-2Contact + hours (freeze address, phone, Mon–Sat / Sunday hours)Home.jsx visit/hours cards; Layout.jsx footer; shared/freeze.json; Flask GET /api/sitecode; CI (test_freeze.py)Freeze data. Changing the address or hours is a spec miss, not a polish.
FR-3High-quality images and a consistent themeHome.jsx hero from official images; frontend/src/styles/theme.csscodeCourse image pack is four webps only. Theme must hold across pages (NFR-4 adjacency).
FR-4Nav to Menu, Reservations, About Us, GalleryLayout.jsx LINKS; frontend/src/App.jsx routescodeSRS names those four destinations. Missing a route is a missing FR.
FR-5Menu by category with freeze items and pricesfrontend/src/pages/Menu.jsx; shared/freeze.json; backend/cafe_fausse/content.py; GET /api/menucode; CI (test_freeze.py)Prices and copy are SoT. Do not “improve” the menu in MVP.
FR-6Reservation form: time slot, guests, name, email, optional phonefrontend/src/pages/Reservations.jsx; backend/cafe_fausse/validate.pycodeThis is the reservations page the SRS lists as a product function.
FR-7Validate the selected slot is available and validbackend/cafe_fausse/slots.py; reservations.py; GET /api/slots; tests in test_reservations.pycode; CIInvalid or closed hours must not book. Sunday last seating is freeze hours, not a guess.
FR-8Assign a random table from 30 when the slot has roomreservations.py (ORDER BY random()); schema.sql table_number BETWEEN 1 AND 30code; CI (test_reservations.py, test_fail_closed.py)Table pool is 30. A 31st table would violate the SRS.
FR-9Success message, or error if the slot is fully bookedReservations.jsx banners; reservations.py fully_booked; test_fail_closed.pycode; CIFail closed: a full book is an honest no, not a guessed table.
FR-10History: founded 2010 by Chef Antonio Rossi and Maria Lopezfrontend/src/pages/About.jsx (freeze.history)code; CI (test_freeze.py)About Us copy is freeze text.
FR-11Founder biographies; locally sourced ingredientsAbout.jsx founders + freeze.locallySourcedcodeSRS About Us is history and founder bios / sourcing, not a slogan page.
FR-12Gallery: interior, dishes, events / behind-the-scenesfrontend/src/pages/Gallery.jsx; official four webps in assets/images/codeApp must not substitute the 17 student-recovered files in supplemental-not-official/.
FR-13Lightbox for enlarged imagesfrontend/src/components/Lightbox.jsx used by Gallery.jsxcodeSRS asks for enlarged viewing, not thumbnails only.
FR-14Awards 2022/2023 and quoted reviewsGallery.jsx awards + reviews from freezecode; CI (test_freeze.py)Award names and review quotes are freeze data.
FR-15Newsletter signup with email-format validationfrontend/src/components/NewsletterForm.jsx; validate.py; test_fail_closed.py invalid emailcode; CIBad emails must not be stored. HTML type=email plus server check.
FR-16Store submitted emails in the backend databasebackend/cafe_fausse/newsletter.py; customers.newsletter_signup in schema.sqlcode; CI (test_newsletter.py)Signup is a write. Missing DB → honest no (NFR-6), not a fake success.
FR-17PostgreSQL Customers + Reservations tablesbackend/schema.sql; backend/cafe_fausse/init_db.py; db.pycode; CI (restaurant-api job)SRS names the tables and columns. No database → no booking.
FR-18Flask: insert customer, check availability, random table, confirm or errorbackend/cafe_fausse/__init__.py (POST /api/reservations); reservations.pycode; CIBack-end reservation system is an SRS product function, not a static form.

Non-functional requirements

IDSummaryIn-repoEvidenceWhy it matters for the course
NFR-1Page load within 3 seconds on standard broadbandIntended SPA + static assets under frontend/ and theme.css. No timing run this session.UnknownThe SRS states a 3s budget. Without a measured probe, do not say it is met.
NFR-2Form submissions processed within 2 secondsDB_STATEMENT_TIMEOUT_MS=2000 / DB_CONNECT_TIMEOUT in db.py (fail-closed timeout, not a UX stopwatch).UnknownA 2s timeout is not evidence that happy-path submits finish in 2s. Timing stays Unknown.
NFR-3Interface intuitive and easy to navigateLayout.jsx primary nav; App.jsx routes matching SRS pagescodeCourse UX is the five SRS pages plus newsletter. Journey 1–9 pass/fail: Unknown.
NFR-4Consistent, visually appealing brandtheme.css (burgundy/cream, Flexbox/Grid); Layout chrome on every pagecodeSRS asks for brand consistency. Aesthetic judgment beyond the committed theme is Unknown.
NFR-5No double or over-bookingsUnique index reservations_slot_table; 30-table cap; test_fail_closed.py 31st tablecode; CIIntegrity is the reservation NFR. A race that assigns table 31 fails the assignment.
NFR-6User-friendly failure handlingtest_fail_closed.py (missing DB, unreachable DB, timeout, full slot); frontend error bannerscode; CIFail closed: honest no, not a cached yes. Maps to FR-9 when the slot is full.
NFR-7Chrome, Firefox, Safari, EdgeStandard React SPA + CSS. No browser matrix probe this session.UnknownCompatibility is an SRS NFR. Claiming four browsers without a probe is a status-word miss.
NFR-8Responsive desktop, tablet, smartphonetheme.css Grid/Flexbox + @media (max-width: 800px)codeSRS requires Flexbox or Grid and responsive layout. Device lab results: Unknown.
NFR-9Modular, documented codebackend/cafe_fausse/ packages; page components; README.md; this knowledge mapcodeMaintainability is in the freeze. A single script dump would miss the NFR.

Knowledge-site rows (not extra FRs)

These are harness surfaces, not new requirement IDs.

SurfaceIn-repoEvidenceWhy it matters
SRS freeze on this mapknowledge/srs.md, built srs-full.html from docs/srs.mdcode; CI (knowledge-site + srs-present)Graders can see the ID freeze without opening the PDF first.
Honesty vocabularyknowledge/honesty.mdcode; local GET 200 on https://knowledge.cafe.artof.link/honesty.html this sessionStops claiming cafe.artof.link is live Café Fausse.
Teammate briefknowledge/brief.mdcodeMeeting 2026-09-02 19:00 CET.

Out of this table

Florist Path B, 14 hats, Kafka, BFF, 3DX Lab, GitLab, AWS restaurant hosting, invented IDs. Public repo. Do not claim antifragile.