Skip to content
Work04 / 04

/work/sabroso-peru

Booking a table in a minute, from your phone and without creating an account

Sabroso PerúRestaurants · Demo projectDemo · 2026sabroso-peru.vercel.app
sabroso-peru.vercel.app
Sabroso Perú home page on desktop: a header with the brand emblem, the headline «Perú en la mesa», buttons to book a table and see the menu, the logo and the opening hours, on a dark background with an amber accent

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

Base

Next.js (App Router) + React 19, with static pages.

Language and styles

Strict TypeScript, no any. Tailwind CSS v4 with design tokens: components use no loose colours or sizes.

Validation

Zod on all incoming data: the form and the content. Types are derived from the schemas.

Testing

Vitest and Testing Library for logic and components; Playwright with axe for the full walkthrough and accessibility.

Method

Specification-driven development: spec, plan, 11 tasks with their review and 4 documented decisions (ADRs).

Deployment

Vercel, with CI on GitHub Actions.

Code

Public repository: github.com/Terryqg10/sabroso-peru