No description
  • TypeScript 43.3%
  • CSS 32.2%
  • Astro 21%
  • JavaScript 2%
  • Shell 1.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Arzaroth 7840269e5c
All checks were successful
ci / site (push) Successful in 2m27s
ci / browser (push) Successful in 3m13s
[fix/deploy-race] build: run the end-to-end suite after the checks, not beside them
mise run deploy started both at once. Each rebuilds dist/, and the checks'
build wiped the files the e2e preview server was serving, failing tests at
random. e2e now waits for check when both are scheduled, and still runs
alone without it.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-29 03:35:12 +02:00
.config [master] chore: warm worktrees through wt 2026-09-24 20:19:19 +02:00
.forgejo/workflows [master] ci: check, test, build and drive the site on Forgejo 2026-09-24 20:19:19 +02:00
e2e [feature/new-projects] test(rack): an unknown hash typed on hello is put back to hello 2026-09-29 03:27:29 +02:00
public [master] feat: a favicon, the rack in miniature 2026-09-24 21:34:03 +02:00
src [feature/new-projects] refactor(sealed): drop a class nothing styles 2026-09-29 03:27:53 +02:00
test [master] test: the rack layout holds together 2026-09-24 20:19:19 +02:00
tools [master] fix(ci): keep the em dash out of the em dash check 2026-09-24 20:50:35 +02:00
.gitignore [master] build: type check, Vitest and Playwright 2026-09-24 20:19:19 +02:00
.worktreeinclude [master] chore: warm worktrees through wt 2026-09-24 20:19:19 +02:00
astro.config.mjs [master] build: serve the page through Astro, unchanged 2026-09-24 18:23:36 +02:00
CHANGELOG.md [master] chore(release): 0.3.0 2026-09-29 03:30:29 +02:00
mise.toml [fix/deploy-race] build: run the end-to-end suite after the checks, not beside them 2026-09-29 03:35:12 +02:00
package-lock.json [master] chore(release): 0.3.0 2026-09-29 03:30:29 +02:00
package.json [master] chore(release): 0.3.0 2026-09-29 03:30:29 +02:00
playwright.config.ts [master] build: type check, Vitest and Playwright 2026-09-24 20:19:19 +02:00
README.md [master] docs: checks, tests, release and deploy 2026-09-24 20:19:19 +02:00
tsconfig.json [master] build: serve the page through Astro, unchanged 2026-09-24 18:23:36 +02:00
vitest.config.ts [master] build: type check, Vitest and Playwright 2026-09-24 20:19:19 +02:00

portfolio

Arzaroth's page at arzaroth.com, laid out as a 42U rack. Each section is a server in the rack.

Develop

Node 22. With mise:

mise run dev       # http://localhost:4321
mise run check     # types, unit tests, build, em dash and release checks
mise run e2e       # the built site in a desktop and a phone browser

Or with npm directly: npm run dev, npm run check, npm test, npm run build, npm run e2e.

Where things live

  • src/data/servers.ts: the rack. Each server's slot, height, cable colour and port count.
  • src/data/projects.ts: every piece of copy on the page.
  • src/components/: the rack and one component per section. Pane.astro wraps each section.
  • src/scripts/rack.ts: switching sections, patch cables, keyboard shortcuts.
  • src/styles/: one stylesheet per area. responsive.css loads last so its media queries win.
  • test/: unit tests for the rack layout. e2e/: Playwright, desktop and phone.

Adding a section means adding a server to servers.ts and a Pane with the same id to src/pages/index.astro. The unit tests fail if the two disagree, if two servers share a unit, or if one sticks out of the rack.

Release and deploy

CI on Forgejo runs everything in mise run check plus the end-to-end suite. Deploying is done by hand:

  1. Move the Unreleased entries in CHANGELOG.md under a new dated version, and set the same version in package.json.
  2. Commit, then tag vX.Y.Z and push the tag.
  3. mise run deploy runs the checks and the end-to-end suite, builds, and rsyncs dist/ to /srv/www/arzaroth.com/htdocs on the host. Shared downloads live outside the web root, in /srv/www/arzaroth.com/files, served under /files/.