Skip to main content

Stack

Technology decisions, routing rules, and critical constraints that govern every project built on this framework.

Locked Decisions

Researched, deliberate choices. Do not substitute. If an agent introduces an unauthorized library, catch it and revert.

DecisionUse ThisNot ThisWhy
Date/timedate-fns (migrating from Luxon)moment, dayjs, native DateTree-shakeable, functional API. Migration in progress — do not flag date-fns as violation
ValidationZodyup, joi, io-tsTypeScript-first, runtime + static
State (client)ZustandRedux, MobX, JotaiMinimal boilerplate, no providers
State (server)TanStack QuerySWR, manual fetchCache invalidation, devtools
CSSTailwind CSS 4CSS modules, styled-componentsUtility-first, framework standard
Componentsshadcn/ui + Radix UIMaterial UI, Chakra, Ant DesignComposable, unstyled primitives
FormsReact Hook FormFormikPerformance, uncontrolled components
Package managerpnpmnpm, yarnStrict, fast, workspace-native
LoggingAxiomconsole.log, winston, pinoStructured cloud logging
ErrorsSentrymanual error trackingSource maps, session replay
AnalyticsPostHogMixpanel, AmplitudeSelf-hostable, feature flags
Remote accessMoshi + Tailscale + tmuxClaude Code Remote ControlFull terminal UI, voice input, resilient Mosh, push notifications, no intermediary routing
Diagrams/visuals`/diagram` skill (Gemini 3 Pro Image)Mermaid, HTML+Playwright renderingNative image gen, no rendering pipeline, richer output

Agent Routing

Route by domain to the right agent. Each specialist has a defined model tier and area of responsibility.

AgentModelDomainFile
OrchestratorsonnetRouting, delegation`.claude/agents/agents-orchestrator.md`
Frontend DevelopersonnetUI, components, pages`.claude/agents/engineering-frontend-developer.md`
Backend ArchitectopusArchitecture, system design`.claude/agents/engineering-backend-architect.md`
Senior DevelopersonnetBackend, APIs, logic`.claude/agents/engineering-senior-developer.md`
Security EngineeropusThreats, audits, RLS`.claude/agents/engineering-security-engineer.md`
PlannersonnetPlans, specs, design phase`.claude/agents/planner.md`
CriticsonnetCode review, technical critique`.claude/agents/critic.md`
SimplifierhaikuScope checks, complexity reduction`.claude/agents/simplifier.md`
StandardshaikuStandards compliance, drift detection`.claude/agents/standards.md`

Model Tier Policy

Every agent has an assigned model tier. These are deliberate choices — do not override without justification.

TierModelWhen to UseAgents
Opusclaude-opusJudgment-heavy work: architecture decisions, security analysis, creative design, threat modeling
Backend ArchitectSecurity Engineer
Sonnetclaude-sonnetExecution work: implementation, planning, code review, delegation. Default tier for new agents.
OrchestratorFrontend DeveloperSenior DeveloperPlannerCritic
Haikuclaude-haikuChecklist/rule-following work: scope checks, standards compliance, drift detection
SimplifierStandards

Critical Rules

These rules exist because they were violated and caused real problems. No exceptions.

  1. No `any` types Use proper TypeScript typing
  2. No console.log Use Axiom/Sentry logging
  3. No TODO without issue reference Every TODO must reference a Linear issue
  4. No native Date Always use Luxon (see Locked Decisions)
  5. Validate at edge Zod schemas for all external inputs
  6. Verify before claiming done Run the full verification command and confirm output
  7. Sequential git writes Sequential by default. Parallel execution is allowed when: (1) `/batch` overlap detector confirms no write-write conflicts, (2) each lane runs in an isolated git worktree, (3) merge ordering is sequential (Lane 1 → 2 → 3). Outside `/batch`, the rule remains absolute: one branch at a time.
  8. Check Locked Decisions Before introducing any library, check the Locked Decisions table. If there is a locked choice for that domain, use it.
  9. Confirmation scoping Execute when the path is clear; ask only when genuinely ambiguous.

Upgrade Paths

When the locked decision is no longer the best choice, here is what the migration would look like and how much effort and risk it carries.

DecisionCurrentAlternativeEffortRiskNotes
Date/timedate-fns (migrating from Luxon)Temporal API (Stage 3)HighLowWait for browser support
ValidationZodValibotLowLowSmaller bundle, similar API
State (client)ZustandJotaiMediumLowDifferent mental model
State (server)TanStack QuerySWRMediumMediumLess features
CSSTailwind CSS 4N/AN/AN/ANo viable alternative
Componentsshadcn/uiN/AN/AN/ANo viable alternative
FormsReact Hook FormTanStack FormMediumLowNewer, growing ecosystem
Package managerpnpmBunMediumHighRuntime compatibility risks
LoggingAxiomDatadogHighMediumVendor lock-in concern
ErrorsSentryN/AN/AN/ANo viable alternative
AnalyticsPostHogN/AN/AN/ANo viable alternative

Architecture Overview

How a web request flows through the stack, with locked decisions mapped to each layer.

How a web request flows through the stack, and which locked decisions operate at each layer.

ClientBrowser
EdgeCDN / Vercel
FrameworkNext.js App Router
UI LayerReact Components
  • shadcn/ui
  • Tailwind CSS 4
  • React Hook Form
State & FetchData Layer
  • TanStack Query
  • Zustand
  • Zod
Infrastructure layer
Locked decision layer

Search Framework Explorer

Search agents, skills, and standards