Building Services
All images are built with Docker (multi-arch) via GitHub Actions and pushed to GHCR (GitHub Container Registry) under the finaisse-org org.
Backend (blitz)
Each microservice in src/apps/ is independently containerised.
Trigger a build via GitHub Actions:
| Workflow | Trigger | Output |
|---|---|---|
build-push-<service>.yml | Manual | Single service image |
build-push-all.yml | Manual or schedule (Tue/Fri 02:00 UTC) | All service images |
Image tags:
ghcr.io/finaisse-org/blitz-<service>:latest— most recent build frommainghcr.io/finaisse-org/blitz-<service>:<short-sha>— specific commit (all branches)ghcr.io/finaisse-org/blitz-<service>:<branch-slug>— non-main branches
Services with CI build workflows: api, ws, agents, wfw, excelrw, emailprocessor
Build locally (single service):
cd blitz/src
just docker-build-api # multi-arch build
just docker-push-api # push to GHCRFrontend (blitz-ui)
The frontend is a Module Federation multi-app monorepo. Each sub-app is built independently; the ui host shell loads the others at runtime via URLs baked in at build time.
Sub-apps: ui (host), closehub, invoice, journal, recon, collections
Important: VITE_*_REMOTE_URL environment variables must be set correctly before the build runs — they are compiled into the JavaScript bundle and cannot be changed at runtime. All 6 apps are built and deployed in a coordinated pipeline.
Trigger a build: GitHub Actions → build-push-ui.yml in the blitz-ui repo.
Admin / mgmt UI (blitz-mgmtui)
The mgmt portal UI (apps/mgmt) is a standalone Vue app (not a federation remote), built and pushed as its own image ghcr.io/finaisse-org/blitz-mgmtui.
- CI: GitHub Actions →
build-push-mgmtui.yml, which builds natively first then packages via the OOM-safebuild/Dockerfile.mgmt.prebuilt. - Local one-shot build:
just docker-build-mgmtui(uses the in-containerbuild/Dockerfile.mgmt, mirroring the tenant UI) thenjust docker-push-mgmtui. Both are in theblitz-uijustfile. SetVITE_SYNCFUSION_LICENSEKEYin your environment first — the recipe passes it as a build arg.
Build locally (tenant UI):
cd blitz-ui/src
just docker-build-ui # tenant UI
just docker-build-mgmtui # admin / mgmt UIBuild Artifacts
All images are stored in GHCR:
- Backend:
ghcr.io/finaisse-org/blitz-<service> - Frontend:
ghcr.io/finaisse-org/blitz-ui(tenant),ghcr.io/finaisse-org/blitz-mgmtui(admin)
Images are pulled by Railway (staging) at deploy time.