Tech Stack
Last updated: 2026-02-27
PWA
- Serwist — Service worker via
@serwist/turbopack(Turbopack-compatible) - Offline support — Precache static assets, runtime cache pages on visit, fallback to
/~offlinefor documents when offline - Manifest —
public/manifest.jsonwith name, icons (maskable), theme_color; installable on desktop and mobile
Framework
- Next.js 16 — App Router, server components, static/dynamic rendering
- React 19 — Latest React with concurrent features
UI
- shadcn/ui — Radix Maia theme (
style: "radix-maia"incomponents.json) - Tailwind CSS v4 — Utility-first styling via
@tailwindcss/postcss - Radix UI — Accessible primitives (Select, Tooltip, Slot, etc.)
- Lucide React — Icon library
- class-variance-authority (cva) — Variant styling for components
- tailwind-merge — Merge Tailwind classes without conflicts
Data
- Neon — Serverless Postgres (
@neondatabase/serverless) - Drizzle ORM — Type-safe queries and migrations
- pgvector — Vector embeddings for RAG (Ask page)
AI
- Vercel AI SDK —
aiand@ai-sdk/reactfor streaming chat - OpenAI — Embeddings and chat completions (via API key or Vercel AI Gateway)
Feature Flags
- lib/feature-flags.ts —
getFeatureFlag(name)readsNEXT_PUBLIC_FEATURE_<NAME>=true - middleware.ts — Optional headers for RSC (e.g.
x-feature-hero-variant) - See FEATURE_FLAGS.md for usage
Internationalization
- next-intl — Locale-based routing, messages,
getTranslations/useTranslations,Link/usePathname/useRouterfrom@/i18n/navigation - Locales:
en(default),localePrefix: 'always'→/en/about, etc. - Messages:
messages/en.jsonwith namespaces (Common, HomePage, StoriesPage, etc.) - RAG/Ask: English-only per plan; no i18n extraction for Ask page strings
Key Libraries
| Category | Package | Purpose |
|---|---|---|
| Markdown | @mdx-js/mdx, react-markdown, remark-gfm, rehype-highlight, rehype-slug | MDX and Markdown rendering |
| Search | fuse.js | Client-side fuzzy search |
| Command palette | cmdk | Command menu (⌘K) |
| Carousel | embla-carousel-react | Image/content carousels |
| Forms & validation | zod | Schema validation |
| Analytics | @vercel/analytics, @vercel/speed-insights | Vercel analytics and Core Web Vitals |
| Payments | stripe | Checkout and webhooks |
| Theming | next-themes | Dark/light mode |
| Toasts | sonner | Toast notifications |
| Motion | framer-motion | Declarative animations; lib/motion.ts re-exports + useReducedMotionTransition() |
| PWA | @serwist/turbopack, serwist | Service worker, offline support, precaching |