The challenge
A restaurant needs visitors to see the menu and book a table without friction, most often from their phone. I set out to do it with no accounts, no database and no server of my own, with accessibility and privacy built in from day one.
The solution
Booking by WhatsApp
a form with per-field validation that opens the restaurant's chat with the message already written. It says clearly that the booking is not confirmed until the restaurant replies.
Interactive menu
with a category filter, tags (vegetarian, gluten-free, spicy) and the allergens declared on every dish.
Takeaway
explains how to order by phone or WhatsApp, with no cart and no payment on the site.
Accessible by design
WCAG 2.1 level AA, keyboard navigation, visible focus, controls of at least 44 px and support for prefers-reduced-motion.
No data stored
what the customer types never leaves their browser: no cookies and no analytics.
Content that gets validated
the menu, the gallery and the reviews are checked at build time. A photo without alt text or a quote without a source and a date fails the build.
Legal footer and contact
opening hours, address, and legal notice, privacy and accessibility pages.
Demo mode
noindex and a robots.txt that block the site, so it is never mistaken for a real restaurant.
Outcome
A complete and fast site: in the latest measurement, Lighthouse scores 99–100 for performance and 100 for accessibility, with 85 unit tests and 154 end-to-end tests. I built it with a specification, a plan, tasks and documented decisions.
For developers
Next.js (App Router) + React 19, with static pages.
Strict TypeScript, no
any. Tailwind CSS v4 with design tokens: components use no loose colours or sizes.Zod on all incoming data: the form and the content. Types are derived from the schemas.
Vitest and Testing Library for logic and components; Playwright with axe for the full walkthrough and accessibility.
Specification-driven development: spec, plan, 11 tasks with their review and 4 documented decisions (ADRs).
Vercel, with CI on GitHub Actions.
Public repository:
github.com/Terryqg10/sabroso-peru

