poke-cards/
├── apps/
│ ├── api/ # Express API (Bun · Better Auth · Drizzle ORM · MariaDB · Swagger)
│ └── web/ # React Router + Vite frontend
└── packages/
├── contracts/ # Shared Zod contracts
└── ui/ # Shared shadcn-based UI components
| Layer | Technology |
|---|---|
| Runtime | Bun |
| API | Express.js |
| Auth | Better Auth |
| ORM | Drizzle ORM |
| Database | MariaDB |
| API Docs | Swagger / OpenAPI |
| Frontend | React Router v7 + Vite |
| Validation | Zod (shared contracts) |
| UI | shadcn/ui |
| Package Manager | pnpm (monorepo) |
- Node.js
>= 20 - pnpm
>= 10 - Bun
- Docker (recommended for MariaDB)
pnpm installcp apps/api/.env.example apps/api/.env
cp apps/web/.env.example apps/web/.envFill in the required environment variables in each
.envfile before starting the app.
docker compose up -d mariadbStart both API and web in parallel from the monorepo root:
pnpm devOr run each app individually:
# API only
pnpm --filter @poke-cards/api dev
# Web only
pnpm --filter web devRun the entire stack (MariaDB + API + Web) with a single command.
1. Copy environment files:
cp apps/api/.env.example apps/api/.env
cp apps/web/.env.example apps/web/.env
cp .env.compose.example .env.compose2. Build and start:
docker compose --env-file .env.compose -f compose.yml up -d --buildOr use the monorepo scripts:
pnpm docker:build # Build all images
pnpm docker:up # Start the stack
pnpm docker:logs # Stream logs
pnpm docker:ps # Check running containers
pnpm docker:down # Stop the stack3. Available URLs:
| Service | URL |
|---|---|
| Web | http://localhost:3000 |
| API | http://localhost:4000 |
| Swagger UI | http://localhost:4000/api/v1/docs |
# Testing
pnpm --filter @poke-cards/api test
pnpm --filter @poke-cards/api test:coverage
# Database
pnpm --filter @poke-cards/api db:migrate
pnpm --filter @poke-cards/api db:seed
# Type checking
pnpm --filter web typecheck# API image
docker build -f apps/api/Dockerfile -t poke-cards-api .
# Web image
docker build -f apps/web/Dockerfile -t poke-cards-web .Made by William Perret
Website · GitHub · LinkedIn · Instagram · Buy Me a Coffee
This project is distributed under MIT + Commons Clause.
You can use, study, modify, and distribute the code, but you may not sell the software or commercialize a product or service whose value derives substantially from it.
See LICENSE for the full text.