Files
headquarter/docs/development.md
T
Fusion 0ae8f5d7f4 feat(FN-002): complete Step 5 — Documentation Structure
Fusion-Task-Id: FN-002
Fusion-Task-Lineage: 49cb7077-d805-4d39-9a27-ae50744f2839
2026-05-14 07:47:29 +02:00

178 lines
3.3 KiB
Markdown

# Development Guide
## Prerequisites
- **Node.js** ≥ 20 and **pnpm** ≥ 9
- **Python** ≥ 3.11 with `venv` support
- **Docker** and **Docker Compose** (for local services)
## Installation
```bash
# Install Node dependencies and Python virtualenv + packages
make install
# Or manually:
pnpm install
cd apps/api && python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
```
## Environment Setup
Copy the root environment example and fill in local values:
```bash
cp .env.example .env
```
Copy the frontend environment example:
```bash
cp apps/web/.env.example apps/web/.env
```
## Running Locally
### Frontend only
```bash
cd apps/web
pnpm dev # Vite dev server on http://localhost:5173
```
### Backend only
```bash
cd apps/api
.venv/bin/uvicorn app.main:app --reload --port 8000
```
### Both (via root script)
```bash
pnpm dev # Runs frontend and backend in parallel
```
### With Docker Compose
```bash
docker compose up --build -d
```
### Alembic Migrations
Generate a new migration after modifying models:
```bash
cd apps/api
.venv/bin/alembic revision --autogenerate -m "description"
```
Apply migrations:
```bash
cd apps/api
.venv/bin/alembic upgrade head
```
Downgrade one revision:
```bash
cd apps/api
.venv/bin/alembic downgrade -1
```
Or use the Makefile targets:
```bash
cd apps/api
make revision msg="description"
make upgrade
make downgrade
```
## Testing
### Frontend
```bash
pnpm --filter @headquarter/web test
```
Uses **Vitest** + **Testing Library** + **jsdom**.
### Backend
```bash
pnpm --filter @headquarter/api test
```
Or directly with pytest:
```bash
cd apps/api && .venv/bin/pytest
```
### All tests
```bash
make test
# or
pnpm test
```
## CI / Testing
A GitHub Actions workflow (`.github/workflows/ci.yml`) runs on every push and pull request to `main`. It executes two jobs in parallel:
- **web-ci** — checks out the repo, installs Node.js ≥ 20 and pnpm, then runs `lint`, `typecheck`, and `test` for `@headquarter/web`.
- **api-ci** — checks out the repo, sets up Python 3.11, installs API dev dependencies (`pytest`, `ruff`, `mypy`, `httpx`), starts a PostgreSQL service container, then runs `ruff check`, `mypy`, and `pytest` for the API.
The workflow reports pass/fail status directly on pull requests as required status checks. All commands must pass before a PR can be merged.
## Linting and Type Checking
### Frontend
```bash
pnpm --filter @headquarter/web lint
pnpm --filter @headquarter/web typecheck
```
### Backend
```bash
pnpm --filter @headquarter/api lint
pnpm --filter @headquarter/api typecheck
```
### All
```bash
make lint
make typecheck
```
## Building
```bash
make build
# or
pnpm build
```
## Project Layout
```text
├── apps/
│ ├── web/ # Vite React TypeScript frontend
│ └── api/ # FastAPI Python backend
├── packages/ # Shared packages (future)
├── docs/ # Documentation
├── deploy/ # Deployment skeleton files
├── docker-compose.yml
└── package.json # Root monorepo scripts
```
## Conventions
- **Frontend**: React functional components, TypeScript strict mode, ESLint + Ruff-like rules.
- **Backend**: FastAPI, Pydantic settings, pytest, ruff, mypy.
- **Commits**: Conventional commits with task ID prefix, e.g. `feat(FN-002): description`.