Skip to main content
This guide covers the day-to-day workflow for running Soundcheck services together. For per-component environment variables and one-time setup, see Environment Setup.

Architecture Overview

Shared infra (npm run dev:infra) starts Postgres, Azurite, and the Clerk emulator from dev/docker-compose.yml.

Quick Start

1

Start shared infrastructure

2

Migrate and seed the database

3

Start api-events

Wait for health:
4

Start the Web App

In a new terminal:
5

Start the Mobile App

In another terminal:

Access Points


Environment Configuration

Full per-component variables live in Environment Setup. The essentials for the local stack:
  • Mobile (.env at root): EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY, EXPO_PUBLIC_API_URL=http://localhost:4000. For a physical device, use your machine’s LAN IP (or the Expo tunnel).
  • Web (web/.env.local): NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY, CLERK_SECRET_KEY, NEXT_PUBLIC_API_URL=/api-proxy/api/v1, BACKEND_API_URL=http://localhost:4000.
  • api-events: DATABASE_URL (see migrate step above); npm run dev:emulator wires Clerk to :4711.
The web /api-proxy rewrite is dev-only (NODE_ENV === "development") — it forwards to BACKEND_API_URL to avoid CORS. A prod build can’t use it. With db:seed:demo-full + the Clerk emulator, sign-in lists demo personas without manual DB inserts.

Development Workflow

Making API Changes

Work in api-events/src/. Encore hot-reloads on save when using npm run dev:emulator. After route contract changes, run npm run openapi:emit and npm run openapi:parity.

Making Web Changes

Changes auto-reload with Next.js hot reload. Regenerate the typed API client after OpenAPI changes: npm run generate:api-client (also runs on predev).

Making Mobile Changes

Changes auto-reload with Expo’s hot reload.

Database Operations

View Database

Migrate & Seed

Reset Database


Troubleshooting

Ensure shared infra is running:
  1. Check api-events is running: curl http://localhost:4000/health
  2. Verify BACKEND_API_URL=http://localhost:4000 in web/.env.local
  3. Clear .next/ after changing NEXT_PUBLIC_* vars
  1. Use your computer’s IP instead of localhost
  2. Ensure phone/emulator is on same network
  3. Check firewall settings
Ensure all services use the same Clerk credentials (or the local emulator via npm run dev:emulator launchers).

Stopping All Services

To remove the database volume: add -v to the docker compose down command above.