Setting Up Your Development Environment
Install Dependencies
This project uses pnpm through Corepack.
Start Infrastructure Services
If you want to run the app directly on your machine with This starts the following infrastructure services:
pnpm dev, start only the infrastructure services:- PostgreSQL — Database (port 5432)
- Redis — AI Agent workspace streams/state (port 6379)
- SeaweedFS — S3-compatible storage (port 8333)
From v5.1.0 onwards — PDF generation now runs entirely in the browser via
@react-pdf/renderer, so no Browserless or Chromium container is required for development.Run Database Migrations If Needed
The server startup path runs migrations before serving traffic. To apply migrations manually without starting the app,
export
DATABASE_URL because Drizzle Kit reads directly from process.env:Start the Development Server
Available Scripts
Here are the most commonly used scripts during development:Development
| Command | Description |
|---|---|
pnpm dev | Start the web and server development processes |
pnpm build | Build the production web bundle and server bundle |
pnpm start | Start the built production server |
pnpm typecheck | Run TypeScript type checking |
pnpm test | Run Vitest across workspaces |
pnpm exec biome check . | Run a non-mutating Biome check |
pnpm check | Run Biome with write/fix behavior (--write --unsafe) |
pnpm exec turbo boundaries | Check workspace/package boundary rules |
Database
| Command | Description |
|---|---|
pnpm run db:generate | Generate migration files from schema changes |
pnpm run db:migrate | Apply pending migrations |
pnpm run db:studio | Open Drizzle Studio (database GUI) |
Internationalization
| Command | Description |
|---|---|
pnpm run lingui:extract | Extract translatable strings from code |
Understanding the Project Structure
Understanding the project structure will help you navigate the codebase:Working with the Database
Viewing the Database
Use Drizzle Studio to explore and manage your database:Making Schema Changes
- Edit the schema in
packages/db/src/schema/* - Generate a migration:
- Apply the migration:
Working with Translations
Reactive Resume uses Lingui for internationalization.Adding Translatable Text
Use thet macro for strings or <Trans> component for JSX:
Extracting Translations
After adding new translatable text, extract them to the locale files:apps/web/locales in .po format.
Code Quality
Linting & Formatting
Uses Biome for linting, formatting, import organization, and Tailwind class sorting:Type Checking
Run TypeScript type checking:Troubleshooting
Port 3000 or 3001 is already in use
Port 3000 or 3001 is already in use
The Vite web server uses
PORT (default 3000), and the Hono server uses SERVER_PORT (default 3001).
Either stop the conflicting process or choose alternate ports: bash PORT=3002 SERVER_PORT=3003 pnpm dev Database connection refused
Database connection refused
Ensure Docker containers are running:
bash docker compose -f compose.dev.yml ps docker compose -f compose.dev.yml up -d Check that PostgreSQL is healthy and accessible on port 5432.S3/Storage errors
S3/Storage errors
Verify SeaweedFS is running and the bucket exists:
bash docker compose -f compose.dev.yml logs seaweedfs docker compose -f compose.dev.yml logs seaweedfs_create_bucket If the bucket wasn’t created, restart the bucket
creation service: bash docker compose -f compose.dev.yml restart seaweedfs_create_bucket Type errors after pulling changes
Type errors after pulling changes
The route tree may need regeneration. Run the dev server which auto-generates routes:
bash pnpm run dev Or
run type checking to see specific errors: bash pnpm run typecheck Next Steps
Project Architecture
Deep dive into the project architecture and codebase structure.
GitHub Repository
View the source code and contribute to the project.