commit 843b6d32bcb8ce96bc1001b0e792c7f0bad11522 Author: Lucas Winther Date: Mon Nov 9 06:47:38 2026 +0100 chore: bootstrap agent-ready docs, rules and design-phase artefacts Add AGENTS.md as the single source of truth (with CLAUDE.md and GEMINI.md as pointers), permissions for Claude Code, Codex and Gemini, the docs tree (architecture, decisions, TODO, permissions, specs, plans), PRODUCT.md and DESIGN.md, plus the design-phase record: the inspiration log, all mockup rounds with briefs and screenshots, and the owner's work history. Co-Authored-By: Claude Opus 5.5 diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..de07a7b --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,23 @@ +{ + "permissions": { + "allow": [ + "Bash(git status:*)", "Bash(git diff:*)", "Bash(git log:*)", "Bash(git show:*)", + "Bash(git branch --list:*)", "Bash(git rev-parse:*)", + "Bash(git add:*)", "Bash(git commit:*)" + ], + "ask": [ + "Bash(git push:*)", "Bash(git merge:*)", "Bash(git rebase:*)", "Bash(git switch:*)", + "Bash(git restore:*)", "Bash(git commit --amend:*)", "Bash(rm:*)", + "Bash(bun add:*)", "Bash(bun remove:*)", "Bash(bun update:*)", "Bash(bun upgrade:*)", + "Bash(bunx:*)", "Bash(npx:*)" + ], + "deny": [ + "Bash(git push --force:*)", "Bash(git push -f:*)", "Bash(git push --force-with-lease:*)", + "Bash(git reset --hard:*)", "Bash(git clean:*)", "Bash(git add -f:*)", "Bash(git add --force:*)", + "Bash(git commit --no-verify:*)", "Bash(git commit -n:*)", + "Bash(rm -r:*)", "Bash(rm -R:*)", "Bash(rm -rf:*)", "Bash(rm -fr:*)", "Bash(rm -Rf:*)", + "Bash(rm -fR:*)", "Bash(rm --recursive:*)", "Bash(sudo:*)", + "Read(./.env)", "Read(./.env.*)", "Read(./secrets/**)" + ] + } +} diff --git a/.codex/config.toml b/.codex/config.toml new file mode 100644 index 0000000..5542eff --- /dev/null +++ b/.codex/config.toml @@ -0,0 +1,2 @@ +sandbox_mode = "workspace-write" +approval_policy = "on-request" diff --git a/.codex/rules/project.rules b/.codex/rules/project.rules new file mode 100644 index 0000000..6d519d0 --- /dev/null +++ b/.codex/rules/project.rules @@ -0,0 +1,19 @@ +# Rendered from docs/PERMISSIONS.md. Change both in one commit. +# Deny +prefix_rule(pattern = ["git", "push", ["--force", "-f", "--force-with-lease"]], decision = "forbidden", + justification = "Force-push rewrites shared history.") +prefix_rule(pattern = ["git", "reset", "--hard"], decision = "forbidden", justification = "Discards work.") +prefix_rule(pattern = ["git", "clean"], decision = "forbidden", justification = "Deletes untracked files.") +prefix_rule(pattern = ["git", "add", ["-f", "--force"]], decision = "forbidden", + justification = "Stages ignored files, e.g. secrets.") +prefix_rule(pattern = ["git", "commit", ["--no-verify", "-n"]], decision = "forbidden", justification = "Skips hooks.") +prefix_rule(pattern = ["rm", ["-r", "-R", "-rf", "-fr", "-Rf", "-fR", "--recursive"]], decision = "forbidden", + justification = "Recursive delete.") +prefix_rule(pattern = ["sudo"], decision = "forbidden", justification = "No privilege escalation.") +# Ask +prefix_rule(pattern = ["git", ["push", "merge", "rebase", "switch", "restore"]], decision = "prompt") +prefix_rule(pattern = ["git", "commit", "--amend"], decision = "prompt") +prefix_rule(pattern = ["rm"], decision = "prompt") +prefix_rule(pattern = ["bun", ["add", "remove", "update", "upgrade"]], decision = "prompt") +prefix_rule(pattern = ["bunx"], decision = "prompt") +prefix_rule(pattern = ["npx"], decision = "prompt") diff --git a/.gemini/settings.json b/.gemini/settings.json new file mode 100644 index 0000000..a5043be --- /dev/null +++ b/.gemini/settings.json @@ -0,0 +1,18 @@ +{ + "tools": { + "allowed": [ + "run_shell_command(git status)", "run_shell_command(git diff)", "run_shell_command(git log)", + "run_shell_command(git show)", "run_shell_command(git branch --list)", "run_shell_command(git rev-parse)", + "run_shell_command(git add)", "run_shell_command(git commit)" + ], + "exclude": [ + "run_shell_command(git push --force)", "run_shell_command(git push -f)", + "run_shell_command(git push --force-with-lease)", "run_shell_command(git reset --hard)", + "run_shell_command(git clean)", "run_shell_command(git add -f)", "run_shell_command(git add --force)", + "run_shell_command(git commit --no-verify)", "run_shell_command(git commit -n)", + "run_shell_command(rm -r)", "run_shell_command(rm -R)", "run_shell_command(rm -rf)", + "run_shell_command(rm -fr)", "run_shell_command(rm -Rf)", "run_shell_command(rm -fR)", + "run_shell_command(rm --recursive)", "run_shell_command(sudo)" + ] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..201f435 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# dependencies and build output +node_modules/ +dist/ +.astro/ +*.tsbuildinfo + +# secrets +.env +.env.* +!.env.example + +# agent scratch and local-only files +.superpowers/ +CLAUDE.local.md +.claude/settings.local.json +.worktrees/ + +# OS / editor +.DS_Store +*.log diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..5b26f4c --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,81 @@ +# portfolio-next + +The next lucaswinther.info: a two-gate personal site (work / off the clock). Pre-code: only docs and +HTML mockups exist. Planned stack: Bun 1.3, TypeScript, React, Astro (see `docs/DECISIONS.md`). + +`AGENTS.md` is the single source of truth for agents here. `CLAUDE.md` and `GEMINI.md` only point here. +Deeper context on demand: `docs/ARCHITECTURE.md`, `docs/DECISIONS.md`, `docs/TODO.md`. + +## Commands + +TODO(maintainer): confirm commands once tooling exists (no `package.json` yet). +Bun is the runtime and package manager, never Node, npm, pnpm or yarn: +`bun ` not `node`, `bun test` not jest/vitest, `bun install` / `bun run + + diff --git a/mockups/nav-b.html b/mockups/nav-b.html new file mode 100644 index 0000000..f1f9ca8 --- /dev/null +++ b/mockups/nav-b.html @@ -0,0 +1,391 @@ + + + + + +Lucas Winther + + + + + + +
nav-b · One page, switchable lensOne home page; the “I'm here for” switch reorders, folds and re-words sections for a recruiter, a friend, or everyone. AI filter sits right under it. Base from Brittany Chiang's sticky two-column layout, with beige.zone's tag filtering.
+ +
+ + +
+
+

I'm a computer scientist working as a platform engineer. I automate infrastructure, build small webapps, and use AI tools where they earn their place, which every project below is honest about.

Bachelor in computer science, DTU. Most interested in devops, homelab and tooling roles.

+

I build things by hand, and lately with AI. This is where both live, next to the band, the homelab and whatever I'm thinking about this month.

Use the switch on the left if you only came for one side of it.

+

Off the clock I play bass in Kældermændene, four people in a basement making songs that mostly only exist as handcam recordings. I also write things down.

The work is still here, folded away at the bottom.

+
+ +
+

Projects the ones worth asking about are first

+
+
Years marked dotted are guesses
+
+ +
+

Experience & education

+
+

Daily: Ansible, Docker, Linux, Node.js, Claude Code · Comfortable: React, Python, Proxmox · Once upon a time: Unity, C#, Arduino

+
+ +
+

Writing on tech from blog.lucaswinther.info

+ +
+ +
+

The band click a bar to play a song; height is length

+
+
+
+
0:00 / ·
+
+
+ + +
+
+
+ +
+

Musings hover to read the start

+
+ + + +
+
+ +
+

Findings

+

a quiet mechanical keyboard / an old synth manual, scanned / rye bread worth the detour / a tuner app with no ads / this talk on boring tech

+
+ +
+

Elsewhere

+ +
+ +
+ +
+

Say hello

+

lucas@lucaswinther.info

+

Placeholders (dotted underline): band name, venues, songs, musings, blog titles, job, university, years in the timeline.

+
+
+
+ + + + diff --git a/mockups/nav-c.html b/mockups/nav-c.html new file mode 100644 index 0000000..1ef8c1f --- /dev/null +++ b/mockups/nav-c.html @@ -0,0 +1,372 @@ + + + + + +Lucas Winther · garden + + + + + + +
nav-c · One garden, many filtersProjects, writing, music and old v1 work in one collection, filtered by type, side and AI level, with maturity marks and hover previews. Press / or Ctrl/⌘K to find anything. From Maggie Appleton's garden, ntch.design's shortcuts and beige.zone's tag filters.
+ + + +
+
+ Lucas Winthergarden · updated 3 Nov +
+ + old site ↗ + /simple +
+
+ +
+
+

Things I've made by hand and with AI, things I've written, and songs from a basement.

+

Everything is in one bed. Nothing here is finished in the same way: seedlings are rough, evergreens are things I'd stand behind. Every project says how much AI was in it.

+
+
+ Seedling rough, just planted + Budding taking shape, still changing + Evergreen done, or done enough + AI made with AI · some help · none +
+
+ +
Short paths: + · + · + · + +
+ + + +
+

Nothing grows at that intersection yet. Clear the filters.

+ +
+
Three sides, one bed“Now” is the technical work, much of it with AI. “Person” is writing and the band. “v1” entries are from the 2021 site, built by hand, and open in the frozen archive.
+
Elsewhereold.lucaswinther.info, the by-hand site, frozen
lucaswinther.info/simple, the one-card version
blog.lucaswinther.info · GitHub · LinkedIn · email
+
PlaceholdersDotted underlines are invented: essay and note titles, band name, songs, venues, dates, maturity stages, and the homelab and this-site projects.
+
+
+ +
+ + + + + + diff --git a/mockups/nav-d.html b/mockups/nav-d.html new file mode 100644 index 0000000..856cda2 --- /dev/null +++ b/mockups/nav-d.html @@ -0,0 +1,377 @@ + + + + + +Lucas Winther + + + + + + + +
+nav-d · Two gatesA, reworked into two gates: technical on the left (grid paper, mono, precise) and personal on the right (warm, grainy, serif and hand-written). Hover a side to lean in, click or press ←/→ then Enter to open it, Esc to come back. Work now leads into tech-r3-c, and off the clock into personal-r2-b. Once you're in, the other side stays a thin edge you can cross to. Under the seam, a small third way in opens the garden (nav-c) with everything at once.
+ +
+ + +
+
+
x 000 · y 000
grid 24px
+
Lucas
+
← Work
+ +
+
+
● 01 / work
+

Work

+

Software, infrastructure, and how I build with AI. Projects, a CV you can read in ten seconds, and notes on what worked.

