# Stack Decisions Log Use this document to capture the "why" behind platform and tooling choices. Treat each entry as a lightweight ADR (Architecture Decision Record). ## Template baseline - **Framework**: Next.js + TypeScript (edge-friendly, hybrid rendering, great DX) - **Testing**: Vitest (fast unit/integration runner with React ecosystem support) - **Styling**: Tailwind CSS or CSS Modules (choose one per project) - **Deployment**: Cloudflare Pages + Workers (immutable deploys, global edge) - **Database**: PostgreSQL (Supabase/Neon friendly), accessed via ORM of choice - **Storage**: S3-compatible buckets (AWS S3, Cloudflare R2) ## Recording a decision 1. Title — short phrase (`Adopt Drizzle ORM`, `Switch CI to Woodpecker`) 2. Context — what problem are you solving? Mention constraints, stakeholders, and trade-offs. 3. Decision — what did you pick and why? 4. Status — proposed, accepted, deprecated, superseded. 5. Consequences — positive and negative effects, migrations required, follow-up work. ## Example entry ``` ## Adopt Drizzle ORM Status: Accepted (2024-02-12) Context: Need a type-safe query builder that works in serverless environments without generating heavyweight clients. Decision: Replace Prisma with Drizzle ORM because it offers SQL-first migrations, small runtime footprint, and better edge compatibility. Consequences: - Rewrite existing Prisma migrations → Drizzle SQL migrations. - Update CI to run `drizzle-kit push` instead of `prisma migrate deploy`. - Developers need to learn the new query builder API. ``` Keep this log close to the code. When you revisit a project months later, these notes will save hours of rediscovery.