Skip to main content
This page explains how to install AquaOps locally and seed a usable demo environment.

Prerequisites

You need:
  • Node.js
  • npm
  • a Supabase project
  • the database schema already provisioned in that Supabase project

Environment variables

Create a .env.local file in the project root with:

What each variable does

  • NEXT_PUBLIC_SUPABASE_URL The URL of your Supabase project.
  • NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY The browser-safe key used by the web app.
  • SUPABASE_SERVICE_ROLE_KEY A server-only key used for privileged actions such as seeding and admin operations.
Never expose the service role key to the client.

Install dependencies

Seed demo data

Run:
The seed script creates:
  • one demo organization
  • one demo location
  • two demo pools
  • default Illinois-based chemical profiles for the demo pools
  • three demo users, each with a different permission set (admin, manager, operator)

Seeded demo accounts

The script prints the seeded emails when it runs. By default it creates: All three share the same fixed password (the DEMO_USER_PASSWORD constant near the top of scripts/seed.ts), printed to stdout on every run. It’s intentionally not randomized β€” re-running npm run seed re-applies the same password to existing accounts, so you can always sign back in without resetting credentials.

Run the app

Then open:

First login

After login, the app opens to the dashboard. From there you can:
  • add chemical records
  • add maintenance logs
  • open settings to manage your organization data

Troubleshooting

Seed fails

Check:
  • the Supabase URL is correct
  • the service role key is present
  • the database schema already exists

Login fails

Check:
  • the seeded user exists in Supabase Auth
  • you are using the fixed demo password from scripts/seed.ts (DEMO_USER_PASSWORD)
  • the user account is still active

No data appears

Check:
  • the seed script completed successfully
  • you are logged into one of the seeded accounts
  • the users table and tenant data were created correctly