a font sharing website for Amharic font.
# Fonthabesha
Full-stack monorepo for the Fonthabesha platform.
## Branching Strategy
- `main`: production-ready only
- `dev`: integration branch
- `feature/*`: all new work branches from `dev`
Recommended flow:
1. branch from `dev`
2. open a PR back into `dev`
3. promote `dev` into `main` only when production-ready
## Project Structure
```text
backend/ NestJS API, Prisma schema, Docker setup
frontend/ Vite React frontend
shared/ shared code placeholder
docs/ planning and architecture docs
```
## Local Development
1. install dependencies
```bash
npm install
```
2. configure env files
- copy `backend/.env.example` to `backend/.env`
- copy `frontend/.env.example` to `frontend/.env`
3. run both apps
```bash
npm run dev
```
Default local URLs:
- backend: `
localhost`
- worker: background process, no HTTP port
- frontend: `
localhost`
Useful commands:
- `npm run dev:backend`
- `npm run dev:worker`
- `npm run dev:frontend`
- `npm run build`
- `npm run build:backend`
- `npm run build:frontend`
- `npm run seed:backend`
- `npm run test --workspace @fonthabesha/backend`
## Notes
- uploaded font assets can be served from the backend during local development
- the frontend reads the backend URL from `VITE_API_URL`
- backend auth emails use `SMTP_URL` when configured, or a staff-only dev preview inbox at `GET /api/v1/internal/mail/previews`
- backend auth mail requests are queued through Redis/BullMQ when Redis is available
- local `npm run dev` now starts the backend API, the backend worker, and the frontend together
- set `MAIL_QUEUE_ENABLED=false` when you want auth mail to bypass the queue for deterministic local tests
- set `MAIL_QUEUE_CONSUMER_ENABLED=true` only on the worker process that should consume queued mail jobs
- set `BACKGROUND_JOB_CONSUMER_ENABLED=true` only on the worker process that should consume non-auth jobs like search sync and family package warmup
- set `FONT_PROCESSING_CONSUMER_ENABLED=true` only on t …