Onboard a Client — never a fork
:::danger The one rule
A client is a Client/Account field value (+ per-client Versions) and config + data — never
a code fork, never a project-per-client. One shared app serves every client; they differ by
configuration and their own data/deployment.
:::
1. Jira & records
- Add the client as a
Client/Accountfield value on the app's project — not a new Jira project. - Track their delivery with per-client Versions and/or a swimlane, on the app's existing board.
- Customer-facing support lives in JSM (Clustersco Support), routed by
Productto queues/SLAs — never on the dev board. Incidents link to dev Bugs viais caused by.
2. Deployment (if they run a dedicated instance)
Deploy the standard image — do not build a client-specific image. The client differs only by config + data:
# per-client Swarm stack from the SAME published image, pinned to a version:
docker stack deploy -c docker-stack.yml bgvchecker_<client>
# config via env vars only: CLIENT=<client>, APP_BASE_URL, DB_* (secrets from the runtime store)
Pin the client to a specific clustersco/<app>:<ver> and upgrade them on your schedule. Persistent
volumes and DB are per client (isolation); the code is shared.
3. If a client is stuck on an old version
A client who can't take the current release yet but needs a fix is a support/<x.y> branch (cut
from the old tag, PATCH-only, forward-ported) — still not a fork. See the
Git & Versioning Workflow.
Anti-patterns
- ❌ Forking the app repo per client · ❌ a Jira project per client · ❌ a client-specific image build
- ✅ One codebase + a
Client/Accountvalue + per-client config/data/deployment + (rarely) a support line