Getting Started
Local setup
Get the full stack running on your machine.
git clone https://github.com/robbeverhelst/routess.git
cd routess
bun install
cp .env.example .env
bun run devbun run dev does the following:
- Installs dependencies if
node_modulesis missing - Picks free local ports for the API, docs, web app, landing, Postgres, and pgAdmin
- Starts a Postgres container
- Starts pgAdmin
- Builds all
packages/*(so the apps can import them) - Runs every
apps/*in dev mode in parallel
If any default port is already in use, bun run dev will pick the next free local port automatically.
Custom non-default port values in .env are treated as explicit overrides.
You should see:
- Web: http://localhost:5173
- API: http://localhost:3000
- Docs: http://localhost:3001 (this site)
- Landing: http://localhost:3002
- pgAdmin: http://localhost:5050 (or the
PGADMIN_PORTfrom your root.env)
Environment variables
The repo uses a shared root .env. Copy and fill in:
cp .env.example .envRequired values:
VITE_MAPBOX_ACCESS_TOKEN: get one from mapbox.comVITE_GOOGLE_CLIENT_ID/GOOGLE_CLIENT_ID: from Google Cloud ConsoleGOOGLE_CLIENT_SECRET: from Google Cloud Console (used by API to exchange auth codes)JWT_SECRET: any random string for local dev
Optional local port overrides:
PORT: API port, defaults to3000DOCS_PORT: docs port, defaults to3001WEB_PORT: web port, defaults to5173LANDING_PORT: landing port, defaults to3002DB_PORT: change this when5432is already in usePGADMIN_PORT: change this when5050is already in use
Useful scripts
bun run lint:check # bun lint + Biome across the repo
bun run check-types # TypeScript across all workspaces
bun run test # Run the test suite
bun run build # Build everything (packages first, then apps)
bun run ci # Run the full CI pipeline locally