Skip to content

Local development

Use Node.js 24.20.0, pnpm 12.3.4, Docker Desktop and WSL 2 on Windows. Exact dependency versions are pinned in manifests and pnpm-lock.yaml.

From the repository root:

Окно терминала
pnpm install --frozen-lockfile
pnpm db:start
pnpm db:reset
node scripts/setup-local.mjs
pnpm db:test
pnpm exec tsx apps/web/scripts/bootstrap-local.ts
docker compose up --build --wait web
docker compose watch web

Open the app at http://127.0.0.1:3000, Supabase Studio at http://127.0.0.1:54323 and local mail at http://127.0.0.1:54324. Local accounts are parent@foliovera.test, student@foliovera.test and outsider@foliovera.test. The outsider has no family membership and is denied access.

Reset deletes local users and files. Run database tests immediately after reset, before bootstrap and browser tests. Setup scripts require local URLs before creating accounts. Local environment files are excluded from Git.

Окно терминала
pnpm typecheck
pnpm lint
pnpm test:unit
pnpm build
pnpm exec playwright install chromium
pnpm test:up
pnpm test:e2e

SQL tests roll back their transactions. Browser tests use the Docker production build with real local Auth, PostgreSQL, Storage and Mailpit. The magic-link test reads a delivered email and verifies that the link cannot be reused.

test:up validates local endpoints and passes only the public local key to the build. The container runs Next.js standalone output. Return to development with docker compose up --build --wait web. Database commands always target local Docker regardless of production credentials in the original .env.

Supabase lifecycle commands run its Linux CLI in the tooling image with the Docker Unix socket and Docker CLI 29.7.2. No Docker TCP port is required. Windows uses Docker Desktop and a project on a local drive; Linux uses the same image and the project’s absolute path. Reset uses Supabase stop --no-backup, then start, recreating Auth, database and Storage together.

Dependencies use a BuildKit cache mount for the pnpm store, following the official pnpm Docker guide. The cache is not an image layer.

Documentation uses Astro Starlight. Start its development server with pnpm docs:dev.