Skip to content
CafeJS Docs

Tech stack

Astro builds the pages, TinaCMS manages the content, React runs only in the admin. No database and no server of its own for public pages.

At a glance

PartUsesNotes
Page generationAstro 7Every page is built to HTML ahead of time
Content managementTinaCMSA modified build, kept in vendor/
Admin and previewReact 18Runs only in the admin; public pages load no React
LanguageTypeScript
EnvironmentNode.js 22 or 24, pnpmNot npm or yarn
Code checksBiomepnpm lint, pnpm format

Static pages, a React admin

At build time every page becomes an HTML file. Public pages load only a few small scripts for the parts that need interaction (menu, FAQ, forms), and no React.

Each page also has a /preview/… copy for the admin: that copy runs React in the browser, so as you type in the form the preview redraws without calling a server. /preview/… pages carry noindex, so search engines leave them out.

Content is JSON files

Every page, menu, colour and setting is a JSON file in content/. The admin reads and writes those files. Because content lives in Git, every edit is a commit: you can read the history and go back.

Code checks

Terminal
pnpm test       # tests of the shared logic
pnpm check      # TypeScript type check
pnpm contrast   # contrast of every colour scheme
pnpm lint       # Biome

After each build, four more commands check the output: pnpm zero-js (no public page loads React), pnpm nul-bytes, pnpm preview-parity (each /preview/… copy draws its public page’s HTML) and pnpm seo-check.