Workflows
These are the journeys Atlas exists to support. Each one is described from the actor's point of view, with the platform doing the work behind the scenes.
W1 — A guest signs in for the first time
- I create an account for the guest in Authentik and put them in the right group (for example
grafana-viewers). - I send them the link to the application I want them to see, e.g.
grafana.<my-domain>. - They open the link, get redirected to Authentik, type their credentials, and land back on the dashboard already logged in.
- The next time they visit any Atlas service they have access to, they go straight in.
Why this matters: a single, professional-looking login flow for non-technical users; no per-app credential to lose.
W2 — I push a container image
- From my laptop I run
docker login harbor.<my-domain>(or use a Harbor robot account credential stored in Infisical). - I tag and push my image:
docker push harbor.<my-domain>/personal/my-app:1.2.3. - Harbor receives the image, scans it for known vulnerabilities, and shows the result in the UI within seconds.
- The image is now pullable by the cluster (and by other machines I authorize) over HTTPS.
Why this matters: my images stay private, scanned, and signed; I do not depend on a third-party registry.
W3 — I add a secret for a workload
- I open Infisical at
infisical.<my-domain>and sign in via Authentik. - I create or pick a project, then add a new secret (e.g.
STRIPE_API_KEY) to the relevant environment. - In the cluster, an
ExternalSecretresource references the Infisical project; External Secrets Operator pulls the value and creates a KubernetesSecret. - The workload that mounts that secret restarts and picks up the new value automatically.
Why this matters: secrets live in one auditable place; they never appear in Git or in a shell history.
W4 — I look at the health of the platform
- I open Grafana at
grafana.<my-domain>and sign in via Authentik. - The home dashboard shows me cluster CPU/RAM, disk usage, ingress traffic, and the status of every Argo CD application.
- If anything is red, I drill into the relevant dashboard (per-workload, per-namespace) and check recent logs in the embedded Loki panels.
- If an alert is firing, Alertmanager has already notified me; Grafana shows me which rule, when, and on which target.
Why this matters: I have one place to look when something feels off, instead of a dozen kubectl commands.
W5 — I recover from a disk failure
- I provision a new SSD (or a new machine) and re-run the OpenTofu bootstrap procedure documented in Technical → Architecture.
- Argo CD reinstalls every workload from Git within minutes.
- I restore application data (Harbor blobs, Authentik database, Infisical database, Grafana dashboards, Prometheus history) from the latest Restic snapshot.
- The platform is back online at the same URLs with the same data, modulo whatever happened between the last snapshot and the failure.
Why this matters: a hardware failure is an inconvenience, not a catastrophe. The bootstrap is the disaster-recovery plan.
W6 — I deploy a new application to the platform
- I add a new directory under
apps/in the GitOps repository with the Helm chart or raw manifests for the application. - I add an entry to the Argo CD
app-of-appsmanifest pointing at it. - I commit and push.
- Within the next sync interval, Argo CD picks up the new application and deploys it. If it depends on a public hostname, Traefik picks up the new
IngressRouteand cert-manager issues a certificate.
Why this matters: adding a workload is a pull request, not a server-administration session.