HTTPS edge
Traefik terminates public HTTPS, redirects HTTP, and routes by hostname. The portfolio and Pong have separate public routes.
visitor → edgefd2621b
open to signal
>_ reliability / systems notes
A public, deliberately bounded view of how the Belacca platform is built, delivered, protected, and improved.
Current state: this is an architecture note, not a live status page. Automated SLO telemetry, off-cluster backups, and an externally generated incident surface are not deployed yet.
Small, explicit boundaries are easier to reason about than a diagram that promises everything.
Traefik terminates public HTTPS, redirects HTTP, and routes by hostname. The portfolio and Pong have separate public routes.
visitor → edgeTwo NGINX-backed site replicas serve HTML, CSS, JavaScript, and discovery assets. /health is the probe endpoint.
Pong routes through a gateway to its static frontend and Go lobby API. A room receives its own Kubernetes Pod for the live game.
edge → gateway → roomThe portfolio is a static application. Its only runtime request is the same-origin analytics proxy; there is no CMS, browser-to-backend application API, login, or client-side framework.
The Pong lobby uses one API replica because its room state lives in single-writer SQLite on persistent storage. That is a known availability and scaling boundary, not hidden magic.
Each game room is represented by a dedicated Pod and Service with resource limits and a deadline. Waiting, finished, failed, and orphaned rooms are cleaned by the lobby.
Visitor analytics are sent through /count to the self-hosted GoatCounter service. The browser does not contact an analytics vendor directly, and the dashboard is separate from the public site.
The desired production action is a reviewed change, not an improvised shell session.
A change lands in the application repository and is reviewed as source.
GitHub Actions runs the site tests, builds the NGINX image, and publishes a commit-addressed GHCR tag.
The workflow writes the immutable SHA tag to the deployment Kustomization, keeping the intended release in Git.
Flux watches the application repository and applies the site deployment on its configured reconciliation interval.
The documented rollback is a reviewed Git revert followed by reconciliation. Published images now carry a registry SBOM and GitHub Artifact Attestation provenance; no admission or Flux verification is configured.
The public surface says what is protected without turning an operational map into a treasure map.
The site is served over the TLS route and has NGINX security headers for content type sniffing, framing, referrers, permissions, and content policy. The CSP keeps scripts, styles, connections, and forms on the same origin.
The Kubernetes dashboard is a separately routed, authenticated surface with read-only access. It is not embedded in this site, and no credentials, tokens, or cluster control plane are shipped to visitors.
Pong room lifecycle callbacks are addressed through the internal application service rather than the public gateway. Public WebSocket traffic reaches the game path; it does not expose the control callback.
Published images now receive a registry SBOM and GitHub Artifact Attestation provenance. Default-deny network policy, automatic attestation verification at reconciliation, and a mandatory vulnerability gate are not configured. They must not be inferred from the current headers or GitOps flow.
Reliability is a feedback loop: journey → signal → objective → budget → evidence → recovery.
/health.Not deployed: there is currently no Prometheus-compatible application metric layer, SLO recording rule, burn-rate alert, or external monitor feeding this page. Targets, windows, owners, and paging policy remain to be agreed.
Naming the failure domain is more useful than displaying an unearned uptime number.
Pong and analytics retain SQLite data on single-writer, node-local persistent storage. Operator documentation contains manual consistency-and-copy procedures, but there is no scheduled encrypted off-cluster backup, retention policy, or verified restore job today.
Therefore: no public RPO or RTO promise.
Runbooks start with non-destructive inspection, preserve protected state, check user-facing routes and Flux health, and use a reviewed Git revert for application rollback. Incidents are not currently backed by an automated public status feed or paging service.
This page is not an incident channel.
Next reliability work is to add externally generated sanitized status data, user-journey SLOs and burn-rate alerts, encrypted off-cluster backups, restore verification, and repeatable failure drills. Each item needs runtime proof before it becomes a claim here.
planned ≠ deployed
Source, manifests, and the limits behind this page are public.
Inspect the platform