changelog $ git log --graph
changelog[837]
What changed on this site, straight from the repository — the same history the terminal's git log replays.
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
d5d78d22026-08-08
update node in cicd
1 file · +1−1
10de1572026-08-08
explicit approval for install scripts
2 files · +6−45
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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