+ +
+
nowPlatform engineer
+
latestConfig: Ansible + compose deploysAI-made
+
writingWhat I let the agent write, and what I didn'tsome AI
+
+
thesisHyperCache: reputation in P2P archivalby hand
+
builtMixed-reality rowing game, two real oarsby hand
+
stackTS · Node · React · Ansible · Docker · Unity
+
+
+ +
← enter work ←
+
+ +
+
lucaswinther.info / work
+

Work

+

This is where the technical space would begin: CV first, then projects with the AI filter, then writing. Any of the tech mockups (T1–T5) could live here.

+
+

CV

Platform engineer, 2023–now. BSc Computer Science, 2022. CV (PDF).
+

Projects · 15

Filter by how they were made: all · skip fully AI-made · by hand only.
+

Writing

AI, devops, homelab. From blog.lucaswinther.info.
+
+

The personal side waits on the right edge. One click crosses over.

+
+
+
+ + +
+
Winther
+
off the clock →
+ + +
+
+
02 · off the clock
+

Off the clock

+

Songs from a small band, half-finished thoughts, things I found and wanted to keep.

+ +
+
+
Live at Café Retro · side A
+
+ +
+
photo: rehearsal room
Thursdays
+
musingSmall rooms are harder than big ones.
+
+ +
Latest find: every bus shelter in Denmark, photographed
Recorded on a phone from the third row, on purpose.
+ +
come in → →
+
+ +
+
lucaswinther.info / off-the-clock
+

Off the clock

+

This is where the personal space would begin: press play on a tape, then explore the songs, with musings and finds alongside. Any of the personal mockups (P1–P5) could live here.

+
+

The tapes

Handcam sets and small recordings. Pick one, press play, jump between songs.
+

Musings

Half-finished thoughts, some of which grow up.
+

Found & kept

Links, tools, records and things worth passing on.
+
+

The work side waits on the left edge.

+
+
+
+ + + or wander through everything at once G + +
+ + + + + + + diff --git a/mockups/personal-1.html b/mockups/personal-1.html new file mode 100644 index 0000000..13a7c6c --- /dev/null +++ b/mockups/personal-1.html @@ -0,0 +1,333 @@ + + + + + +Lucas Winther · as a person (P1 · The crate) + + + + + + +
P1 · The crateRecordings as cassettes on a shelf: pull one out, it plays, and the setlist, behind-the-song notes and other versions open underneath. Borrows mindofakira's "choose to play, then explore"; writing stays quiet below, like marcschuster.
+ +
+
+
Lucas Winther as a person
+ +
+ +
+

Mostly I write software. In the evenings I play guitar in a small band and write things down.

+

Everything we've recorded fits on one shelf. Pull a tape out to listen, then dig into it: who's playing, where it came from, how it sounded on other nights.

+
+ +
+ the shelf · + + + + + +
+
+
Hover a tape to read the label. Click to pull it out.
+ +
+
The deck is empty. Nothing plays until you pick a tape.
+
+ +
+
+

Writing, now and then

+
On playing to eleven peopleOct 2026

Small rooms are harder than big ones. You can see every face, and every face can see your left hand. Some notes after the October gig.

+
Why I still keep a paper notebookAug 2026

Half of the band's lyrics started in the margin of a meeting. The other half started on the bus.

+
Handcam is the honest formatMay 2026

Shaky phone footage from the third row, with the bar chatter left in. I've stopped wanting anything cleaner.

+
A winter of learning to sing harmonyFeb 2026

Short version: record yourself, listen once, never again.

+
+
+

Findings

+ +
+
+ +
+ Placeholders (dotted underline): band name Lav Sol, members, songs, venues, dates, writing titles, findings, photos. + lucas@lucaswinther.info · GitHub · blog +
+
+ + + + diff --git a/mockups/personal-2.html b/mockups/personal-2.html new file mode 100644 index 0000000..1f27ac8 --- /dev/null +++ b/mockups/personal-2.html @@ -0,0 +1,359 @@ + + + + + +Lucas Winther · as a person (P2 · The desk) + + + + + + +
P2 · The deskAn ordered desk: notes, photos, ticket stubs and a tape recorder in labelled zones. Hover lifts a thing, click opens it in place. The recorder holds the live sets. Borrows kigo.studio's liveliness, kept tidy, plus mindofakira's "play, then explore".
+ +
+
+
+

Lucas Winther, off the clock

+

This is roughly what my desk looks like: a few things I've been thinking about, things I found, photos, and the recorder with our gigs on it. Pick anything up.

+
+ +
+ +
+ + + + + + hover lifts · click opens · esc puts it back +
+ +
+
+
the recorder & gigs
+ + + + + + +
musings
+ + + + + +
found & kept
+ + + + + +
photos
+ + + + +
+
+ + +
+ + + + diff --git a/mockups/personal-3.html b/mockups/personal-3.html new file mode 100644 index 0000000..109f5ac --- /dev/null +++ b/mockups/personal-3.html @@ -0,0 +1,339 @@ + + + + + +Lucas Winther · as a person (P3 · The garden) + + + + + + +
P3 · The gardenNotes, songs, gigs and findings as one tended garden with maturity stages and visible connections. Hover anything to see what it's linked to on the map; songs open with their versions across gigs. Borrows maggieappleton.com's garden and beige.zone's tag filters.
+ +
+
+
Lucas Winther · the garden
+ +
+ +
+
+

Half-finished thoughts, songs from the band, and things I found, all growing into each other.

+

Nothing here is in date order. Some notes are seedlings, some have been rewritten for years. Songs connect to the nights we played them, and those nights connect to whatever I was thinking about at the time.

