---
title: "Decision log"
url: https://mdfy.app/SrgEHFCI
updated: 2026-05-16T14:17:17.748Z
source: "demo-seed"
---
# Decision log

ADR-style records. Append-only — never edit a decision, append a new one that supersedes.

## ADR-001 — Next.js App Router over Pages Router (2026-03-04)

**Context.** Greenfield project. Both routers are stable.
**Decision.** App Router.
**Why.** RSC + Cache Components match our data-heavy / read-mostly profile. Server Actions reduce API surface. Vercel ships features here first.
**Consequence.** Learning curve for hires familiar with Pages. Documented in onboarding.

## ADR-002 — Supabase over Neon + Clerk (2026-03-04)

**Context.** Need DB + auth.
**Decision.** Supabase for both.
**Why.** RLS lets auth and authz live next to data. One vendor. Cheaper at our stage.
**Consequence.** Vendor lock-in on auth. Acceptable — we'd rewrite auth before migrating off SB anyway.

## ADR-003 — Resend over SendGrid (2026-03-12)

**Context.** Transactional + marketing email.
**Decision.** Resend.
**Why.** DX, modern API, React Email templates we already use elsewhere.
**Consequence.** Less mature deliverability tooling. Revisit at $5k MRR.

## ADR-004 — pgvector over Pinecone (2026-04-02)

**Context.** Need vector similarity for AI features.
**Decision.** pgvector + HNSW in the existing Supabase Postgres.
**Why.** No extra vendor. JOINs with relational data are free. HNSW is fast enough up to ~10M vectors.
**Consequence.** When we exceed ~10M vectors we'll need to evaluate dedicated vector DB. Not soon.

## ADR-005 — Tailwind 4 over CSS Modules (2026-04-08)

**Context.** Component styling.
**Decision.** Tailwind 4 + a thin design-token layer.
**Why.** Faster iteration, smaller CSS bundle, shadcn/ui parity.
**Consequence.** Class lists get long. Use `clsx` + extracting to constants when a list exceeds 6 utilities.

## ADR-006 — Vercel AI Gateway over direct Anthropic SDK (2026-04-22)

**Context.** Multiple AI providers for failover.
**Decision.** Route through Vercel AI Gateway.
**Why.** Provider failover, zero data retention, observability built-in. Same vendor as hosting.
**Consequence.** One more hop in the request path. Latency p95 +30ms — acceptable.

## ADR-007 — Postgres over DynamoDB (2026-05-08)

**Context.** Block-level content with complex relationships.
**Decision.** Postgres.
**Why.** Three customer interviews flagged needs that require joins (cross-page analytics, block-level templates, A/B variant aggregation). Cost model showed PG cheaper up to ~50M rows.
**Consequence.** Will feel pain at ~100M rows. Revisit then.
