The developer site of Simon Ostendorf: projects, skills and contact.
A Go service serves a Vue 3 single page application built on the organisation's own govue
framework. This milestone ships one placeholder page carrying the real contact and profile
links from the predecessor link page; projects, skills and a contact form are later milestones,
see AGENTS.md.
task setupInstalls the pinned toolchain (Go, Node, pnpm, and the lint and release tooling) through mise.
task web:build # builds the SPA into cmd/website/dist
task build # compiles the website binary into bin/website
bin/websiteThe server listens on :8080 and answers /healthz, /readyz and /metrics on a second,
administrative listener at :8081, never on the public one. Neither address is configurable
yet: this service has no environment-driven configuration surface until a later milestone
needs one.
This service reads no environment variables yet. .env.example documents that and stays ready
for the first variable a later milestone adds.
docker compose up --buildBuilds the multi-stage Dockerfile (frontend, static Go binary, then a minimal non-root
runtime stage with no shell) and serves the site at http://localhost:8080.
docker-compose.yaml is for local development only; see charts/ostendorf.dev/README.md for a
cluster installation.
scripts/smoke-test-image.sh <image-ref> starts an already built image the same way and
asserts its admin listener (:8081) answers /healthz, /readyz and /metrics, its public
listener serves a request, and the public listener itself does not answer /metrics. The
docker-build job in .github/workflows/checks.yaml runs it against the image it just built,
so the container has started and served a real request at least once before anyone ever runs it
in the cluster.
task setup
task checktask check runs every lint, build and test target one after another; task --list shows them
individually. task web:build has to run before task build or task test:go can compile
cmd/website, since it embeds that output; task build and task test:go already declare that
dependency, so running either one through Task is enough.
Releases are driven by release-me: Conventional
Commits decide the version, and merging the release pull request it maintains cuts the release.
CHANGELOG.md is generated, never hand edited.
Proprietary, all rights reserved. See LICENSE and NOTICE.