Homepage for Skylar Technology LLC, served at www.skylar.technology — a single static welcome page ("Welcome to Skylar Technology LLC"), served by a minimal Express/TypeScript app and deployed as a Knative Service on a self-hosted k3s cluster.
It's intentionally the simplest possible version of this pattern: no
database, no persistent state, no external API calls — just a page and a
health check, built to prove out and reuse the same repo/CI/cluster
structure as www-klaushofrichter,
Klaus Hofrichter's personal homepage.
GET /— the homepage: the Skylar Technology logo above "Welcome to Skylar Technology LLC".GET /health— returns{"status": "ok", "service": "www-skylar-technology"}/assets/*— static asset serving;assets/skylar-256x256.pngis used both as the page's favicon and the logo shown on the homepage.
npm install
npm test
npm run devnpm run dev starts the server on http://localhost:8080 via tsx
(no build step needed). npm test runs the Vitest/Supertest unit tests.
e2e/smoke.spec.ts (Playwright) checks the home page and /health in a
real browser. npm run build && npm run test:e2e starts the built server,
runs the suite and stops it again; set BASE_URL to test something already
running instead (a dev server, a container). It runs in the e2e PR check,
which production requires, so a browser-level regression is caught before
the merge rather than after a deploy. The deploy's own smoke test is a
curl check of /health and / against the live site.
Builds and pushes to ghcr.io/klaushofrichter/www-skylar-technology via
GitHub Actions on push to main (.github/workflows/build-push.yml).
Deploying to production happens on merge to the production branch, via
an in-cluster self-hosted GitHub Actions runner
(.github/workflows/deploy-production.yml) — see klaushofrichter/kube-setup's
docs/self-hosted-runner-cicd-pattern.md for the full design, and its
manifests/www-skylar-technology/ and manifests/www-skylar-technology-runner/
for this service's cluster manifests (Knative Service, DomainMapping,
dedicated runner namespace/RBAC).
See CLAUDE.md for the fuller history of how this repo and its cluster
wiring came together.