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. Scale the web stack and the compute pool independently: a busy week of uploads isn't a busy week of jobs.
  3. Store nothing long-term in the platform; ERDA is the source of truth.

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.