TS://

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
01PROBLEM

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.

02BUILD
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.

03OPERATIONS
  1. PUSHA squash merge onto main. Nothing deploys from a branch.
  2. CHECKEverything `make check` runs: vet, eslint, tsc, both unit suites, every rule.
  3. DBEvery migration up, then down, against a real Postgres.
  4. E2EThe browser suite at seven widths, against a production build.
  5. PUBLISHTwo images, tagged with the commit they were built from. Never `latest`.
  6. DEPLOYThe server pulls the tag and swaps the container. It never builds.
  7. VERIFYA gate that asks the new container what it is running. It answers with the commit, or the previous tag goes back.
OPERATION · — NO DATA
  • NO INCIDENT
  • DEGRADED
  • OUTAGE
  • — NO DATA
    • fetching operation days and incidents
    • source: ops-api /api/systems/timseil-dev