changelog $ git log --graph

changelog[837]

What changed on this site, straight from the repository — the same history the terminal's git log replays.

  1. 3f98030(HEAD)2026-08-08

    public keys get their own /keys page — labeled pgp + ssh cards with fingerprints and copyable import commands; the ssh key is self-hosted at /ssh.txt instead of github, and the pgp uid moved to pgp@laurensverspeek.nl

    17 files · +470−198

  2. d5d78d22026-08-08

    update node in cicd

    1 file · +1−1

  3. 10de1572026-08-08

    explicit approval for install scripts

    2 files · +6−45

  4. c6f7fa72026-07-16

    share-target url strip survives hydration (nuxt finalizes with a replaceState of the original url after app:mounted — wait it out) and the snake header shortens on narrow boards, since the 44-column hint was the frame's real overflow

    2 files · +12−5

  5. 34cb1c62026-07-16

    runtime-check fixes: the share-target url cleanup goes through router.replace (vue-router overrides a raw replaceState, so the one-shot params survived reloads), and the snake phone boards shrink further — a coarse column is really ~8.8px, so 22/18 cells still clipped at 375/320; 19/16 fit with margin

    2 files · +8−5

  6. 2dfae062026-07-16

    readme catch-up: wget/killall/pair in the terminal tour, files multi-select, the installed-pwa share sheet + icon badge, this round's mobile fixes, fresh 375px screenshot

    2 files · +6−6

  7. 95ebd952026-07-16

    un-export the pair session's module-local constants — knip flagged PAIR_PID and PAIR_CODE_RE as unused exports

    2 files · +2−2

  8. 2bc630b2026-07-16

    museum + architecture catch-up: four new exhibits (wget keeps, the pair terminal, a citizen of your phone, the frame budget) and the docs learn this round's load-bearing truths — composited window position that every transform state must compose in, the lazy-mount focus trap both consoles now poll around, the one-boot postgenerate harness, the pinned mime maps, and the honest-503-for-any-non-404 rule

    2 files · +44−8

  9. f8309312026-07-16

    pair terminal: share your live shell over the relay — 'pair' mints a 4-char code, 'pair join <code>' streams the host transcript in real time (30-line backlog for late joiners), 'pair allow' hands guests the keyboard so their lines run on the host's real shell queue; server-authoritative rooms (rebuilt line frames, whitelisted types, clipped text, flood gates, 8-guest cap), host shows in ps as pair-share.sh pid 2525 and kill ends the broadcast, solo copy when no relay; 16 new relay checks + 8 mirrorable unit tests

    12 files · +782−1

  10. 2bd7c0c2026-07-16

    the installed pwa is an os share target — manifest share_target routes shared title/text/url to /desktop, where a client plugin (after the vfs restore) pins the content as a real sticky note in ~/stickies, opens the notes app via the same pending-app hook desktop <app> uses, and strips the one-shot params from the url

    2 files · +50−1

  11. ff7aaee2026-07-16

    installed pwa wears the unread-mail count on its app icon — the badging api mirrors the same single-source read-state the lvos mail icon and terminal mail use, clears as you read, and only engages in standalone display mode so browser tabs pay nothing

    1 file · +18−0

  12. 02802802026-07-16

    tile-windows e2e polls until the glide settles — window position is a transitioned transform since the compositor change, so tile/snap animate to their slots and an immediate boundingbox read lands mid-flight

    1 file · +13−9

  13. 55fd4fa2026-07-16

    files app learns multi-select — ctrl/cmd-click toggles, shift-click and shift-arrows range-select from the anchor, delete and the context menu act on the whole selection ('move 3 to bin', rename stays single), and dragging a selected row moves the whole nested-pruned selection; pure toggle/range/prune helpers extracted and tested

    6 files · +195−41

  14. 021822e2026-07-16

    postgenerate boots one chromium and one static server for all three capture steps — the og rasterizer, resume pdf and pwa screenshots each launched their own browser (two also their own server) back to back; scripts/postgenerate.mjs runs them as steps with per-step non-fatal warns, npm run resume = --only=resume

    5 files · +74−67

  15. e08ca9d2026-07-16

    static server and time-machine sw agree on mime types — the server map lacked webmanifest/webm/mp4 (pwa manifest + project hover videos went out as octet-stream in e2e/local runs) and the sw lacked the videos; a drift-guard test now pins the two maps together

    3 files · +61−3

  16. cb29ac92026-07-16

    terminal scrollback lines are v-memo'd — settled lines are immutable, but line-by-line streams (tail -f, animated commands) re-diffed the whole list per appended line, o(n²) toward the 1500-line cap; a display:contents wrapper per line gives v-memo a real element without touching layout or selectors

    1 file · +10−2

  17. e995e9a2026-07-16

    effects perf polish: matrix rain reads its glyph color once per resize instead of forcing a style flush every frame, the screensaver logo writes its transform imperatively instead of re-patching the component 60 times a second, and the life wallpaper / sysmon localstorage walk / globe sphere rebuild all skip ticks while the tab is hidden

    5 files · +17−4

  18. f3cb82e2026-07-16

    terminal quick-key labels stay inside their pills — flex-shrunk buttons let '⊞ split' and 'space' paint past the rounded border on phones; clip and ellipsize instead

    1 file · +5−0

  19. c3ffdce2026-07-16

    mobile menu footer actions become real touch targets — the terminal/github/linkedin/keybase/email row rendered as 23px-tall bare text; padded to the 44px standard with a tightened gap so 320px still fits them comfortably

    1 file · +7−2

  20. d7d99802026-07-16

    hero crosshair rides the compositor — it measured the hero and moved via left/top on every mousemove over the most-visited element on the site, forcing a reflow per move; the rect is cached (invalidated on scroll/resize) and the lines and readout track the pointer with transforms

    1 file · +20−12

  21. 5e756592026-07-16

    contact page phone fixes: the wizard titlebar ellipsizes to one line instead of wrapping to three at 320px (the exact fix the terminal titlebar got last round), and the tap-to-copy ssh/pgp key lines grow from an 18px-tall text sliver into real touch targets

    2 files · +11−0

  22. c40dfb12026-07-16

    taskbar and start-menu touch targets: the clock (only way into the calendar) measured 35x18 on a phone, volume and the tray toggle 22px wide, the start menu's system rows 34px — all floored to the coarse-pointer standard the search rows already meet, with wallpaper swatches kept square

    2 files · +25−0

  23. 383d3712026-07-16

    pixel-world minimap stops rescanning all 16k cells per frame — the board paints to an offscreen canvas keyed on its version, so a pan/zoom/cursor frame is one drawImage plus the viewport rectangle

    1 file · +24−8

  24. c21597e2026-07-16

    windows move on the compositor: position rides --wx/--wy custom props composed into transform instead of left/top, so dragging a glass window no longer reflows and re-rasterizes its backdrop blur every pointermove; drag/resize writes are raf-coalesced, an is-manipulated class suppresses the genie transition mid-drag, and every transform state (genie, peek, open keyframe, reduced-motion) composes the position back in

    3 files · +88−25

  25. d2492392026-07-16

    wget downloads a url into the real vfs — curl prints, wget saves: filename from the path or -O, curl's 10s timeout, and a 64k clip because the filesystem lives in localstorage; the file is immediately cat/vim/grep-able

    1 file · +50−0

// press ~ and try git show 3f98030 for the full diffstat

© 2026 laurensverspeek.nl

press ~ or for terminal mode ·

built 2026-08-08 · · changelog · shortcuts ·