Skip to main content

Install

Clone the repository and bring the stack up with the default CPU profile:

git clone https://github.com/aaronstevenwhite/fovea.git
cd fovea
cp server/.env.example server/.env
docker compose up

The default profile starts six services. Wait until each reports healthy:

fovea-postgres-1        healthy
fovea-redis-1 healthy
fovea-otel-collector-1 running
fovea-backend-1 healthy
fovea-model-service-1 healthy
fovea-frontend-1 running

The backend runs npx prisma migrate deploy and the seed script on startup. The seed creates the admin user (password from ADMIN_PASSWORD, defaulting to admin) and a test user (password from TEST_USER_PASSWORD, defaulting to test123).

Confirm the stack

The frontend serves on port 3000:

curl -sI http://localhost:3000/ | head -1
# HTTP/1.1 200 OK

The backend health endpoint serves on port 3001:

curl -s http://localhost:3001/api/health
# {"status":"ok"}

The model service serves on port 8000:

curl -s http://localhost:8000/health
# {"status":"healthy"}

If any service is unhealthy, check the relevant log (docker compose logs backend, docker compose logs model-service) before continuing.

Sign in

Open http://localhost:3000/ in a browser. The login form accepts the seeded credentials:

username: admin
password: <ADMIN_PASSWORD or "admin">

The default mode is multi-user (FOVEA_MODE=multi-user). To run without authentication for local exploration, set FOVEA_MODE=single-user and restart. Multi-user mode is the documented configuration; the rest of the tutorial assumes it. See Reference > Environment variables for the full list.

Next

Continue to First persona to create the working persona this tutorial uses.