PRJ-01 — Monorepo scaffold, tooling & repository setup
Turborepo/pnpm monorepo with server, dashboard, web and docs apps, shared packages, Biome, lefthook, commitlint, CI and Docker — pushed to GitHub.
| Field | Details |
|---|---|
| Task code | PRJ-01 |
| Phase | P0 — Foundations (cadrage, UX/UI, architecture & contract) |
| Product scope | V1 |
| Status | Done (Sat 17 Oct 2026) |
| Start | Sat 17 Oct 2026 |
| Due | Sat 17 Oct 2026 |
| Responsible | Anis — Full-stack developer |
| Co-responsible | — |
| Effort | 0.5 person-day(s) planned · 3 from scratch · size XS |
| Area · app | Project · shared |
| Depends on | — |
| Unblocks | PRJ-02 |
| Milestones | — |
Summary
Turborepo/pnpm monorepo with server, dashboard, web and docs apps, shared packages, Biome, lefthook, commitlint, CI and Docker — pushed to GitHub.
Description
Done on 17 Oct 2026. This task set up the single repository (AnisBetehi/hoco) that holds the server, the back-office, the reseller web and the docs, so every later task starts from shared tooling instead of a blank folder (NFR-09, cahier §13.4). It delivered a Turborepo + pnpm workspace with the apps server, dashboard, web and docs, and the packages config, env, db, contracts, api-client, ui and shared. Quality gates are wired from day one: Biome for lint and format, lefthook pre-commit and commit-msg hooks, commitlint enforcing Conventional Commits with app/package scopes, a GitHub Actions CI workflow, and Dockerfiles for the server (api + worker from one image) and the Next apps. Out of scope: business code, Prisma models (SRV-02), contracts (SRV-03) and the deployment targets (OPS-02). Everything after it (SRV-01, OPS-01, SRV-02) builds on this layout.
Note
Subtasks
| # | Subtask | Owner |
|---|---|---|
| 1 | Turborepo + pnpm workspace with task pipeline (build, dev, lint, typecheck, test) and remote-cache-ready turbo.json | Anis |
| 2 | App skeletons apps/server (Express), apps/dashboard and apps/web (Next.js 16), apps/docs (Fumadocs) on ports 3100–3103 | Anis |
| 3 | Shared packages config (tsconfig, Biome presets), env (Zod-validated env loader), db (Prisma client), contracts, api-client, ui, shared | Anis |
| 4 | Biome lint/format rules, lefthook pre-commit (format, lint staged) and commit-msg (commitlint) hooks | Anis |
| 5 | Commitlint config: Conventional Commits, scopes = apps/packages, task id in subject | Anis |
| 6 | GitHub Actions CI: install with pnpm cache, lint, typecheck, test, build on every PR to dev and master | Anis |
| 7 | Multi-stage Dockerfiles (server image running api or worker by command; Next standalone images for dashboard and web) | Anis |
| 8 | Repository pushed to GitHub with master/dev branches, branch naming convention and PR template | Anis |
Deliverables
- Repository AnisBetehi/hoco: apps/{server,dashboard,web,docs}, packages/{config,env,db,contracts,api-client,ui,shared}
- turbo.json, pnpm-workspace.yaml, biome.json, lefthook.yml, commitlint.config.ts at the repository root
- .github/workflows/ci.yml (lint, typecheck, test, build)
- Dockerfiles for apps/server, apps/dashboard and apps/web
Acceptance criteria
- A fresh clone runs
pnpm install && pnpm buildwithout errors on Node 22 -
pnpm devstarts server on 3100, dashboard on 3101, web on 3102 and docs on 3103 - A commit message without a valid Conventional Commits type or scope is rejected by the commit-msg hook
- CI runs lint, typecheck, test and build on a pull request and blocks the merge when one fails
- The server Docker image starts either the api or the worker process from the same build
Requirements covered
| Requirement | Title | Release |
|---|---|---|
| NFR-09 | Maintainability: automated tests, CI gates, typed contracts, documentation | V1 |
Test measures
- CI green on the first pull request to dev
- Manual check: clean clone on a second machine, install, build and dev servers reachable
- Manual check: lefthook blocks a badly formatted file and a non-conventional commit message
KPI
- Delivered by Sat 17 Oct 2026 within 0.5 person-day(s).
- Every acceptance criterion above demonstrated before hand-off; linked requirements' acceptance criteria pass.
- Zero open critical defects, permission gaps or data-integrity regressions at sign-off.
Generated from content/plan/tasks.json by scripts/generate-team-tasks.mjs. Dates are computed by the scheduler (Sunday–Thursday weeks, holidays excluded) — change the plan, not this page.