Billit
BillIt — fakturační SaaS (objednávky, faktury, platby, klienti, multi-tenant).
| Owner | billit (agent) |
| Status | running |
| Repo | studio60-cz/billit (monorepo: billit-api + billit-web) |
| Stack | NestJS + PostgreSQL + React + Vite |
| Hub URL | https://billit.s60hub.cz |
| Prod URL | https://ucto.studio60.cz (billit.cz už jen 301 → sem, DEC-014 rebrand) |
| Catalog | catalog/services/s60billit.yaml |
Komponenty
| Container | Port | Role |
|---|---|---|
billit-api |
3200 | NestJS backend |
billit-web |
3201 | React frontend (Vite) |
DB
| Env | DB | User | Server | Port |
|---|---|---|---|---|
| Hub | s60_billit_hub |
s60_billit_hub_user |
hub-alfa (pg-alfa) | 6432 |
| Prod | s60_billit_prod |
s60_billit_prod_user |
prod-alfa (pg-alfa) | 6432 |
Debug user (RO, NOLOGIN default): s60_billit_debug v prod DB. Heslo: /root/secrets/billit/.env.prod.debug. Povolit/zablokovat → infra/postgres.md.
Závislosti
- postgres-managed (pg-alfa, port 6432)
- redis (BullMQ pro export jobs)
- s60auth (JWT validace)
- mail (Resend pro fakturační emaily — domain
*.in.billit.czpro inbound)
Klíčová pravidla
Tenant model
- NIKDY netvořit vlastní tenant pro novou app — vše pod
studio-60slugem (orthogonal:feedback_billit_tenant_slug.md) - Pulse, budoucí apps → integrace přes API key + webhook na tenant
studio-60 - Env var:
BILLIT_TENANT_SLUG=studio-60(v.envintegrující aplikace, např. Pulse)
Auth
- ForwardAuth headers (
x-user-id,x-user-email) už NEFUNGUJÍ od 2026-03-12 - Aplikace volají BillIt API přes JWT signed s
SENTINEL_JWT_SECRET(HS256)
Routing
/api,/health,/docs→billit-api:3200/→billit-web:3201- Nginx routing definovaný v
deploy.yml
Aktuální integrace
| Aplikace | Tenant | API key prefix | Webhook | Status |
|---|---|---|---|---|
| Pulse | studio-60 | blt_6859 |
pulselab.cz/webhooks/billit | ✅ prod (2026-03-30) |
Postup integrace nové aplikace → ops.md § Nová aplikace nebo runbooks/billit-integration.md.
Secrets
/root/secrets/billit/.env.hub/root/secrets/billit/.env.prod/root/secrets/billit/.env.prod.debug(RO debug user)
Health checks
- Hub API:
curl https://billit.s60hub.cz/health - Prod API:
curl https://ucto.studio60.cz/health - ⚠️ NE
billit.cz— ta vrací 301, takže health check by tiše „prošel" na redirectu, ne na aplikaci (ověřeno 2026-08-02) - ⚠️ API má prefix
/api— nginx pouští nabillit-apijen/api,/health,/docs; všechno ostatní jde na frontend, který na libovolnou cestu vrátíindex.htmls 200.GET /v1/accounts/<slug>/…tedy vrátí 200 + HTML, i kdyby API neběželo. SprávněGET /api/v1/accounts/<slug>/…(nahlášeno billitu T-20260802-081)
Změny / historie
- 2026-04-27: deploy
686dd6c(CR-121 UX guards) hub+prod - 2026-03-30: Pulse integrován na BillIt prod (tenant studio-60, blt_6859)
- 2026-03-12: ForwardAuth removed (JWT validation lokálně)
- 2026-04-10: migrace DB na pg-alfa
Plný changelog: docs/deploy/changelog.md (filtrovat billit).
Související dokumenty
- ops.md — deploy, restart, troubleshoot
runbooks/billit-integration.md— postup integrace nové appinfra/db-mapping.md— DB mappinginfra/postgres.md— pg-alfa detaily