Fundament

v0.1

The opinionated foundation for web apps built with Claude Code. Fork it, ship it, don't think about the setup again.

🇪🇺 EU region · Frankfurt · Owner: Martin

DB · Unreachable

Stack

Next.js 15

App Router · Server Components by default

TypeScript

Strict mode — no any allowed

Tailwind CSS

Utility-first styling · v4

Supabase

Postgres + RLS + Auth · EU (Frankfurt)

Vercel

Hosting · region fra1 · auto-deploy on main

Cloudflare

DNS · proxy off unless stated otherwise

pnpm

Package manager · never npm or yarn

Commands

# fundament — common commands

$pnpm dev
$pnpm build
$pnpm lint
$pnpm test
$pnpm typecheck

Loop game

0 loops
hold mouse to steer · complete a circle to score

Working Method

1

Plan before code

Start in Plan Mode (Shift+Tab twice). Write the plan to docs/plans/<feature>.md with Context, Scope, Steps, Risks, and Definition of Done. Commit the plan before writing any code.

2

Break down into a TODO

Create or update TODO.md with checkable items. Each item should be completable in one short session and one commit.

3

One step per iteration

Pick the next unchecked item. Propose approach and file list, wait for approval, implement, run typecheck + lint + build, fix errors, commit, tick the box.

4

Keep context clean

Use /clear between unrelated features. Use /compact when context grows long. Re-anchor via the plan file if drift is suspected.

5

When unsure

Stop and ask. Do not guess. Do not expand scope without updating the plan first.

Do / Don't

✓ Do

✓Use Server Actions for mutations
✓Keep components small and composable
✓Propose a plan before large refactors
✓Run typecheck and lint before committing
✓Enable RLS on every Supabase table
✓Use Conventional Commits (feat:, fix:, chore:…)

✗ Don't

✗Don't use localStorage/sessionStorage for auth — use Supabase session cookies
✗Don't add ORMs (Prisma, Drizzle) — use the Supabase client directly
✗Don't introduce CSS-in-JS — Tailwind only
✗Don't run --dangerously-skip-permissions outside a sandbox
✗Don't expose SUPABASE_SERVICE_ROLE_KEY to the client
✗Don't query Supabase from Client Components