WORK / timseil-dev
—timseil-dev— NO DATA
This site is the system it describes.
UPTIME
— NO DATA
P95
— NO DATA
ERROR RATE
— NO DATA
PIPELINE · MEDIAN
— NO DATA
INCIDENTS
— NO DATA
- fetching metrics
- source: ops-api /api/systems/timseil-dev
A portfolio that only shows screenshots asks the reader to take the engineering on trust. For a DevOps role that is the wrong thing to ask: the parts worth judging are service boundaries, deploys, and what happens at three in the morning when a container dies.
So the site had to be a running system rather than a description of one. The front end is a client of a real API. The API has its own database, its own container, its own health check. The infrastructure is mine to break: DNS, TLS, reverse proxy, logs, backups, restarts.
The second constraint was honesty. Nothing on the page is allowed to be a decorative number. If a value is shown, something has to produce it — the training log comes from Postgres through the API, the contribution graph from the GitHub API, and the uptime series from a probe that runs outside this host, so that an outage is still recorded when the machine that would record it is the one that is down.
services:
api:
image: ghcr.io/g1ng4r/timseil-api:${IMAGE_TAG:?set IMAGE_TAG in Dokploy — the deploy pipeline sets it to sha-<short sha>}
depends_on:
db:
condition: service_healthy
migrate:
condition: service_completed_successfully
seed:
condition: service_completed_successfully
Nobody typed this block. It is cut out of the compose file the host runs, by the same command that generates the types — and the build turns red if that file moves and this block does not follow it.
- PUSHA squash merge onto main. Nothing deploys from a branch.
- CHECKEverything `make check` runs: vet, eslint, tsc, both unit suites, every rule.
- DBEvery migration up, then down, against a real Postgres.
- E2EThe browser suite at seven widths, against a production build.
- PUBLISHTwo images, tagged with the commit they were built from. Never `latest`.
- DEPLOYThe server pulls the tag and swaps the container. It never builds.
- VERIFYA gate that asks the new container what it is running. It answers with the commit, or the previous tag goes back.
- NO INCIDENT
- DEGRADED
- OUTAGE
- — NO DATA
- fetching operation days and incidents
- source: ops-api /api/systems/timseil-dev