+
+
+
+ +
+
+
+ show + + + + + + stage + + + + +
+
    +
    + + +
    + +
    Placeholders (dotted underline, and all music/notes content): band name Lav Sol, members, songs, gigs, venues, note and finding titles, photos.lucas@lucaswinther.info · GitHub · blog
    +
    + + + + diff --git a/mockups/personal-4.html b/mockups/personal-4.html new file mode 100644 index 0000000..99a37fb --- /dev/null +++ b/mockups/personal-4.html @@ -0,0 +1,336 @@ + + + + + +Lucas Winther · as a person (P4 · The almanac) + + + + + + +
    P4 · The almanacOne year at a time on a seasonal strip. Hover a month to peek, click it to open that month's page: a gig with its setlist and per-song notes, a post, a find, or just a line about the weather. Quiet months are part of the design. Borrows lynnandtonic's yearly archive (the idea, not the look) and beige.zone's archival labels.
    + +
    +
    +
    Lucas Winther
    + +
    + +
    +

    Almanac 2026

    +

    What happened outside work, a month at a time: gigs with Lav Sol, things I wrote, things I found. Some months are full. Most aren't, and that's fine.

    +
    +
    + +
    + + +
    +
    Hover a month to peek. Click to open its page.
    + +
    + + +
    + + + + diff --git a/mockups/personal-5.html b/mockups/personal-5.html new file mode 100644 index 0000000..a43a56c --- /dev/null +++ b/mockups/personal-5.html @@ -0,0 +1,288 @@ + + + + + +Lucas Winther · as a person (P5 · The zine) + + + + + + +
    P5 · The zineThe personal space as a small seasonal magazine. Each issue mixes a cover story, a printed tracklist that plays, liner notes for the current song, musings and classified-style findings. Borrows marcschuster.com's editorial feel and beige.zone's archival typography.
    + +
    +
    + Lucas Winther · personal pages + +
    +
    +

    Sidespor.

    +
    Nº 03Autumn 2026 · a zine about the things I do when I'm not working
    +
    +
    + +
    +
    +
    + +
    +
    Colophon. Written and put together by Lucas Winther, one issue per season when there's enough to say. Recordings are handcam phone videos from Lav Sol gigs. Placeholders (dotted underline): zine name, band name, members, songs, venues, dates, all article and finding titles.
    + +
    Back issues stay up as they were printed. Nothing gets rewritten after the season ends.
    +
    +
    + + + + diff --git a/mockups/personal-r2-a.html b/mockups/personal-r2-a.html new file mode 100644 index 0000000..370c50d --- /dev/null +++ b/mockups/personal-r2-a.html @@ -0,0 +1,858 @@ + + + + + +Off the clock · Lucas Winther + + + + + + + +
    +personal-r2-a · Shelves of things I loveOne shelf per interest, each holding its 1–4 latest things as fitting objects (fanned comic pages, a cartridge, a sleeve that plays, posters, spines pulled from Hardcover). "New lately" up top; click anything to open it, "see all" opens the shelf's archive. P2's tactile desk, rebuilt as rows so a new interest is just one more shelf.
    + +work → + +
    +
    +
    ← gateLucas Winther/ off the clock
    + +
    +
    +
    + +
    +
    +
    +
    + 02 · off the clock +

    Things I love, and a few things I think.

    +

    Comics that made me cry, games I backed years ago, songs I can't stop playing, and the odd drawing. A shelf for each. Pick anything up.

    +
    +
    +

    New lately · across all shelvesfresh off the pile

    +
    +
    +
    + +
    + +
    +
    every season
    +

    Once a season the shelves get bound into a little zine: Autumn 2026 has Now Recharging, the pumpkin, Lanternfall and an essay about crying at comics.

    + read the autumn roundup → +
    + +
    + Placeholders (dotted underline): every game, film, song, book, essay, drawing, commission, the band and its gig, and all Trakt/Hardcover data. Real: Now Recharging, Junkwraith, Cupid 13, the villainess trope and the pumpkin (from Bluesky). Pictures are drawn stand-ins. + Bluesky · lucas@lucaswinther.info · work +
    +
    +
    + +
    + + + + + diff --git a/mockups/personal-r2-b.html b/mockups/personal-r2-b.html new file mode 100644 index 0000000..9803653 --- /dev/null +++ b/mockups/personal-r2-b.html @@ -0,0 +1,739 @@ + + + + + +Off the clock · Lucas Winther + + + + + + + +
    +personal-r2-b · One big, rich wallA calm editorial wall where every card is shaped by what it is (comic panels, a sleeve that plays, a cover with a pull-quote, a typeset essay, the drawing itself). "Now" across the top pulls in Hardcover and Trakt; chips filter by interest; a card opens in place to full width. New things get big cards, older ones settle smaller.
    + +work → + +
    +
    +
    ← gateLucas Winther/ off the clock
    + +
    +
    + +
    +
    +
    +
    + 02 · off the clock +

    Things I love & things I think

    +

    A wall of what's caught me lately: comic pages, songs, games, the odd drawing, and some slower writing. Open anything.

    +
    +
    +
    + +

    everything, newest first

    +
    +
    +
    + +
    + Placeholders (dotted underline): every game, film, song, book, essay, drawing, commission, the band and its gig, and all Trakt/Hardcover data. Real: Now Recharging, Junkwraith, Cupid 13, the villainess trope and the pumpkin (from Bluesky). Pictures are drawn stand-ins. + Bluesky · lucas@lucaswinther.info · work +
    +
    +
    + + + + diff --git a/mockups/personal-r2-c.html b/mockups/personal-r2-c.html new file mode 100644 index 0000000..09b1a67 --- /dev/null +++ b/mockups/personal-r2-c.html @@ -0,0 +1,761 @@ + + + + + +Off the clock · Nº 04 · Autumn 2026 · Lucas Winther + + + + + + +
    personal-r2-c · The zine, grown upWhat "come in" opens: the current seasonal issue is the front page and fills up as the season goes (1–3 things a month fills an issue naturally). Past issues sit below as covers, and an index by interest cuts across every issue. Evolves P5, with marcschuster.com's editorial calm and beige.zone's archival index.
    + +← work + +
    +
    +
    +
    ← gateLucas Winther/ off the clock
    + +
    Nº 04 · 7 of ~9 pages
    +
    +
    + +
    +
    +
    +

    Off the clock.

    +
    a seasonal zine of things I love and things I think · by Lucas Winther
    +
    +
    +
    Nº04
    +
    Autumn 2026
    +
    Sep · Oct · Nov
    +
    closes 30 Nov
    +
    + +
    +
    This season: a webcomic that wrecked me, a song for cold bike rides, a pumpkin, and why I keep falling for villainesses.last page added 2 Nov
    + +
    + + + + +
    + pp. 2–3 +
    comicswebcomic · ongoing
    +

    Now Recharging made me cry, a lot

    +
    +
    +

    i cried so much in this chapter – death has always been something that hits me emotionally hard

    +
    me, on Bluesky · 14 Sep
    +
    +
    + + + + +
    +
    tap a panelDrawn stand-ins for a few pages from the chapter. Click one to look closer, click again to step back.
    +
    panels: placeholders, not the real artread it at nowrecharging.com ↗
    +
    +
    + + + + + +
    + p. 4 +
    musicsong of the season
    +
    +
    + sadness as a gift +
    +
    +
    Sadness as a Gift
    +
    Adrianne Lenker
    +

    This was on repeat on every cold bike ride in October. It sounds like the end of something, but in a kind way 🍂

    +
    +
    + +
    + 0:00 / 4:12 + +
    press play · nothing starts on its own · mock player, no audio
    +
    +
    +
    also this season
    +
    +
    +
    + + +
    + p. 5 +
    gameswrite-up
    +

    Hades II and the comfort of trying again

    +
    + + screenshot placeholder +
    +
    41 h playedSwitch 2★★★★½
    +

    Every run ends, and that's the point. I've been having a heavy autumn, and there's something gentle about a game that says go again, you'll be a bit stronger.

    +

    The witch-y moveset took me a while. Now I can't go back. The music is doing half the work, honestly. Best moment so far: finally beating the second boss on the bus home and nearly shouting.

    + +
    + + +
    + p. 6 +
    made by menew
    +
    + + + + + + + + + + +
    carved it, then drew it 🎃
    +
    +

    My first pumpkin in years. The drawing is honestly better than the pumpkin. Pen and one marker, ten minutes.

    +
    drawing placeholder31 Oct
    +
    + + +
    + p. 7 +
    writingessay · 6 min
    +

    Why I cry at fiction and not at the news

    +

    A comic chapter about a goodbye got me more than a month of headlines. I think that's not coldness. I think it's scale.

    +
    +

    When a story lets you sit with one person for long enough, their loss becomes something you can hold. The news hands you thousands at once, and my brain just files it under weather. I don't love that about myself, but I understand it better now.

    +

    Death has always hit me hard in stories. Maybe because stories are the only place where you get to rehearse it gently, with a page you can close.

    +

    So I've stopped feeling guilty about crying at a webcomic. If fiction is where I practice caring, then the practice counts. The trick is to carry a little of it back out with me, into the real week.

    Anyway. Read Now Recharging. Bring tissues.

    +
    +
    19 Oct · writing, life
    +
    + + +
    + p. 8 +
    comicsa trope I can't quitnew
    +

    Reborn as the villainess, surrounded by lovely psychopaths

    +

    She wakes up as the doomed villain, decides to just be nice, and everyone around her gets weirdly, possessively obsessed. I know. I love it anyway.

    +
    + + + + + + + + + +
    +
      +
    • The Villainess Lives Twicemanhwa · ongoing
    • +
    • Death Is the Only Ending for the Villainessmanhwa
    • +
    +
    + +
    +
    p. 9

    This page is still blank. Something will land here before the issue closes on 30 November, then Nº 05 opens for winter.

    maybe a Kickstarter game?
    +
    +
    + + +
    +

    Back issues

    3 printed · one per season since winterclick a cover for its contents
    +
    +
    2026
    +
    +
    +
    +

    Each year gets its own row of four. After a few years this is still a short shelf, and the index below does the heavy lifting.

    +
    + + +
    +

    Index, by interest

    every page from every issue
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    colophon
    Written, drawn and put together by Lucas Winther. One issue per season, closed when the season ends and never rewritten. Shares land on a page as they happen, so the current issue is always the newest thing here.
    + +
    Placeholders (dotted underline): the game, song, essay titles, Trakt/Hardcover data, manhwa titles, back-issue contents, all panel and cover art (drawn stand-ins). Real: Now Recharging, Junkwraith, Cupid 13 and the quotes from Bluesky, the villainess trope, the Halloween pumpkin.
    +
    +
    +
    + + + + diff --git a/mockups/personal-r2-d.html b/mockups/personal-r2-d.html new file mode 100644 index 0000000..e85a552 --- /dev/null +++ b/mockups/personal-r2-d.html @@ -0,0 +1,533 @@ + + + + + +Lucas Winther · off the clock + + + + + + +
    personal-r2-d · A personal homepageWhat "come in" opens: a warm "about me, right now" page. A short hello, a "currently" strip fed by Trakt and Hardcover (and a song on loop), one featured essay, the latest three shares, then eight doors into collections by interest, and a gentle life thread. A modern now-page plus a personal index; maggieappleton.com's sorting by type, the gate's plum warmth.
    + +← work + +
    +
    +
    +
    ← gateLucas Winther/ off the clock
    + +
    updated 2 Nov 2026
    +
    +
    + +
    + +
    +
    + hi, I'm Lucas +

    I write software for a living. The rest of the time I'm reading comics, crying at them, and playing the same song forty times in a row.

    +

    This is my corner for the things I love and the things I think about. Something new lands here once or twice a month, whenever it's worth it.

    +
    Denmarkbsky: stereotypicalcatsays hi back: lucas@lucaswinther.info
    +
    +
    + +
    + + + + + + + + + + + + + + + +
    me, by me (generously)
    +
    +
    +
    + + +
    +

    currently

    synced from Trakt and Hardcover · 3 h agohover for a note
    +
    +
    +
    Playing by hand
    +
    +
    Hades II
    +
    Switch 2 · 41 hours in
    +
    one more run. always one more run.
    +
    +
    + +
    +
    Piranesi
    +
    Susanna Clarke
    +
    +
    p. 152 / 27256%
    +
    reading it slowly on purpose
    +
    +
    +
    Watching trakt ↗
    +
    +
    Frieren: Beyond Journey's End
    +
    S2 · E6 · two days ago
    +
    +
    6 / 14 eps★★★★★
    +
    no spoilers but ep 5 😭
    +
    +
    +
    Listening album
    +
    +
    Bright Future
    +
    Adrianne Lenker
    +
    best with headphones, on a bike
    +
    +
    +
    Looping song of the moment
    +
    + +
    + +
    Sadness as a Gift
    +
    Adrianne Lenker
    +
    +
    +
    + +
    + 0:00 / 4:12 +
    +
    played 38× this week · press play, it won't start by itself
    +
    +
    +
    Trakt and Hardcover data shown as if pulled from their APIs (placeholders)the song and game are typed in by me
    +
    + + +
    +
    +
    +

    lately I've been thinking

    +
    writingessay · 7 min · 19 Oct
    +

    What a webcomic taught me about saying goodbye

    +

    I cried so much at a chapter of Now Recharging that I had to put my phone down. This is me trying to work out why death in stories hits me so hard.

    +
    +

    Death has always been something that hits me hard, in stories more than anywhere. I used to think that was a bit embarrassing. Now I think stories are the one place where you get to rehearse a goodbye gently, with a page you can close and come back to.

    +
    +

    The chapter doesn't do anything dramatic. Two characters sit on a roof. One of them knows. The other one figures it out a panel too late, like you do. That's it, and it wrecked me.

    +

    I think the reason is scale. The news gives you thousands of people at once, and my brain files it under weather. A story gives you one person, for long enough to know how they take their coffee. Then it asks you to let them go.

    +

    So I've stopped apologising for crying at comics. If fiction is where I practise caring, the practice counts. 🌧️

    +
    +
    + +
    also in: comics, life2 older essays
    +
    this one
    was hard to write
    +
    + + +
    +
    + + +
    +

    wander by interest

    hover a door to peek in, click to keep it open
    +
    +
    +
    + + +
    +
    + +
    +
      +
    1. +
    2. +
    3. +
    4. +
    5. +
    6. +
    7. +
    8. +
    9. +
    +
    click a year for a little more
    +
    +
    +
    +
    + +
    +
    + +
    about this page
    A "now" page that's always current, plus doors to everything older. Shares are filed by interest the moment they're posted, so nothing scrolls away.
    +
    Placeholders (dotted underline): game, album, song, book and show data (as if from Trakt/Hardcover), essay titles, Sea of Stars, most life years and events, door contents, all drawings and cover art. Real: Now Recharging, Junkwraith, Cupid 13 and the Bluesky quotes, the villainess trope, the pumpkin, Censor Simulator (2016), Aarhus University (2019, 2025).
    +
    +
    +
    + + + + diff --git a/mockups/shots/nav-a.png b/mockups/shots/nav-a.png new file mode 100644 index 0000000..662b779 Binary files /dev/null and b/mockups/shots/nav-a.png differ diff --git a/mockups/shots/nav-b.png b/mockups/shots/nav-b.png new file mode 100644 index 0000000..ad0235a Binary files /dev/null and b/mockups/shots/nav-b.png differ diff --git a/mockups/shots/nav-c.png b/mockups/shots/nav-c.png new file mode 100644 index 0000000..a671b66 Binary files /dev/null and b/mockups/shots/nav-c.png differ diff --git a/mockups/shots/navd-lean-art.png b/mockups/shots/navd-lean-art.png new file mode 100644 index 0000000..81f6a8c Binary files /dev/null and b/mockups/shots/navd-lean-art.png differ diff --git a/mockups/shots/navd-lean-tech.png b/mockups/shots/navd-lean-tech.png new file mode 100644 index 0000000..4b5db2f Binary files /dev/null and b/mockups/shots/navd-lean-tech.png differ diff --git a/mockups/shots/navd-none.png b/mockups/shots/navd-none.png new file mode 100644 index 0000000..d48a715 Binary files /dev/null and b/mockups/shots/navd-none.png differ diff --git a/mockups/shots/navd-open-art.png b/mockups/shots/navd-open-art.png new file mode 100644 index 0000000..9699940 Binary files /dev/null and b/mockups/shots/navd-open-art.png differ diff --git a/mockups/shots/navd-open-tech.png b/mockups/shots/navd-open-tech.png new file mode 100644 index 0000000..5329d07 Binary files /dev/null and b/mockups/shots/navd-open-tech.png differ diff --git a/mockups/shots/personal-1.png b/mockups/shots/personal-1.png new file mode 100644 index 0000000..9bc1f44 Binary files /dev/null and b/mockups/shots/personal-1.png differ diff --git a/mockups/shots/personal-2.png b/mockups/shots/personal-2.png new file mode 100644 index 0000000..87767dd Binary files /dev/null and b/mockups/shots/personal-2.png differ diff --git a/mockups/shots/personal-3.png b/mockups/shots/personal-3.png new file mode 100644 index 0000000..77a0a5e Binary files /dev/null and b/mockups/shots/personal-3.png differ diff --git a/mockups/shots/personal-4.png b/mockups/shots/personal-4.png new file mode 100644 index 0000000..96c5339 Binary files /dev/null and b/mockups/shots/personal-4.png differ diff --git a/mockups/shots/personal-5.png b/mockups/shots/personal-5.png new file mode 100644 index 0000000..1aedfa2 Binary files /dev/null and b/mockups/shots/personal-5.png differ diff --git a/mockups/shots/personal-r2-a.png b/mockups/shots/personal-r2-a.png new file mode 100644 index 0000000..7209431 Binary files /dev/null and b/mockups/shots/personal-r2-a.png differ diff --git a/mockups/shots/personal-r2-b.png b/mockups/shots/personal-r2-b.png new file mode 100644 index 0000000..8db99b3 Binary files /dev/null and b/mockups/shots/personal-r2-b.png differ diff --git a/mockups/shots/personal-r2-c.png b/mockups/shots/personal-r2-c.png new file mode 100644 index 0000000..0031992 Binary files /dev/null and b/mockups/shots/personal-r2-c.png differ diff --git a/mockups/shots/personal-r2-d.png b/mockups/shots/personal-r2-d.png new file mode 100644 index 0000000..620bb3e Binary files /dev/null and b/mockups/shots/personal-r2-d.png differ diff --git a/mockups/shots/tech-1.png b/mockups/shots/tech-1.png new file mode 100644 index 0000000..abb7e08 Binary files /dev/null and b/mockups/shots/tech-1.png differ diff --git a/mockups/shots/tech-2.png b/mockups/shots/tech-2.png new file mode 100644 index 0000000..5d2210c Binary files /dev/null and b/mockups/shots/tech-2.png differ diff --git a/mockups/shots/tech-3.png b/mockups/shots/tech-3.png new file mode 100644 index 0000000..fdf9e8a Binary files /dev/null and b/mockups/shots/tech-3.png differ diff --git a/mockups/shots/tech-4.png b/mockups/shots/tech-4.png new file mode 100644 index 0000000..70bba11 Binary files /dev/null and b/mockups/shots/tech-4.png differ diff --git a/mockups/shots/tech-5.png b/mockups/shots/tech-5.png new file mode 100644 index 0000000..d3220b3 Binary files /dev/null and b/mockups/shots/tech-5.png differ diff --git a/mockups/shots/tech-r2-a.png b/mockups/shots/tech-r2-a.png new file mode 100644 index 0000000..7a1bcf3 Binary files /dev/null and b/mockups/shots/tech-r2-a.png differ diff --git a/mockups/shots/tech-r2-b.png b/mockups/shots/tech-r2-b.png new file mode 100644 index 0000000..f9c6e2a Binary files /dev/null and b/mockups/shots/tech-r2-b.png differ diff --git a/mockups/shots/tech-r2-c.png b/mockups/shots/tech-r2-c.png new file mode 100644 index 0000000..739592d Binary files /dev/null and b/mockups/shots/tech-r2-c.png differ diff --git a/mockups/shots/tech-r2-d.png b/mockups/shots/tech-r2-d.png new file mode 100644 index 0000000..0e04d5f Binary files /dev/null and b/mockups/shots/tech-r2-d.png differ diff --git a/mockups/shots/tech-r3-a.png b/mockups/shots/tech-r3-a.png new file mode 100644 index 0000000..af27672 Binary files /dev/null and b/mockups/shots/tech-r3-a.png differ diff --git a/mockups/shots/tech-r3-b.png b/mockups/shots/tech-r3-b.png new file mode 100644 index 0000000..ad21755 Binary files /dev/null and b/mockups/shots/tech-r3-b.png differ diff --git a/mockups/shots/tech-r3-c.png b/mockups/shots/tech-r3-c.png new file mode 100644 index 0000000..044ced9 Binary files /dev/null and b/mockups/shots/tech-r3-c.png differ diff --git a/mockups/shots/tech-r4-a.png b/mockups/shots/tech-r4-a.png new file mode 100644 index 0000000..85b88fe Binary files /dev/null and b/mockups/shots/tech-r4-a.png differ diff --git a/mockups/shots/tech-r4-b.png b/mockups/shots/tech-r4-b.png new file mode 100644 index 0000000..6e6a902 Binary files /dev/null and b/mockups/shots/tech-r4-b.png differ diff --git a/mockups/tech-1.html b/mockups/tech-1.html new file mode 100644 index 0000000..dbda960 --- /dev/null +++ b/mockups/tech-1.html @@ -0,0 +1,372 @@ + + + + + +Lucas Winther: Index of works + + + + + + +
    tech-1 · The catalogueEvery project in one dense, sortable index; rows open into short case studies. Keyboard-first, typeset like a printed catalogue. Borrows from beige.zone (year index, Fig. labels) and ntch.design (shortcuts, tagged list).
    + +
    +
    +
    +

    Lucas Winther — index of works, 2016–2026

    + +
    +
    +
    Now

    Software engineer, platform team at Nordlys Systems, since 2023.

    +
    Education

    BSc Computer Science, Aarhus University, 2022. Thesis on P2P archival.

    +
    Works with

    TypeScript, Node.js, React, Ansible, Docker, Linux, C#/Unity. Agents for the boring half.

    + +
    +
    + Everything here is tagged by how much AI was involved: none some fully AI-made. + Prefer work made purely by hand? The 2021 site, frozen as it was → +
    +
    + +
    +
    + +
    + AI + + + + +
    + +
    + + + + + + + + + + + +
    LINKS
    +

    Nothing matches. Press Esc to clear.

    +
    + +
    +
    +

    Writing

    + Tech notes on AI tooling, devops and the homelab. Full archive at blog.lucaswinther.info +
      + All entries → +
      +
      +

      Experience & education

      + The short version. Full CV as PDF +
        +
      • 2023–nowSoftware engineer, Nordlys SystemsPlatform team: CI, internal tooling, deployment automation.
      • +
      • 2021–2022Student developer, university ITWeb tools for teaching staff, React and Node.js.
      • +
      • 2019–2022BSc Computer Science, Aarhus UniversityThesis: reputation systems in peer-to-peer archival (HyperCache).
      • +
      • 2015–2018HTX, programming lineExam projects: Censor Simulator (VR), BreakoutPython.
      • +
      +
      +
      + +
      +
      +

      / search · jk move · Enter open · Esc close/clear · 0–3 AI filter

      +

      Set in Newsreader and IBM Plex Mono. By-hand archive (2021) · Blog · GitHub

      +
      +
      +

      Placeholders (dotted underline): current job and employer, university name, all years and dates, school, blog post titles, CV link, “this site” and “Homelab metrics” projects, process splits and case-study details.

      +
      +
      +
      + + + + diff --git a/mockups/tech-2.html b/mockups/tech-2.html new file mode 100644 index 0000000..092c5a0 --- /dev/null +++ b/mockups/tech-2.html @@ -0,0 +1,277 @@ + + + + + +Lucas Winther: two chapters + + + + + + +
      tech-2 · Two chaptersEducation, jobs, projects and writing on one year-by-year timeline, split into a by-hand chapter and an AI chapter. Hover anything to see what it connects to; click to open. Borrows lanes and varied shapes from sankar.work, yearly grouping from beige.zone.
      + +
      +
      +
      +

      Lucas Winther

      +

      Computer scientist. I wrote software by hand for six years, then started building with AI as well. This page holds both chapters, on one line, so you can see where one ends and the next begins.

      +
      +
      +
      Now
      Software engineer, Nordlys Systems (2023–)
      +
      Studied
      BSc Computer Science, Aarhus University, 2022
      +
      Writes
      AI tooling, devops, homelab at blog.lucaswinther.info
      +
      Contact
      +
      +
      + + +
      Each mark is one thing made, studied or written. Vermillion: made with some or full AI help.
      + +
      +

      Year

      Education

      Work

      Projects

      Writing

      +
      + Projects by AI involvement + + + +
      +
      + +
      + +
      +
      Chapter I, preserved

      The 2021 React portfolio is frozen at old.lucaswinther.info. Nothing there was made with AI.

      +
      Elsewhere

      Blog · GitHub · LinkedIn · lucas@lucaswinther.info

      Set in Instrument Serif and Instrument Sans.

      +
      Placeholders

      Dotted underline = invented: employer and job titles, university, school, all years, blog post titles, CV link, “Homelab metrics” and “this site” projects.

      +
      +
      + + + + diff --git a/mockups/tech-3.html b/mockups/tech-3.html new file mode 100644 index 0000000..06c6b99 --- /dev/null +++ b/mockups/tech-3.html @@ -0,0 +1,351 @@ + + + + + +Lucas Winther + + + + + + +
      tech-3 · The evolved split pageBrittany Chiang's sticky identity / scrolling content split, warmed up: a reader toggle (recruiter or curious), a left panel that reacts to what you point at, an AI filter written as a sentence, and a real blog section.
      + +
      + + +
      +
      +
      +
      +
      Role
      Software engineer, platform team, Nordlys Systems (2023–)
      +
      Education
      BSc Computer Science, Aarhus University, 2022
      +
      Core stack
      TypeScript, Node.js, React, Ansible, Docker, Linux
      +
      Languages
      Danish, English
      +
      Contact
      lucas@lucaswinther.info · LinkedIn
      +
      + Download CV (PDF) +
      +

      About

      +

      Computer scientist with a passion for development, which is what the old site said, and it still holds.

      +

      I studied computer science and wrote my bachelor thesis on trust in peer-to-peer archival. Before that I built VR exam projects and a rowing game with two real oars. These days I work on platform tooling and run a small homelab that I rebuild from code.

      +

      Since 2023 I've used AI for a growing share of the typing. Every project below says how much, and the by-hand archive is still up for anyone who'd rather see work without it.

      +
      + +
      +

      Experience & education

      +
      +
      2023 — now
      +

      Software engineer · Nordlys Systems

      +

      Platform team. CI pipelines, internal developer tooling, deployment automation with Ansible and containers.

      +
      • TypeScript
      • Ansible
      • Docker
      • GitHub Actions
      +
      +
      +
      2021 — 2022
      +

      Student developer · University IT

      +

      Small React and Node.js tools for teaching staff; first taste of maintaining something other people rely on.

      +
      • React
      • Node.js
      +
      +
      +
      2019 — 2022
      +

      BSc Computer Science · Aarhus University

      +

      Distributed systems, HCI, VR. Thesis: reputation systems in peer-to-peer archival.

      +
      • Distributed systems
      • HCI
      • User studies
      +
      + Full CV (PDF) → +
      + +
      +

      Projects

      +

      Show me projects made +

      +
      + +
      + +
      +

      Writing

      +
      + +
      +
      +

      Everything on blog.lucaswinther.info →

      +
      + +
      +

      By hand, before

      + + +

      The 2021 site, frozen

      React and Material UI, written entirely by hand before I used any AI tools. Kept exactly as it was, at old.lucaswinther.info.

      +
      +
      + +
      + Set in Fraunces and Figtree. Placeholders (dotted underline): employer, job titles and dates, university, blog post titles, CV link, the “Homelab metrics” and “this site” projects, AI-share percentages. +
      +
      +
      + + + + diff --git a/mockups/tech-4.html b/mockups/tech-4.html new file mode 100644 index 0000000..65ef6e7 --- /dev/null +++ b/mockups/tech-4.html @@ -0,0 +1,329 @@ + + + + + +Lucas Winther: what I know, and the proof + + + + + + +
      tech-4 · The skills mapSkills linked to the projects and posts that prove them: hover one side and the other lights up, with connecting lines whose dash shows AI involvement. The same data again as a skills × years matrix. Borrows sankar.work's "information in different ways".
      + +
      +
      +
      +

      Lucas Winther / what I know, and the proof

      +

      Computer scientist. Every skill below links to something I built or wrote. Point at a skill to see where it was used, or at a project to see what it took.

      +
      +
      +
      NowSoftware engineer, Nordlys Systems
      +
      EducationBSc CS, Aarhus Univ., 2022
      + +
      ElsewhereLinkedIn · GitHub · CV
      +
      By hand, beforeold.lucaswinther.info
      +
      +
      + +
      + How it was made +
      + +
      + +
      + +

      Skills & toolssize = projects

      +

      Projects

      +

      Writingblog →

      +
      + +
      + Inspector +

      Point at anything above

      Click to pin a selection, click again or press Esc to release it.

      + +
      + +
      +
      +

      Skills over time

      +

      The same links, laid out by year. Brighter cells mean more projects that year; an ochre underline means AI was involved. The rule at 2023 is where the by-hand years end.

      +
      +
      1 project23+with AI
      +
      +
      +

      Latest writing

      +

      AI tooling, devops and the homelab, at blog.lucaswinther.info.

      +
        + By hand, before →The 2021 portfolio at old.lucaswinther.info, frozen. Everything there predates AI tools. +
        +
        + +
        + Set in Schibsted Grotesk and Martian Mono. Old site · Blog · GitHub + Placeholders (dotted underline): employer, university, all years, blog post titles, CV link, “Homelab metrics” and “this site” projects, skill groupings. +
        +
        + + + + diff --git a/mockups/tech-5.html b/mockups/tech-5.html new file mode 100644 index 0000000..a970fff --- /dev/null +++ b/mockups/tech-5.html @@ -0,0 +1,341 @@ + + + + + +Lucas Winther: lab notebook, vol. II + + + + + + +
        tech-5 · The lab notebookProjects as case files that are honest about process: who wrote which part (highlighter = AI), decisions, and a log of what broke. Blog posts are notebook entries in between. The old site is "Volume I". Light identity in the spirit of ntch.design / beige.zone's archival labels.
        + +
        + +
        Vol. II2023 →
        +
        +

        Lab notebook of Lucas WintherBuilds, decisions and breakages, with AI in the loop

        +
        +
        + Owner +

        Lucas Winther, computer scientist. Software engineer at Nordlys Systems.

        + Reach +

        lucas@lucaswinther.info
        linkedin/lucas-winther · github/StereotypicalCat

        +
        +
        + Experience & education +
          +
        1. 2023–nowSoftware engineer, Nordlys Systems: platform, CI, deployment
        2. +
        3. 2021–22Student developer, university IT
        4. +
        5. 2019–22BSc Computer Science, Aarhus University
        6. +
        +
        +
        CV (PDF)Skills: TypeScript · Node.js · React · Ansible · Docker · Linux · Unity/C#
        +
        +

        Vol. I, everything from 2016 to 2022, was written entirely by hand. It's kept unaltered as the old site at old.lucaswinther.info. This volume marks how much of each build was mine and how much came from an AI.

        +
        + + +
        p. 1contents
        +
        +

        Contents

        +
        + + + + Click a stamp to hide or show those entries. +
        +
          +

          Bar = share of the code: by hand · by AI (highlighter)

          +
          + + +
          No. 01814 Oct 2026
          +
          + Note · AI +

          What I let the agent write, and what I didn't

          +

          Going back through the gacha tracker file by file and marking every line by origin. The surprise was the tests: I thought I wrote most of them. I wrote the names. →

          +
          + +
          No. 017Sep 2026case file
          +
          +

          Homelab metrics

          AI-assistedPrometheus · Grafana · Alertmanager
          +
          +

          Goal

          +

          Know that something is wrong before a family member tells me the photo backup stopped.

          +

          Who wrote what

          + + + + + + +
          PartWritten byNote
          Alert rulesby handEvery alert has to be something I would get up for.
          Exporters (UPS, NAS)mixedAI found the SNMP OIDs; I rewrote the parsing.
          Grafana dashboardsAIGenerated JSON, then deleted half the panels.
          Compose + Ansible roleAIExtends the existing Config repo.
          +

          Decisions

          +
          1. Prometheus over a hosted service: the lab should work offline.
          2. Four alerts, not forty. Dashboards are for curiosity; alerts are for action.
          +

          What broke

          +
          • 2026-09-03Alert storm on every reboot: 22 notifications for one planned restart.
          • 2026-09-04Added inhibition rules and a 5-minute for:. Quiet since.
          + +
          +
          + +
          No. 016Jun 2026
          +
          + Note · Homelab +

          Three mini PCs, one k3s cluster

          +

          Why the cluster happened, and why the media server went back to plain docker-compose a week later. →

          +
          + +
          No. 015Mar 2025case file
          +
          +

          Event Tracker for Gacha Games

          AI-madeJavaScript · scraping · web app
          +
          +

          Goal

          +

          One calendar for limited-time events across several gacha games, so banners stop slipping by unnoticed.

          +
          sketch: pipeline
          +

          Who wrote what

          + + + + + + + +
          PartWritten byNote
          Spec & acceptance testsby handOne page of requirements, one failing test per game.
          ScrapersAIAgent-written against my fixtures.
          Event normaliserAII rejected the first version: it guessed time zones.
          Calendar UIAIPlain JS, no framework, by request.
          Reviewby handEvery change read before merge.
          +

          Decisions

          +
          1. Scrape announcement pages, not the games: less fragile, and no ToS grey zone.
          2. Store everything in UTC; render in the visitor's zone.
          3. Let the agent write code, never let it write the tests' expectations.
          +

          What broke

          +
          • 2025-05-11Two scrapers broke when a site changed its markup.
          • 2025-05-11Fixed by the agent in one pass from the failing fixtures. Took 10 minutes.
          • 2025-07-02Duplicate events after a daylight-saving change.
          + +
          +
          + +
          No. 014Jan 2025case file
          +
          +

          Config

          AI-madeAnsible · docker-compose · IaC
          +
          +

          Goal

          +

          Rebuild every homelab machine from bare metal with one command, and have git be the documentation.

          +

          Who wrote what

          + + + + + +
          PartWritten byNote
          Inventory & layoutby handWhich service lives where, and why.
          Playbooks & rolesAIGenerated, then iterated over a month.
          Compose filesAITemplated from one pattern I wrote down.
          +

          What broke

          +
          • 2025-02-20Every run restarted every container: a template changed a timestamp on each render.
          • 2025-02-21Found it by hand with --diff. The agent kept suggesting handlers.
          + +
          +
          + +
          No. 013Sep 2025
          +
          + Note · Devops +

          Ansible idempotency, the hard way

          +

          The write-up of No. 014's worst week. →

          +
          + + +
          Vol. I2016–2022
          by hand
          +
          +

          From volume I

          +

          The older work, summarised. Nothing here used AI. The full entries, with screenshots and demos, live on the old site.

          +
            +
            + +
            +
            + Set in Spectral and Azeret Mono. Also: blog.lucaswinther.info (all notes) · Vol. I, the old site.
            + Placeholders (dotted underline): employer and job titles, university, all dates, blog post titles and excerpts, CV link, the Homelab metrics project, log entries and process breakdowns. +
            +
            + + + + diff --git a/mockups/tech-r2-a.html b/mockups/tech-r2-a.html new file mode 100644 index 0000000..e90494d --- /dev/null +++ b/mockups/tech-r2-a.html @@ -0,0 +1,851 @@ + + + + + +Lucas Winther / work: the notebook + + + + + + +
            tech-r2-a · The notebook, project-firstT5's lab notebook, moved into the left gate's grid paper and Plex type. Every project is a notebook spread (what and why, a sketch of how it works, who wrote what, decisions, what broke); a page-tab rail lists them all. Writing lives in the margins. Borrows ntch.design's tagged list and beige.zone's archival labels.
            + +off the clock → + + + +
            + + + + + +
            +
            lucaswinther.info / work / notebookvol. II · updated Nov 2026
            + + +
            +
            +

            Lucas WintherA notebook of things I've built: what they are, how they work, and who (or what) wrote each part.

            +
            +
            + ● now +

            IT-medarbejder, IT Research Tech, Aarhus University · Jan 2025–now

            +

            Builds and runs research software: a Slurm compute platform, document services, and the secure, monitored infrastructure under them.

            +
            +
            + before +
              +
            • ScienceAtHome, intern · Jul 2019
            • +
            • TERMA Group, student helper, local configuration management · 2016–18
            • +
            +
            +
            + education +

            BSc Computer Science, Aarhus University

            +

            Thesis: HyperCache, reputation in P2P archival

            +
            + +
            DevOpsDockerLinux adminObservabilityCloud (OCI)SlurmReact / NodeAnsibleUnity / C#Leadership & organisation
            +
            +
            + +
            + + +

            At work

            Aarhus University, IT Research Tech, 2025–now; earlier internships.

            + +
            +
            +
            +
            + pp. 2–3 +

            AU compute platform

            + Slurm · React · Node · Oracle Cloud · Entra ID · ERDA · 2025–now + AI: not marked +
            +
            +
            +

            What and why

            +

            A compute job system for researchers at Aarhus University. Slurm is powerful but unfriendly; this puts a web app in front of it, so submitting, watching and collecting a job doesn't need a terminal.

            +

            Both halves scale: the web stack and the compute nodes grow and shrink on Oracle Cloud with the queue, so the university isn't paying for idle machines.

            +

            How it works

            +
            + + + + + + + + + + + + + + + + + + + + browser + React web app+ Node API + Entra IDOAuth + job servicequeue · status + Slurmcontroller + compute nodes + ERDAAU storage + log in withthe AU account + nodes appear whenthe queue grows, andgo away when it's empty + inputs in,results out + + +
            sketch 1 · request path, top to bottom. Dashed = external or elastic.
            +
            +
            +
            +

            Who wrote what not marked yet

            + + + + + + + +
            PartWritten byNote
            React front end?Job form, queue view, results.
            Node API & job service?Talks to Slurm on the user's behalf.
            OCI autoscaling?Web stack and compute, separately.
            OAuth / Entra ID login?University accounts only.
            ERDA integration?Pick inputs, deliver results.
            + + +

            Decisions placeholder

            +
              +
            1. Keep Slurm, wrap it. Researchers' existing scripts keep working.
            2. +
            3. Scale the web stack and the compute pool independently: a busy week of uploads isn't a busy week of jobs.
            4. +
            5. Store nothing long-term in the platform; ERDA is the source of truth.
            6. +
            +

            What broke placeholder

            +
              +
            • New nodes joined the cluster before their mounts were ready, and the first jobs on them failed.
            • +
            • Nodes now report healthy only after a mount check; Slurm waits for that.
            • +
            + +
            +
            + +
            +
            + +
            + +
            +
            +
            +
            + p. 4 +

            Document & information services

            + Overleaf · OpenProject · integrations · 2025–now + AI: not marked +
            +
            +
            +

            What and why

            +

            Self-hosted writing and planning tools for research groups: Overleaf for papers, OpenProject for the projects behind them, wired into university login and each other so a group gets one place to work instead of five accounts.

            +

            How it works

            +
            + + + + + + + + AU loginOverleafOpenProjectbackups + +
            +
            +
            +

            Who wrote what not marked yet

            +
            Deployment & config?
            Login integration?
            Glue between the two?
            +

            What broke placeholder

            +
            • An upgrade changed the Overleaf compile image, and old projects stopped building.
            • Pinned images per project; upgrades are now opt-in.
            +
            +
            + +
            +
            + +
            + +
            +
            +
            +
            + p. 5 +

            Kept secure, kept running

            + OpenBao / Vault · Grafana · Docker · Ansible + AI: not marked +
            +
            +
            +

            What and why

            +

            Trying out newer versions and new kinds of software for researchers, without it becoming a risk. Everything runs isolated in containers, secrets live in OpenBao (Vault), machines are configured with Ansible, and Grafana watches all of it.

            +

            Less a single project than a way of working, but the part I'd most like to show someone.

            +
            +
            +

            The loop

            +
            + + + + + + try itisolateupdatemonitor + Docker · AnsibleOpenBao · Grafana + +
            +

            Who wrote what not marked yet

            +

            Playbooks, dashboards, policies: to be filled in.

            +
            +
            + +
            +
            + +
            + +
            +
            +
            +
            p. 6 · 2019
            internship
            +

            Early prototype, ScienceAtHome

            + by hand +

            A month on a new project: ideation and planning with the team, then an early prototype of the base mechanics so the people it was for had something to react to. Pair-programmed with experienced developers to start the real thing. Project name and stack unknown.

            +
            +
            + +
            + + +

            On my own

            Side projects: the homelab, small tools, games.

            + +
            +
            +
            +
            + pp. 7–8 +

            Event Tracker for Gacha Games

            + JavaScript · scraping · web app · 2025 + AI-made +
            +
            +
            +

            What and why

            +

            One calendar for the limited-time events in several gacha games, so banners stop slipping past unnoticed. Also a deliberate test: how far can an agent take a small, real project if I only write the spec and the checks?

            +

            How it works

            +
            + + + + + + + + game Agame Bgame C… + normalisededupe · UTC + calendar + the part I rejected twice + +
            +

            Decisions

            +
            1. Scrape the announcement pages, not the games.
            2. Everything stored in UTC, shown in the visitor's zone.
            3. The agent writes code; it never writes the tests' expectations.
            +
            +
            +

            Who wrote what detail is placeholder

            + + + + + + + +
            PartWritten byNote
            Spec & testsby handOne page of requirements, one failing test per game.
            ScrapersAIWritten against my fixtures.
            NormaliserAIFirst version guessed time zones. Rejected.
            Calendar UIAIPlain JS, no framework, on request.
            Reviewby handEvery change read before merge.
            + + +

            What broke placeholder

            +
            • Two scrapers died when a site changed its markup.
            • Fixed by the agent in one pass from the failing fixtures.
            • Duplicate events after a daylight-saving change.
            + +
            +
            + +
            +
            + +
            + +
            +
            +
            +
            + pp. 9–10 +

            Config

            + Ansible · docker-compose · IaC · homelab + AI-made +
            +
            +
            +

            What and why

            +

            Every machine in the homelab, rebuildable from bare metal with one command, with git as the documentation. Deployment management for a growing pile of docker-compose services.

            +

            How it works

            +
            + + + + + + + + + repoinventoryroles/compose/ + ansible + nas · media, backupmini-1 · servicesmini-2 · monitoring + one command, any host + +
            sketch · host names placeholder
            +
            +
            +
            +

            Who wrote what detail is placeholder

            + + + + + +
            PartWritten byNote
            Inventory & layoutby handWhich service lives where, and why.
            Playbooks & rolesAIGenerated, then iterated for a month.
            Compose filesAITemplated from one pattern I wrote.
            + + +

            Decisions

            +
            1. Compose, not Kubernetes: the lab is three machines.
            2. Secrets in an encrypted vault file, never in the repo history.
            +

            What broke placeholder

            +
            • Every run restarted every container: a template wrote a fresh timestamp on each render.
            • Found by hand with --diff. The agent kept suggesting handlers.
            + +
            +
            + +
            +
            + +
            + +
            + + +

            School

            University and high school. All of it by hand.

            + +
            +
            +
            +
            + pp. 16–17 +

            HyperCache, bachelor thesis

            + Node.js · simulation · P2P · 2022 + by hand +
            +
            +
            +

            What and why

            +

            Peer-to-peer archives only work if peers actually keep what they promise to keep. The thesis looks at reputation systems for P2P archival: how peers can rate each other so that free-riders and bad actors are found and routed around.

            +

            How it works

            +
            + + + + + + + + + .92.88.71.95.64.90 + free-rider: claims to store,fails the spot checks + score = past audits + +
            sketch · peers audit each other's stored chunks; scores decide who gets data
            +
            +
            +
            +

            Who wrote what

            + + + + + +
            PartWritten byNote
            Simulatorby handNode.js, peers as processes in one event loop.
            Reputation modelsby handCompared against a no-reputation baseline.
            Reportby handWritten in 2022, before any of this was AI.
            + + +

            Decisions placeholder

            +
            1. Simulate instead of deploy: thousands of peers on one laptop, reproducible runs.
            2. Model churn explicitly; honest peers going offline shouldn't look like cheating.
            +

            What broke placeholder

            +
            • Early runs punished honest peers on slow links harder than free-riders.
            • Audits got a grace window, and the result became a chapter.
            + +
            +
            + +
            +
            + +
            + +
            +
            +
            +
            + pp. 18–19 +

            Mixed-Reality Rowing Game

            + Unity · C# · Arduino · two real oars · 2020 + by hand +
            +
            +
            +

            What and why

            +

            A rowing game you play with two real oars. Sensors on the oars feed an Arduino, the Arduino feeds Unity, and the boat in the headset moves the way your arms do. The question: does real resistance make a virtual space feel more real?

            +

            How it works

            +
            + + + + + + + + + + + ArduinoUnityC# + serial + angle sensor at each oarlock + mixed reality: yousee your own hands + +
            +
            +
            +

            Who wrote what

            + + + + + +
            PartWritten byNote
            Arduino firmwareby handReads two sensors, streams angles.
            Unity game & physicsby handC#, group project.
            Oar rigby handLiterally, with tape.
            + + +

            Decisions placeholder

            +
            1. Measure oar angle, not force: cheaper sensors, and it's what the boat needs.
            2. Smooth on the Unity side so the firmware stays dumb.
            +

            What broke placeholder

            +
            • Serial lag made the boat feel drunk.
            • Smaller packets, higher baud rate, and the latency went away.
            + +
            +
            + +
            +
            + +
            + +
            + +
            +

            Set in IBM Plex Serif, Sans and Mono, on the same grid paper as the gate. Highlighter means AI; an underline means by hand; a dashed ring means not marked yet.

            +

            Placeholders (dotted underline or "placeholder" tag): university name, project years, all blog titles and dates, the CV PDF link, every "decisions" and "what broke" entry, the per-part AI breakdowns and percentages, the AU projects' AI level, ScienceAtHome project name, Config host names, live demo links.

            +

            ← back to the gate · off the clock → · the 2021 site

            +
            +
            +
            + + + + diff --git a/mockups/tech-r2-b.html b/mockups/tech-r2-b.html new file mode 100644 index 0000000..4d45190 --- /dev/null +++ b/mockups/tech-r2-b.html @@ -0,0 +1,735 @@ + + + + + +Lucas Winther / work: drawing set + + + + + + +
            tech-r2-b · Spec sheetsProjects as engineering drawings on the gate's grid paper. Four featured projects get full sheets with a title block, an AI stamp and numbered callouts; the rest sit in a drawing register (T1's overview, with character) that opens each sheet in place. A T4-style inspector shows the selected sheet's skills and writing.
            + +off the clock → + + + + + + +
            + + +
            +
            drawn by

            Lucas Winther

            Computer scientist. Builds and runs research software.

            +
            current · Jan 2025–now

            IT-medarbejder, IT Research Tech, Aarhus University

            Slurm compute platform, document services, secure and monitored infrastructure.

            +
            previous

            ScienceAtHome, intern · 2019

            TERMA Group, student helper, local configuration management · 2016–18

            +
            education · contact

            BSc Computer Science, Aarhus University

            lucas@lucaswinther.info
            GitHub · LinkedIn

            + full CVPDF ↓1 page +
            DevOps · Docker · Linux admin · observability · cloud (OCI) · Slurm · React/Node · Ansible · Unity/C# · leadershipsheets 01–04 featured · 17 in register · rev. Nov 2026
            +
            + +

            Featured sheets

            Click a sheet to inspect it. Numbered circles point at the notes on the right of each sheet.

            + + + + +
            + + +
            + ▸ selected +
            ABCDEF
            +
            1234
            +
            +
            + + + + web: 1…n + + + + compute.au.dk (placeholder) + + + new job + + submit + + + queue + + + + + ERDA files + + + + nodes + + + + + nodenodenode + + compute: 0…n (OCI) + Slurm ctl.+ job service + + Entra IDOAuth login + + ERDAAU storage + + + + 1 + 2 + 3 + 4 + 5 + +
            FIG. 1 · placeholder: job dashboard screenshot, over the platform's two elastic tiershidden lines = scaled-down
            +
            +
            +

            Notes

            +
              +
            1. Job form. Researchers submit Slurm jobs without a terminal: script, resources, inputs.
            2. +
            3. Queue. Status and logs per job, fed by a Node service that talks to Slurm for the user.
            4. +
            5. ERDA picker. Inputs come from, and results go back to, AU's own ERDA storage.
            6. +
            7. Nodes. Compute nodes on Oracle Cloud scale up with the queue and down to zero when it's empty.
            8. +
            9. Login. OAuth with Entra ID: university accounts only.
            10. +
            +
            +

            what & whyA scalable, easy-to-use compute job system for researchers: Slurm's power behind a React/Node web app, with both web stack and compute scaling on Oracle Cloud.

            +

            interestingScaling the web tier and the compute pool separately, since a busy week of uploads isn't a busy week of jobs.

            +
            +
            +
            REVDATECHANGE
            A2025first release, one group
            B2026autoscaling compute
            +
            +
            projectAU compute platform
            +
            dwg no.LW-01
            +
            rev / yearB · 2025–
            +
            stackSlurm · React · Node · OCI · Entra ID
            +
            roledeveloper & ops, AU IT Research Tech
            +
            AI levelnot marked
            +
            +
            +
            + + +
            + ▸ selected +
            ABCDEF
            +
            1234
            +
            +
            + + + + + + + + + + .92.88.71.95.64.90 + + + DETAIL A · one audit round + + + challengeproofscorenext + Δt + + 1 + 2 + 3 + 4 + +
            FIG. 2 · reputation network (scores = weighted audit history) and detail Ahatched = free-rider
            +
            +
            +

            Notes

            +
              +
            1. Free-rider. Claims to store chunks, fails the spot checks. Hidden lines: the links that get dropped.
            2. +
            3. Score. Each peer's reputation comes from its past audits, weighted toward recent ones.
            4. +
            5. Audit round. Challenge, proof, score, repeat every Δt.
            6. +
            7. Churn. Honest peers going offline mustn't look like cheating; this needed a grace window.
            8. +
            +
            +

            what & whyBachelor thesis: reputation systems for peer-to-peer archival, so peers that don't keep what they promise get found and routed around. Simulated in Node.js.

            + +
            +
            +
            REVDATECHANGE
            A2022thesis submitted
            +
            +
            projectHyperCache, bachelor thesis
            +
            dwg no.LW-02
            +
            rev / yearA · 2022
            +
            stackNode.js · simulation · P2P
            +
            roleauthor, BSc CS
            +
            by handno AI
            +
            +
            +
            + + +
            + ▸ selected +
            ABCDEF
            +
            1234
            +
            +
            + + + + + + seat + + + + + + + + + + ≈70° + + + + ≈ 2.9 m + + Arduinoangles @ 60Hz + + + + headset · Unity + + + 1 + 2 + 3 + 4 + +
            FIG. 3 · rig, plan view · dimensions approximatehidden lines = cables
            +
            +
            +

            Notes

            +
              +
            1. Oarlock sensor. An angle sensor where each oar pivots; angle, not force, is what the boat needs.
            2. +
            3. Arduino. Reads both sensors and streams angles to Unity over USB serial.
            4. +
            5. Unity. C# turns two angle streams into a boat; mixed reality, so you still see your hands.
            6. +
            7. Real oars. Two of them, with real weight. Taped, not welded.
            8. +
            +
            +

            what & whyA mixed-reality rowing game played with two real oars. Does real resistance make a virtual space feel more real?

            + +
            +
            +
            REVDATECHANGE
            A2020course project, group
            +
            +
            projectMixed-reality rowing game
            +
            dwg no.LW-03
            +
            rev / yearA · 2020
            +
            stackUnity · C# · Arduino
            +
            rolehardware + game, group of 3
            +
            by handno AI
            +
            +
            +
            + + +
            + ▸ selected +
            ABCDEF
            +
            1234
            +
            +
            + + + config/ + inventory.ymlgroup_vars/roles/docker/backup/monitoring/compose/media.ymlservices.ymlvault.yml (enc.) + + ansibleplaybook site.yml + + + nasmini-1mini-2 + + + 3 hosts, 1 command + 1 + 2 + 3 + 4 + +
            FIG. 4 · repo and hosts · host and file names placeholderhatched = compose stack
            +
            +
            +

            Notes

            +
              +
            1. Secrets. In an encrypted vault file, never in plain history.
            2. +
            3. One command. Any host rebuilt from bare metal with a single playbook run.
            4. +
            5. Roles. Generated by AI, then iterated for a month; the layout was written by hand.
            6. +
            7. Compose, not Kubernetes. The lab is three machines.
            8. +
            +
            +

            what & whyAnsible + docker-compose deployment management for the homelab, with git as the documentation.

            +

            brokeEvery run restarted every container: a template rendered a new timestamp. Found by hand with --diff.

            + +
            +
            +
            REVDATECHANGE
            A2025first hosts
            B2025idempotent templates
            +
            +
            projectConfig
            +
            dwg no.LW-04
            +
            rev / yearB · 2025
            +
            stackAnsible · docker-compose · IaC
            +
            rolesolo, homelab
            +
            AI-madespec by hand
            +
            +
            +
            +
            + + +

            Drawing register

            Every project. Click a row to open its sheet in place.

            +
            + + + +
            dwgtitlestackyearmade
            +
            + +
            +

            Set in IBM Plex Sans, Sans Condensed and Mono, on the gate's grid paper. Stamps: double ring = by hand, red = AI-made, dashed = not marked yet.

            +

            Placeholders (dotted underline): university, project years, revision tables, roles and group sizes, all blog titles and dates, the CV PDF, the AU projects' AI level, figure dimensions and host names, "interesting / broke" notes, the ScienceAtHome project name. Figures are drawn placeholders for real screenshots.

            +

            ← back to the gate · off the clock → · the 2021 site (by hand)

            +
            +
            + + + + diff --git a/mockups/tech-r2-c.html b/mockups/tech-r2-c.html new file mode 100644 index 0000000..8f8e6c9 --- /dev/null +++ b/mockups/tech-r2-c.html @@ -0,0 +1,680 @@ + + + + + +Work · Lucas Winther + + + + + + + +
            +tech-r2-c · Project explorerWhat "enter work" opens: every project in one list on the left, a big readable project sheet on the right that swaps instantly (↑/↓ or click; the URL hash changes so any project can be shared). A slim inspector shows skills and related writing. Grid paper, Plex Mono and accent from nav-d's left gate; list-plus-detail from ntch.design, the inspector from T4, "who wrote what" from T5.
            + +off the clock → + +
            + + + + + +
            + +
            +
            + + + +
            + + + + + diff --git a/mockups/tech-r2-d.html b/mockups/tech-r2-d.html new file mode 100644 index 0000000..71585fc --- /dev/null +++ b/mockups/tech-r2-d.html @@ -0,0 +1,785 @@ + + + + + +Work · Lucas Winther + + + + + + + +
            +tech-r2-d · Featured, then everythingWhat "enter work" opens: a normal scrolling page. Four featured projects, each told in the shape that suits it (architecture, contact sheet, network, before/after), then a full index of all 17 with personality, then writing. Grid paper and Plex from nav-d's left gate; varied shapes from sankar.work, kept restrained; the index is T1 with character.
            + +off the clock → + +
            +
            + Lucas Winther / work + + + + projects made + + + + + ↖ gate +
            +
            + +
            +
            + + +
            +
            +
            ● 01 / work
            +

            Work

            +

            I build and run research software at Aarhus University, and make things on my own time, lately often with AI in the loop. Four projects are told properly below; everything else is in the index, each marked with how much of it an AI wrote.

            +
            +
            +
            +
            nowIT-medarbejder, IT Research Tech, Aarhus University 2025–now
            devops · containers · linux · observability · cloud · full-stack
            +
            beforeIntern, ScienceAtHome 2019
            Student helper, Local Configuration Management, TERMA Group 2016–2018
            +
            educationBSc Computer Science, Aarhus University 2022
            thesis: HyperCache, reputation in P2P archival
            + + +
            +
            + + + +
            + + +

            Everything

            17 projects · click a row to open it
            +
            + arrange by + + +
            +
            +
            fully AIsome AIby handnot recorded yetdotted underline = placeholder
            + + + +
            + + +
            +
            + + + + + diff --git a/mockups/tech-r3-a.html b/mockups/tech-r3-a.html new file mode 100644 index 0000000..9e90cb2 --- /dev/null +++ b/mockups/tech-r3-a.html @@ -0,0 +1,927 @@ + + + + + +Lucas Winther / work + + + + + + +
            tech-r3-a · Project stageModern and light: projects are the stage. Hover or focus a project and the big preview swaps at once; click for the full project, with a View Transition, back and prev/next. Press / or ⌘K to jump anywhere. Borrows the list-and-preview from ntch.design, the craft and command palette from rauno.me, and the reactive feel (not the colours) from sankar.work.
            + +off the clock → + +
            +
            + + + +
            +
            + +
            +
            +
            +
            Computer scientist · Aarhus, Denmark (city?)
            +

            I build and run research software at Aarhus University. On the side I make small tools, games and experiments, some by hand and some with AI.

            +
            +
            +

            Every project below says how it was made. Hover one to see it, open it for the why and the how.

            +

            Press / to jump to any project, post or section.

            +
            +
            + +
            +
            nowIT-medarbejder, IT Research Tech
            Aarhus University · Jan 2025–now
            +
            beforeScienceAtHome, intern 2019
            TERMA Group, student helper 2016–18
            +
            educationBSc Computer Science
            Aarhus University, 2022 · thesis: HyperCache
            +
            contactemail · GitHub · LinkedIn
            ↓ CV, PDF (1 page)
            +
            + +
            +
            +

            Projects

            17 +
            + +
            + + + +
            +
            +
            +
            +
              +
              +
              01
              + +
              +

              +

              + Open project ↵ +
              +
              +
              drawn stand-in for a screenshot · placeholder
              +
              +
              +
              + +
              +

              Latest writing

              On AI, devops and the homelab. Posted at blog.lucaswinther.info.

              All posts →
              +
                +
                +
                + +
                + + + + +
                +
                  +
                  ↑ ↓ move↵ openesc close
                  +
                  + + + + diff --git a/mockups/tech-r3-b.html b/mockups/tech-r3-b.html new file mode 100644 index 0000000..126a2df --- /dev/null +++ b/mockups/tech-r3-b.html @@ -0,0 +1,947 @@ + + + + + +Lucas Winther · Work + + + + + + +
                  +tech-r3-b · Swiss index, modernEvery project is one big numbered row. Point at a row for a small drawn preview by the cursor; click to open it in place (one at a time, the URL follows). Strict grid, Geist, near-white with one orange. Borrows rauno.me's restraint and sankar.work's hover previews, minus the noise.
                  + +off the clock → + +
                  +
                  +
                  + Lucas Winther / work + + +
                  + made + + + +
                  + + ↖ gate +
                  +
                  + + + +
                  +
                  +
                  + lucaswinther.info / work · computer scientist +

                  I build and run research software at Aarhus University, and make things on the side. Each project says how much AI was involved.

                  +
                  +
                  +
                    +
                  • 2025 – nowAarhus UniversityIT-medarbejder, IT Research Tech
                    01 compute02 docs03 ops
                  • +
                  • 2019ScienceAtHomeInternship, one month
                    04 prototype
                  • +
                  • 2016 – 18TERMA GroupStudent helper, Local Configuration Mgmt.
                  • +
                  • 2022BSc Computer ScienceAarhus University
                    12 thesis
                  • +
                  + +
                  +
                  + +
                  +
                  +

                  Index17 projects

                  +
                  +
                  + +
                  +
                  +
                  + +
                  +

                  Writingblog.lucaswinther.info

                  all posts ↗
                  +
                    +
                    + + +
                    +
                    + + + + + + diff --git a/mockups/tech-r3-c.html b/mockups/tech-r3-c.html new file mode 100644 index 0000000..38eb73e --- /dev/null +++ b/mockups/tech-r3-c.html @@ -0,0 +1,1062 @@ + + + + + +Work · Lucas Winther + + + + + + + +
                    +tech-r3-c · Showcase, darkWhat "enter work" opens, round 3: no paper metaphor. Warm near-black, Geist + Geist Mono, one orange accent. Four featured projects as big panels whose drawn UI reacts to the pointer (only on hover), then a filterable list of the rest; any project opens in a side sheet (Esc closes). Craft level of rauno.me, the varied presentation of sankar.work, kept quiet.
                    + +off the clock → + +
                    +
                    +
                    ← gateLucas Winther/ work
                    + +
                    made +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    +
                    ●  work · projects, writing, cv
                    +

                    I build and run research software at Aarhus University. On the side I make small tools, games and infrastructure.

                    +

                    Four projects told properly, then everything else. Every project is marked with how much of it was made with AI, and the filter at the top hides what you would rather not see.

                    +
                    +
                    +
                    fully AIsome AI
                    +
                    by handAI: not recorded
                    +
                    +
                    + +
                    +
                    +

                    Nowupdated Nov 2026

                    +
                      +
                    • Moving the compute platform's job logs into Grafana Loki
                    • +
                    • Rewriting Config so a fresh machine comes up in one run
                    • +
                    • Reading: Designing Data-Intensive Applications, 2nd ed.
                    • +
                    +
                    +
                    +

                    Latest writingall 5 ↓

                    +
                    +
                    +
                    +

                    CV in ten seconds

                    +
                    + nowIT-medarbejder, Aarhus University, IT Research Tech · 2025–now + beforeScienceAtHome intern 2019 · TERMA student helper 2016–18 + degreeBSc Computer Science, Aarhus University · HyperCache thesis + contactlucas@lucaswinther.info +
                    + +
                    +
                    + + + + + +
                    +

                    Everything else

                    13 projects
                    +
                    +
                    + +
                    +
                    +
                    +
                    + + +
                    +
                    +

                    Writing

                    AI, devops, homelabblog.lucaswinther.info →
                    +
                    +
                    +
                    +

                    Where I've worked

                    ↓ CV (PDF)
                    +
                      +
                    • 2025 – now
                      Aarhus University · IT-medarbejder, IT Research Tech +

                      Building and running software for researchers:

                      +
                      • a scalable, easy-to-use compute job system on Slurm, with a custom React/Node web app, scaling on Oracle Cloud, OAuth/Entra ID login and AU's ERDA storage
                      • +
                      • document and information services, integrating Overleaf and OpenProject
                      • +
                      • trying newer software while keeping it secure, containerised, updated and monitored: OpenBao/Vault, Grafana, Docker, Ansible
                      +
                      DevOpsDockerLinux adminobservabilitycloudfull-stackleadership
                    • +
                    • Jul 2019
                      ScienceAtHome · internship +

                      Joined ideation and planning on a new project, built an early prototype of its base mechanics to show the people it was for, and pair-programmed with experienced developers to start it.

                    • +
                    • 2016 – 2018
                      TERMA Group · student helper, Local Configuration Management
                    • +
                    • degree
                      BSc Computer Science · Aarhus University, 2022 +

                      Thesis: HyperCache, reputation systems for peer-to-peer archival.

                    • +
                    +
                    +
                    +
                    + + + + +
                    +
                    +
                    +

                    Mockup note, not part of the page · suggested left gate

                    +

                    If this direction wins, the gate's left side drops the grid paper and goes warm near-black (#131210) in Geist, the same accent orange. "Work" in heavy, tight sans; the three featured rows stay, with these AI marks.

                    +

                    The two halves then differ by hue and texture rather than light vs dark: flat graphite with crisp sans on the left, grainy plum with Fraunces on the right. On hover, the left side leans in as now and a small drawn preview of the compute panel fades in where the grid used to be; the crosshair readout goes.

                    +

                    "Enter work" then needs no transition at all: the gate's colours are already this page's.

                    +
                    + +
                    +
                    +
                    + +
                    + + + + + diff --git a/mockups/tech-r4-a.html b/mockups/tech-r4-a.html new file mode 100644 index 0000000..85adb98 --- /dev/null +++ b/mockups/tech-r4-a.html @@ -0,0 +1,1574 @@ + + + + + + +Work · Lucas Winther + + + + + + + +
                    +tech-r4-a · Sleek, darkr3-c's structure and showcases, taken to product quality: layered warm surfaces, a light that follows the pointer on every panel, a blurred bar and side sheet, ⌘K palette with live previews, and spring motion only when you open things. Linear / Raycast / Vercel craft level, in warm graphite with one orange.
                    + +off the clock → + +
                    +
                    +
                    ↖ gateLucas Winther/work
                    + + +
                    made +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    +
                    IT Research Tech · Aarhus University
                    +

                    I build and run research software. On the side: small tools, games and infrastructure.

                    +

                    Four projects told properly, then everything else. Each is marked with how much of it AI made, and the filter up top hides what you'd rather not see. Press ⌘K to jump anywhere.

                    +
                    +
                    +

                    AI marks

                    + fully AIsome AI + by handnot recorded +
                    +
                    + +
                    +
                    +

                    Nowupdated Nov 2026

                    +
                      +
                    • Moving the compute platform's job logs into Grafana Loki
                    • +
                    • Rewriting Config so a fresh machine comes up in one run
                    • +
                    • Reading: Designing Data-Intensive Applications, 2nd ed.
                    • +
                    +
                    +
                    +

                    Latest writingall 5 ↓

                    +
                    +
                    +
                    +

                    CV in ten seconds

                    +
                    + nowIT-medarbejder, Aarhus University, IT Research Tech · 2025–now + beforeScienceAtHome intern 2019 · TERMA student helper 2016–18 + degreeBSc Computer Science, Aarhus University · HyperCache thesis + contactlucas@lucaswinther.info +
                    + +
                    +
                    + + + + + +
                    +

                    Everything else

                    13 projectshover a row for a preview
                    +
                    +
                    + +
                    +
                    +
                    +
                    + + +
                    +
                    +

                    Writing

                    AI, devops, homelabblog.lucaswinther.info →
                    +
                    +
                    +
                    +

                    Where I've worked

                    ↓ CV (PDF)
                    +
                      +
                    • 2025 – now
                      Aarhus University · IT-medarbejder, IT Research Tech +

                      Building and running software for researchers:

                      +
                      • a scalable, easy-to-use compute job system on Slurm, with a custom React/Node web app, scaling on Oracle Cloud, OAuth/Entra ID login and AU's ERDA storage
                      • +
                      • document and information services, integrating Overleaf and OpenProject
                      • +
                      • trying newer software while keeping it secure, containerised, updated and monitored: OpenBao/Vault, Grafana, Docker, Ansible
                      +
                      DevOpsDockerLinux adminobservabilitycloudfull-stackleadership
                    • +
                    • Jul 2019
                      ScienceAtHome · internship +

                      Joined ideation and planning on a new project, built an early prototype of its base mechanics to show the people it was for, and pair-programmed with experienced developers to start it.

                    • +
                    • 2016 – 2018
                      TERMA Group · student helper, Local Configuration Management
                    • +
                    • degree
                      BSc Computer Science · Aarhus University, 2022 +

                      Thesis: HyperCache, reputation systems for peer-to-peer archival.

                    • +
                    +
                    +
                    +
                    + + + + +
                    +
                    +
                    +

                    Mockup note, not part of the page · suggested left gate

                    +

                    If this direction wins, the gate's left half goes warm graphite with the same faint orange bloom, Geist set big and tight. The three featured rows sit on a small raised panel with the AI marks; the pointer light from this page runs along its border.

                    +

                    The two halves then differ by hue and texture rather than light vs dark: lit graphite and crisp sans on the left, grainy plum and Fraunces on the right. On hover, a tilted drawn preview of the compute platform slides in where the grid paper used to be.

                    +

                    "Enter work" then needs no transition: the gate is already this page's colours.

                    +
                    + +
                    +
                    +
                    + + + +
                    + + + +
                    +
                    esc
                    +
                    +
                      +
                      +
                      +
                      ↑ ↓ move↵ openesc close
                      +
                      +
                      + + + + diff --git a/mockups/tech-r4-b.html b/mockups/tech-r4-b.html new file mode 100644 index 0000000..9142b4b --- /dev/null +++ b/mockups/tech-r4-b.html @@ -0,0 +1,1498 @@ + + + + + +Work · Lucas Winther + + + + + + + +
                      +tech-r4-b · Light and sleekr3-c's structure and showcases as a light, layered product surface: floating panels, pointer light, frosted bar, sheet and ⌘K palette. Drawn previews from r3-a. Craft of Linear, Vercel, Raycast.
                      + +off the clock → + +
                      +
                      +
                      ↖ gateLucas Winther/ work
                      + +
                      made +
                      + + +
                      +
                      + +
                      +
                      + +
                      +
                      +
                      +
                      + work · projects, writing, cv +

                      I build and run research software at Aarhus University. On the side, small tools, games and infrastructure.

                      +

                      Four projects told properly, then everything else. Each one says how much of it was made with AI, and the filter in the bar hides what you'd rather not see.

                      +
                      +
                      + fully AIsome AI + by handAI: not recorded +
                      +
                      + +
                      +
                      +

                      NowNov 2026

                      +
                        +
                      • Moving the compute platform's job logs into Grafana Loki
                      • +
                      • Rewriting Config so a fresh machine comes up in one run
                      • +
                      • Reading: Designing Data-Intensive Applications, 2nd ed.
                      • +
                      +
                      +
                      +

                      Latest writingall 5 ↓

                      +
                      +
                      +
                      +

                      CV in ten seconds

                      +
                      + nowIT-medarbejder, Aarhus University, IT Research Tech · 2025–now + beforeScienceAtHome intern 2019 · TERMA student helper 2016–18 + degreeBSc Computer Science, Aarhus University · HyperCache thesis + contactlucas@lucaswinther.info +
                      + +
                      +
                      + + + + + +
                      +

                      Everything else

                      13hover a row for a preview
                      +
                      +
                      + +
                      +
                      +
                      +
                      + + +
                      +
                      +

                      Writing

                      AI, devops, homelabblog.lucaswinther.info →
                      +
                      +
                      +
                      +

                      Where I've worked

                      ↓ CV (PDF)
                      +
                        +
                      • 2025 – now
                        Aarhus University · IT-medarbejder, IT Research Tech +

                        Building and running software for researchers:

                        +
                        • a scalable, easy-to-use compute job system on Slurm, with a custom React/Node web app, scaling on Oracle Cloud, OAuth/Entra ID login and AU's ERDA storage
                        • +
                        • document and information services, integrating Overleaf and OpenProject
                        • +
                        • trying newer software while keeping it secure, containerised, updated and monitored: OpenBao/Vault, Grafana, Docker, Ansible
                        +
                        DevOpsDockerLinux adminobservabilitycloudfull-stackleadership
                      • +
                      • Jul 2019
                        ScienceAtHome · internship +

                        Joined ideation and planning on a new project, built an early prototype of its base mechanics to show the people it was for, and pair-programmed with experienced developers to start it.

                      • +
                      • 2016 – 2018
                        TERMA Group · student helper, Local Configuration Management
                      • +
                      • degree
                        BSc Computer Science · Aarhus University, 2022 +

                        Thesis: HyperCache, reputation systems for peer-to-peer archival.

                      • +
                      +
                      +
                      +
                      + + + + +
                      +
                      +
                      +

                      Mockup note, not part of the page · suggested left gate

                      +

                      If this direction wins, the gate's left side drops the grid paper for this page's canvas: soft off-white (#f5f4f0) with a faint orange bloom, Geist, the same accent. "Work" in heavy, tight sans; the three featured rows sit on one floating white card with these AI marks.

                      +

                      The halves then differ by light and texture: a bright, layered product surface on the left, grainy plum with Fraunces on the right. On hover, a small drawn window of the compute platform lifts in on the left; the crosshair readout goes.

                      +

                      "Enter work" then needs no transition: the gate's colours are already this page's.

                      +
                      + +
                      +
                      +
                      + + + +
                      + + + +
                      +
                        +
                        ↑ ↓ move↵ openesc close⌘K anywhere
                        +
                        + + + +