Skip to main content

Stack

  • Next.js 16 App Router
  • React 19
  • TypeScript
  • Tailwind CSS v4
  • shadcn/ui
  • React Hook Form + Zod
  • Supabase for Postgres, Auth, and RLS
  • Vitest for unit tests

Requirements

  • Node.js compatible with the current Next.js toolchain
  • a Supabase project with the expected schema provisioned
  • environment variables in .env.local

Environment variables

Create .env.local with:
Notes:
  • the publishable key is used by the app client
  • the service role key is server-only
  • the seed script and admin-only server actions rely on the service role key

Installation

Seed demo data

The seed script creates a demo organization, base locations, pools, users (each with a directly-assigned permission set), and chemical profiles. The seeded user emails and their password are printed to stdout — the password is a fixed constant (DEMO_USER_PASSWORD in scripts/seed.ts), not randomized, so re-running the seed re-applies it to existing accounts instead of rotating credentials on every run.

Development server

Then open http://localhost:3000.

Scripts

Development notes

  • authenticated app routes live under src/app/(app)
  • server-side business logic lives in src/lib/actions
  • chemistry calculations live in src/lib/services
  • Supabase helpers live in src/lib/supabase
  • forms (template builder, submissions, scheduling, approvals, corrections), alerts, compliance, exports, and scheduled closures are all implemented product areas — public form links and multi-org accounts are the remaining roadmap phases