Local development uses Docker Compose for PostgreSQL/TimescaleDB, PgBouncer, Redis, and Adminer.
- Docker with Compose v2
- .NET 10 SDK
Start the local services:
./start-local-databases.shStartup loads the checked-in development seed only when relisten_db is empty.
It preserves existing data and starts no imports. No AWS access or database
download is required.
See local-dev/README.md for connection details, the
seed and explicit restore procedures, User Service startup, and manual ingestion.
Run ./test-local.sh for tests against disposable databases on the same local
PostgreSQL and Redis services. Temporal test servers start automatically.
Adminer is available at http://localhost:18080.
Stop the containers without deleting their data:
./stop-local-databases.shRun the API from the repository root:
dotnet run --project RelistenApi/RelistenApi.csprojYou can also open the repository in your C# editor and use its debugger.
Open the API Server at: http://localhost:3823/api-docs
RelistenIngestionWorker runs Temporal ingestion separately from the API.
Temporal records execution progress so imports can resume after worker restarts.
Hangfire still runs cache and popularity jobs in production.
Start with the ingestion overview for architecture, provider behavior, and design contracts. Use the operations guide for imports, schedules, and recovery, or local setup for development commands. Importing a seed artist can fetch its full upstream catalog; the seed does not limit import work.
The API and standalone ingestion worker initialize Sentry independently when
SENTRY_DSN is configured. Scheduled-run monitoring is not enabled.
See diagnostics and monitoring
for coverage and the remaining work.
Restore the repository-local CSharpier tool, then format the codebase:
dotnet tool restore
dotnet csharpier format .Before every commit and push, check formatting without changing files:
dotnet csharpier check .If the check fails, run dotnet csharpier format ., review the diff, and rerun
the check before committing or pushing.