A fullstack TypeScript monorepo for building AI-powered resume tools, managed with Turborepo and Bun.
- Bun (v1.x+)
- Docker & Docker Compose (for containerized development)
| Category | Technology |
|---|---|
| Frontend | Next.js 16+, React 19, React Compiler, TypeScript 5.x+ |
| Styling | Tailwind CSS 4.x (PostCSS) |
| Backend | Elysia 1.x+, Bun 1.x+, TypeScript |
| Database | PostgreSQL 18 with Prisma 7.x ORM |
| State | Zustand 5.x |
| Data Fetching | TanStack React Query 5.x, Eden (Elysia type-safe client) |
| Rich Text | TipTap 3.x |
| @react-pdf/renderer, jspdf, html2canvas-pro | |
| Drag & Drop | @dnd-kit/core + @dnd-kit/sortable |
| Testing | Vitest 4.x, React Testing Library |
| Build | Turborepo, Turbopack, Bun |
| Code Quality | Biome 2.x+ |
| Git Hooks | Husky + lint-staged |
| Containerization | Docker, docker-compose |
curl -fsSL https://bun.sh/install | bashbun installcp .env.example .env.localEdit .env.local to set your database and other secrets.
Start PostgreSQL:
bun run docker:dbSet up the database schema:
bun run db:setupbun run devOr run individually:
bun run --filter=web dev # Web (Next.js) - http://localhost:3000
bun run --filter=@rezumerai/api dev # API (Elysia) - http://localhost:8080| Script | Description |
|---|---|
bun run dev |
Start all apps in development mode |
bun run build |
Build all packages and apps |
bun run test |
Run all tests |
bun run test:watch |
Run tests in watch mode |
bun run test:ui |
Open Vitest UI |
bun run test:coverage |
Run tests with coverage |
bun run code:check |
Run linting and type checking |
bun run check |
Run Biome linting |
bun run check-types |
Run TypeScript type checking |
bun run clean |
Clean all build artifacts |
bun run clean:install |
Clean and reinstall everything |
bun run db:setup |
Push schema and generate Prisma client |
bun run db:studio |
Open Prisma Studio (port 5556) |
bun run db:reset |
Reset database (destroys data) |
bun run docker:buildOr manually:
docker compose up --build| Service | URL |
|---|---|
| Web app | http://localhost:3000 |
| API | http://localhost:8080 |
| PostgreSQL | localhost:5432 |
| Prisma Studio | http://localhost:5556 |
bun run docker:downrezumerai/
├── apps/
│ ├── web/ # Next.js 16+ frontend
│ │ └── src/
│ │ ├── app/ # Next.js App Router (pages, layouts, error boundaries)
│ │ ├── components/ # React components (Home, Dashboard, ResumeBuilder)
│ │ ├── hooks/ # Custom hooks (useClickOutside, useFocusTrap, usePdfGenerator)
│ │ ├── lib/ # Utilities (api, api-client, errors, retry, pdfUtils)
│ │ ├── store/ # Zustand stores (useResumeStore, useBuilderStore, useDashboardStore)
│ │ ├── templates/ # Resume templates (Classic, Modern, Minimal, MinimalImage)
│ │ ├── constants/ # App constants (routing, dummy data, PDF, templates)
│ │ ├── env.ts # Zod-validated environment variables
│ │ └── proxy.ts # Security middleware (CSP, HSTS)
│ │
│ └── api/ # Elysia API (Bun-native)
│ └── src/
│ ├── app.ts # Elysia app (exports App type for Eden)
│ ├── server.ts # Bun server entrypoint
│ ├── env.ts # Zod-validated env (API_PORT, DATABASE_URL, etc.)
│ ├── modules/ # Feature modules (auth, user)
│ └── plugins/ # Plugins (prisma, auth, logger, error)
│
├── packages/
│ ├── database/ # Prisma 7.x ORM (PrismaPg adapter)
│ │ ├── prisma/schema.prisma # Database schema
│ │ ├── generated/prisma/ # Generated Prisma client
│ │ └── index.ts # Prisma singleton export
│ ├── types/ # Shared TypeScript types & Zod schemas
│ ├── ui/ # Shared UI components (shadcn/ui based)
│ ├── utils/ # Shared utilities (date, string, styles/cn)
│ ├── vitest-config/ # Shared Vitest configuration (base, react, node)
│ └── tsconfig/ # Shared TypeScript configs
│
├── biome.json # Biome linter/formatter config
├── turbo.json # Turborepo config
├── docker-compose.yml # Docker orchestration (PostgreSQL, web, api)
└── package.json # Root package.json (Bun workspaces)
- Package Manager: Always use Bun (
bun install,bun run, etc.) — never npm, yarn, or pnpm - Code Style: Biome handles all linting and formatting (120 char width, double quotes, sorted Tailwind classes)
- Type Safety: TypeScript strict mode everywhere with explicit return types enforced
- Testing: Write tests alongside your code using Vitest 4.x + React Testing Library. Tests are co-located with components in
__tests__folders (e.g.,components/Badge.tsx→components/__tests__/Badge.test.tsx). Root-level components keep tests insrc/__tests__. Use relative imports in test files. Aim for 100% coverage on new components. - State Management: Zustand 5.x for client-side state, TanStack React Query 5.x for server state
- API: Eden treaty for end-to-end type-safe API consumption (types inferred from Elysia)
- Routing: Use
ROUTESconstants fromconstants/routing.ts— never hardcode route strings - Styling: Tailwind CSS 4.x only — no inline styles; use
cn()for class merging - Security: CSP headers, HSTS, X-Frame-Options via
proxy.tsmiddleware - Git Hooks: Husky + lint-staged run
biome check --writeon every commit
Private - All rights reserved.