Tech Stack
Every technology in the Frequency stack was chosen deliberately. This page documents what we use, why we chose it, and how the pieces fit together.
Core Framework
Next.js 15
React Server Components, streaming, parallel routes. The App Router gives us fine-grained control over rendering strategies per route. Currently on v15.5.
React 19
Server components by default, Actions, use() hook, improved Suspense. Every component is a server component unless marked with 'use client'.
TypeScript 5
Strict mode enabled. Types flow from LinkML schemas through generated TypeScript to components. No any allowed except in escape-hatch scenarios with comments explaining why.
Mantine v8
CSS Modules, no runtime CSS-in-JS. 100+ components with built-in dark mode, accessibility, and responsive design. See UI & Design for usage rules.
Documentation
| Technology | Version | Role |
|---|---|---|
| Nextra | 4.6 | MDX-based documentation framework for Next.js App Router |
| nextra-theme-docs | 4.6 | Documentation theme with sidebar, search, TOC |
| Pagefind | 1.x | Post-build static search index for full-text search |
Data & State
| Technology | Role | Why |
|---|---|---|
| Supabase | Database + Auth + Realtime | PostgreSQL with RLS, built-in OAuth, SSR-friendly via @supabase/ssr |
| LinkML | Data modeling | YAML-based schema language — generates SQL DDL and TypeScript from one source |
| Zod | Runtime validation | Type-safe schemas at the boundary between client and server |
| TanStack Query | Server state management | Caching, background refetching, optimistic updates |
| React Hook Form | Forms | Minimal re-renders, Zod integration via resolvers |
Infrastructure
| Technology | Role | Why |
|---|---|---|
| Vercel | Hosting & CDN | Zero-config Next.js deployment, each app is its own Vercel project |
| Route 53 | DNS | Reliable DNS with wildcard support for PR preview subdomains |
| pnpm | Package manager | Fast, disk-efficient, strict dependency resolution. Currently v9.15 |
| Turborepo | Build orchestration | Parallel builds, caching, monorepo-aware task running. Currently v2.8 |
Developer Experience
| Technology | Role | Why |
|---|---|---|
| ESLint 9 | Linting | Shared config via @frequencyads/eslint-config, flat config format |
| Prettier | Formatting | Consistent code formatting, runs on pre-commit via lint-staged |
| Husky | Git hooks | Pre-commit (lint + format), pre-push (type-check), commit-msg validation |
| Pagefind | Full-text search | Static search index built post-build |
Brand & Components
| Package | Purpose |
|---|---|
@frequencyads/brand | Colors, typography, gradients, Mantine theme (frequencyTheme) |
@frequencyads/components | Shared UI: Hero, AudioPlayer, CodeBlock, FadeInSection, PrincipleCard, DosDonts, etc. |
@tabler/icons-react | Icon library — lightweight outline SVGs |
Workspace Packages
| Package | Purpose |
|---|---|
@frequencyads/auth | Supabase auth middleware, OAuth callback, login components, useAuth() hook |
@frequencyads/db | Supabase client factory, table prefixing, database types |
@frequencyads/models | LinkML schemas, generated TypeScript types, SQL migration scripts |
@frequencyads/eslint-config | Shared ESLint configuration |
@frequencyads/tsconfig | Shared TypeScript configuration |
AI Tooling
| Technology | Role | Why |
|---|---|---|
| Frequency AI Drivers | Agent orchestration | 9 specialist agents for development, security, and review |
| Claude | AI model | Opus 4.5 for complex reasoning, Sonnet 4.5 for speed |
| Linear / Notion | Task sync | Production uses Linear, sandbox uses Notion |
See AI Development for the full agent system documentation.
Version Matrix
| Requirement | Minimum | Current |
|---|---|---|
| Node.js | 24.x | v24 (.nvmrc) |
| pnpm | 9.x | 9.15.1 |
| TypeScript | 5.x | 5.9.3 |
| React | 19.x | 19.2.4 |
| Next.js | 15.x | 15.5.12 |
| Mantine | 8.x | 8.3.14 |
| Nextra | 4.x | 4.6.1 |
| Turborepo | 2.x | 2.8.7 |
Day 2 Roadmap
These technologies are planned but not yet integrated:
| Category | Candidates | Status |
|---|---|---|
| Background Jobs | Inngest, Trigger.dev | Evaluating |
| Resend + React Email | Planned | |
| File Upload | Uploadthing | Planned |
| Analytics | PostHog, Vercel Analytics | Evaluating |
| Error Tracking | Sentry | Planned |
| ORM | Drizzle | Evaluating (alongside raw Supabase) |
| Payments | Stripe | Planned |
| Advanced Search | Algolia, Meilisearch | Evaluating |
| UI Animation | Framer Motion | Planned |
Dependency Rules
- Always check existing packages before adding new dependencies
- Prefer workspace packages (
@frequencyads/*) over duplicating code - Check bundle size with
bundlephobia.combefore adding client-side dependencies - Verify React 19 compatibility — not all libraries support the latest React
- Pin major versions in
package.json— use^for minor/patch only - Document new dependencies in the Architecture page and in
CLAUDE.mdif AI needs to know about them