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. 2021–22Student developer, university IT
  3. 2019–22BSc Computer Science, Aarhus University
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.