Continuous deployment for new tab surfaces. This repo separates the new tab experience into three distinct roles — API, Coordinator, and Renderer — so each can evolve on its own terms without being locked to Firefox's release cadence.
- API — Models upstream data for local development. Not a production service.
- Coordinator — Privacy-preserving data pipeline and cache manager. Uses SWR to update renderers without disrupting the user. In production, this lives in browser core.
- Renderer — The user experience, built and deployed to remote settings for continuous delivery. The primary production artifact shipped from this repo.
Full documentation → (auto-deployed from docs/)
The docs cover architecture, contracts, subsystem deep-dives, and development guides. Start with What is this? for orientation.
corepack enable pnpm
pnpm installSet up environment files:
- Copy
.env.example→.envat root (ports for Vite) - Copy
clients/api/.env.example→clients/api/.env(data endpoint)
pnpm sync-assets # align local assets with production
pnpm dev # start all services with hot reload
pnpm storybook # component development sandboxclients/ — runnable apps (api, coordinator, renderer, web)
common/ — @common/types, @common/utilities
config/ — build config, linting, generators
data/ — @data/state (Zustand stores), @data/mocks
ui/ — @ui/components, @ui/styles
docs/ — architecture, contracts, and guides
For the full workspace breakdown, see Repo structure.
React 19, TypeScript, Zustand, Vite, TurboRepo, PostCSS + CSS Modules, Vitest, Storybook. Package manager: pnpm only.