Architecture & Systems
System map
Responsibilities by repo
- haer-platform-web — frontend web: route orchestration, layout, auth/tenant, plumbing API. Turborepo (
apps/web+packages/*). - haer-platform-api — backend transaksional utama: REST API, data transaksional, migration DB (TypeORM). Bukan heavy-lifting.
- haer-claims-api (Go/Fiber) — domain klaim & expense: CRUD + submission claim, line item, receipt/OCR intake, transisi status (
draft → submitted → approved/rejected). golang-migrate. - haer-claims-mobile — app mobile: file klaim/mileage/travel/split, approve/reject, notifikasi, browse benefit. Manggil haer-platform-api + haer-claims-api.
- haer-platform-bgjobs — background workers (Go):
notif-engine(notif email/socket),import-worker(import karyawan),location-sync(master lokasi). Heavy-lifting async. - haer-connector — integration layer source-agnostic: ingest data HR → model kanonik Person/Signal → expose ke AI agent via MCP. Python/FastAPI + AI.
Repo haer-claims-api (Go API) muncul di peta karena web & mobile manggil dia, walau di luar 5 repo fokus handbook ini.
Ownership & cross-folder rules
- Satu repo, satu tim. Default single-folder change; jangan ngedit repo lain kecuali ticket integration.
- Kontrak berubah → notify konsumer (web, mobile) di PR yang sama.
- Merge order: backend/API → web/mobile → deploy/auth. Lihat Engineering Process.
haer-platform-web internal boundaries (monorepo)
- Jangan pindah ownership antara
apps/webdanpackages/*. page.tsxtipis — cuma mount feature module. Route bucket tetap:(marketing),(auth),[tenant],platform-admin.- Feature package cuma di-import lewat public entrypoint (
@haer/feature-*); import internalsrc/*dilarang. - Nambah
packages/*butuh 3 edit terkoordinasi (transpilePackagesdinext.config.mjs,COPYdiDockerfilestage deps,pnpm install) — kalau nggak, clean build Docker gagal walaupnpm buildlokal lolos. Verifikasi pakai clean build beneran, bukan cuma lokal.
Auth
Semua surface yang di-protect di-scope by tenant + role via Zitadel (JWT).
Verifikasi token & resolusi tenant selalu server-side. Detail auth ada di
haer-platform-api/docs/AUTH.md + docs/SSO.md.
Source: workspace
CLAUDE.md(folder ownership, cross-folder rules) +AGENTS.mdtiap repo.