Skip to main content
Development runs the applications on your machine and only the datastores in Docker. pnpm dev starts the shared package in watch mode, the API and the web app together through Turborepo.

Prerequisites

Start the development services

This starts postgres:18-alpine on port 5432 and redis:8-alpine on port 6379, both published to the host so a locally running API can reach them. The development database uses the password asobeast, which is fine because nothing is exposed beyond your machine. Never reuse it in a deployment.

Install and run

1

Install the workspace

2

Create the local environment files

Set AUTH_SECRET in apps/api/.env to at least 32 characters. Generate one with openssl rand -hex 32. The API refuses to boot without it.
3

Apply migrations and seed

4

Run everything

The API listens on 4000, the web app on 3000, and @asobeast/shared rebuilds on change.

Commands

Every command runs from the repository root.

Browser tests

Install the browser once before the first Playwright run.
The browser suite is hermetic. A typed node:http mock API runs on port 4100 and serves both server side prefetching and browser fetches, so no PostgreSQL, Redis or store request is involved. Playwright reuses a running dev server locally and builds the production bundle in continuous integration.

Test email alerts locally

Run a throwaway SMTP sink and point the API at it.
Then set SMTP_HOST=localhost, SMTP_PORT=1025 and SMTP_FROM=asobeast <alerts@localhost> in apps/api/.env, add an email alert on the settings page, and read the messages at http://localhost:8025.

Repository layout

Every request and response shape the frontend consumes lives in @asobeast/shared. Prisma generated types never leave apps/api, and packages never import each other by relative path. All store traffic crosses the StoreProvider boundary in apps/api/src/store-providers/. No other module imports a scraper library, which contains a parser breakage to one file.

Contributing

Commits follow Conventional Commits in the form type(scope): subject, enforced by a commit-msg hook. Feature work is frozen until 1.0.0 ships, so pull requests are limited to fix, test, behaviour preserving refactor, measured perf, docs, build, ci and chore. Read CONTRIBUTING.md before opening a pull request.
Last modified on July 31, 2026