HOCO B2B
Team tasksAnis

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.

FieldDetails
Task codePRJ-01
PhaseP0 — Foundations (cadrage, UX/UI, architecture & contract)
Product scopeV1
StatusDone (Sat 17 Oct 2026)
StartSat 17 Oct 2026
DueSat 17 Oct 2026
ResponsibleAnis — Full-stack developer
Co-responsible—
Effort0.5 person-day(s) planned · 3 from scratch · size XS
Area · appProject · shared
Depends on—
UnblocksPRJ-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

Delivered on 17 Oct 2026 with this documentation baseline.

Subtasks

#SubtaskOwner
1Turborepo + pnpm workspace with task pipeline (build, dev, lint, typecheck, test) and remote-cache-ready turbo.jsonAnis
2App skeletons apps/server (Express), apps/dashboard and apps/web (Next.js 16), apps/docs (Fumadocs) on ports 3100–3103Anis
3Shared packages config (tsconfig, Biome presets), env (Zod-validated env loader), db (Prisma client), contracts, api-client, ui, sharedAnis
4Biome lint/format rules, lefthook pre-commit (format, lint staged) and commit-msg (commitlint) hooksAnis
5Commitlint config: Conventional Commits, scopes = apps/packages, task id in subjectAnis
6GitHub Actions CI: install with pnpm cache, lint, typecheck, test, build on every PR to dev and masterAnis
7Multi-stage Dockerfiles (server image running api or worker by command; Next standalone images for dashboard and web)Anis
8Repository pushed to GitHub with master/dev branches, branch naming convention and PR templateAnis

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 build without errors on Node 22
  • pnpm dev starts 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

RequirementTitleRelease
NFR-09Maintainability: automated tests, CI gates, typed contracts, documentationV1

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.

On this page