Skip to content

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:

WorkflowTriggerOutput
build-push-<service>.ymlManualSingle service image
build-push-all.ymlManual or schedule (Tue/Fri 02:00 UTC)All service images

Image tags:

  • ghcr.io/finaisse-org/blitz-<service>:latest — most recent build from main
  • ghcr.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):

bash
cd blitz/src
just docker-build-api      # multi-arch build
just docker-push-api       # push to GHCR

Frontend (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-safe build/Dockerfile.mgmt.prebuilt.
  • Local one-shot build: just docker-build-mgmtui (uses the in-container build/Dockerfile.mgmt, mirroring the tenant UI) then just docker-push-mgmtui. Both are in the blitz-ui justfile. Set VITE_SYNCFUSION_LICENSEKEY in your environment first — the recipe passes it as a build arg.

Build locally (tenant UI):

bash
cd blitz-ui/src
just docker-build-ui       # tenant UI
just docker-build-mgmtui   # admin / mgmt UI

Build 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.