Static bilingual website for a fictional 30-seat open-fire bistro in Paupys, Vilnius.
Restaurants need a fast, credible site that answers the essentials: atmosphere, menu, events, location, and reservation intent without a backend.
Diners, private-event guests, and reviewers looking at a polished frontend portfolio project.
I built the full static Next.js site: bilingual routing, typed copy, menu data, reservation sentence UI, motion, local fonts, SEO metadata, JSON-LD, sitemap, robots, Cloudflare headers/redirects, CI checks, and Pages deployment workflow.
app/routes: Lithuanian at/, English under/en/.components/UI, layout, page sections, menu, reservation.content/typed dictionaries and menu data.lib/locale, metadata, dates, fonts, mock reservations.public/static assets plus Cloudflare_headersand_redirects.tests/andscripts/static SEO/export validation.
Next.js static export keeps hosting simple and cheap on Cloudflare Pages. The build uses webpack explicitly for reliable static exports. Copy is dictionary-driven so missing translations fail typecheck. Images are unoptimized because there is no server runtime. Security headers avoid CSP because the static Next output needs inline framework scripts. The example site is blocked from search indexing through page metadata, response headers, and robots.txt.
Run:
npm run checkThis runs ESLint, TypeScript, static SEO tests, production build, export validation, and npm audit --audit-level=moderate.
Connect the repository through Cloudflare Pages and use:
- Production branch:
main - Build command:
npm run build - Build output directory:
out - Environment variable:
NODE_VERSION=20.20.2
wrangler.toml is the deployment source of truth and fixes the publish directory to out. Cloudflare deploys successful builds automatically. GitHub Actions runs the full npm run check suite for pull requests and pushes; no Cloudflare secrets are stored in GitHub.
Reservations still use a mock API. A real release needs a Cloudflare Worker or Pages Function, persistent storage, real business details, analytics/monitoring, and final domain redirects in Cloudflare.