Changelog

Every commit to this site, straight from the repo.

November 2026

  • Fixretain satellite counts across partial gpsd reportsa42125a
  • Featureshow privacy-preserving satellite counts on time pagec308d40
  • Fixcredit the actual lyrics server in both players26b644c
  • Featureadd reusable X timeline widget and translationsf11932d
  • Featureverify content backups over explicit FTPS2617065
  • Fixhide device hostnames and restrict music monitoring71da8f4
  • Featurecoordinate multi-device now playingd29c7fd
  • Postadd NAS hardware and software to stackb9994e0
  • Fixsimplify space copy and move footer link last8afb8c8
  • Featureadd interactive Space Passport collection61dba82

October 2026

  • Fixenforce shared per-IP and global lyrics limits08dc354
  • Featureprefer protected self-hosted lyrics with LRCLIB fallbackd10045f
  • Featurereturn plain-text visitor IP on check subdomain7815303
  • Featureadd Android now-playing and listening history agentd737027
  • Fixsimplify media uploads and blog image insertion8e271bf
  • Postadd iPad 2 and cyberdeck to now page5480c15
  • Fixinitialize classic diagram layout in Workers runtimed0eeabb
  • Fixreport classic diagram rendering failures83ff279
  • Fixpreserve Markdown line endings in backup revisions9040445
  • Fixsupport Pages build bundler for classic image mappingdca2f2d
  • Featuremigrate blog and shelf to D1 with Markdown NAS backups7f4bcde
  • Fixidentify album artwork using played-song membershipe065244
  • Fixdistinguish self-titled Weezer album artwork by catalog ID46ca65d
  • Featuregenerate llms.txt and published blog Markdown at build timedc4e1fd
  • Chorekeep admin operating guides private5b3a2e8
  • Featureexpose now API and add public API docs0d33ff0
  • Chorecollapse hardware specs on stack page685ebc4
  • Postadd devices and verified router specs to stackb73a6ee
  • Postadd blue iPod nano and Apple EarPods to stack3713726
  • Choreorganize stack into aligned specs and gear cardsf74614e
  • Featureadd technology stack editor to admindb30504
  • Postadd Finstalgia, CDScribe, and ZenithTick projects988bd57
  • Featureadd artist photos and album covers to music statseadc5aa
  • Featureshow live music stats without frequent D1 writes1a9071d
  • Featureadd offline listening history and daily music stats69169ce
  • Featurerender sanitized Markdown in AI chat repliesc999b53
  • Fixuse Workers-compatible provider redirect handling456bd3a
  • Fixdistinguish provider balance failures and log safe diagnosticsf417594
  • Fixupdate chat status copy for DeepSeek1169a88
  • Featurereplace local AI relay with streaming DeepSeek chat2d59530
  • Fixrecover thinking-only responses and show live generation statse6d7ff2
  • Featureallow five daily AI generations with a shared budget of fifty15ae7f1
  • Fixkeep classic AI fallback links on the modern host3657ca9
  • Featurestream live homelab answers with thinking and admin reset1258e22
  • Fixthrottle Daily AI traffic before database accessd486b15
  • Fixverify Ollama loopback binding during setup35c9739
  • Featureadd daily homelab AI answers and abuse controls5763c88
  • Featureadd AI usage page and article authorship disclosures28813f2
  • Featureadd featured gallery hero and video uploadsa91273a
  • Fixsupport the Cloudflare Pages Functions compiler9158afa
  • Featureadd gallery management and interactive panorama viewers5913f03
  • Featurehighlight the best 10-word typing testc0df49e
  • Fixidentify Monkeytype collector requestsb6dcf06
  • Fixcollect Monkeytype stats from the home serverff2d8ac
  • Chorecover Monkeytype shared-IP rate limit diagnostics8bd6d7a
  • Fixdistinguish Monkeytype upstream rate limits7b2c9f6
  • Fixauthenticate Monkeytype profile requests4d021e2
  • Fixdiagnose Monkeytype failures and avoid reserving unused history slots23e306b
  • Fixinclude shared Monkeytype stats helper6c3616c
  • Featureadd personal stats with GitHub charts and Monkeytype history884c0b7
  • Featureadd privacy notice and opt-in Apple Music player3ad9bc7
  • Postpublish three old iPads and a retro website3b5a909
  • Fixwarn when generated blog slugs are truncated5dbb5f2
  • Fixrestore classic connection report and encryption detailsabdc9c6
  • Fixrecover classic lyrics from edge rate limitsd2d8266
  • Fixdiagnose edge lyrics lookup failures340e9b7
  • Fixuse Workers-compatible redirect mode for lyricse2f5409
  • Featureadd live classic player and clock with period page styles683c53e
  • Fixrender classic site diagrams as static SVGd92c711
  • Fixmove classic site badge below footer connectiona8c99fa
  • Fixkeep legacy preview tooling out of production config buildse9dfdd4
  • Featureadd classic site for older browsersf9fe1ba
  • Fixspeed up now-playing updates with adaptive polling8931975
  • Featureshow browser and user-agent on IP pagea901a5b
  • Featureadd synced lyrics and refine now-playing carde19d32d
  • Featureadd interactive media shelf and local admin editingd68f4fc
  • Postrevised blog md syntax issues4eee10b
  • Fixtidy request path card spacing5e4433f
  • Postupdate stack infocaf606b
  • Choreupdate site presentationb41dee6
  • Postupdate new blog to include less <br/>'s97a3fb2
  • Choresimplify IP dashboard and remove repeated connection details600918f
  • Featureadd full terminal articles and publish website updatese8ede87
  • Featureadd clock offset meter, command palette and connection route3962c45
  • Choremove TLS key exchange above network details1beac91
  • Featureadd visitor IP dashboard and TLS security indicatorsce01ac7
  • Fixkeep fullscreen terminal clear of audio controlsd1b69d9
  • Featureadd browser Linux terminal with cached welcome recordings70b53d7
  • Featureadd dedicated GPS clock page and fallback labelse1f58b8
  • Featureshow visitor local time beside GPS synced Beijing clockda2a99b
  • Fixreject clock redirects without hiding upstream statusbaf999b
  • Fixlog sanitized clock origin failure diagnostics902d8df
  • Featuresync homepage clock with GPS PPS time source1993f35
  • Featureadd bilingual site and project managemente2c5478
  • Postmake about copy more personal79c8ab5
  • Featureredesign now page as activity status8bf52e3
  • Featureadd interactive interests vortex4e9dc92

September 2026

  • Featureadd homepage now-playing widget0e2835a
  • Featureadd now-playing ingestion API290b9b7
  • Featureaggregate Codex usage from remote devices23a09d6
  • Postreorder project listings05eb386
  • Postcorrect ShutterWingPhotos final stats7214851
  • Postmark ShutterWingPhotos as discontinuedc998b69
  • FeatureAdded more devices to stack paged1d40a3
  • FeatureAdded more devices to tech stacke3e7518
  • Postadd now event "PiWatch"b7e668b
  • Postupdate OpenPGP keybc2461f

August 2026

  • Featureadd OpenPGP page44061cd
  • Postupdate post "Made a miniplayer for Apple Music on MacOS"1e9abb1
  • Postupdate post "Made a miniplayer for Apple Music on MacOS"edecb8b
  • Postadd post "Made a miniplayer for Apple Music on MacOS"dd0e067
  • Featureadd now event editorcfdb6d5
  • Fixchangelog: preserve history on shallow buildsd7dd61d
  • ChangeAdd VS Code Copilot token estimates4e7b915
  • ChangeSimplify homelab memory displayef9c9b6
  • ChangeAdd Codex token collection1d0b8bc
  • Featuretokens: archive usage in SQLite, add 7/30/all ranges8c00ee2
  • Fixtokens: count subagent transcripts40818c8
  • Changecopy(tokens): drop the tool name from the page456a9d3
  • Fixhomelab: stop the token rollup from being able to fail the heartbeatb30d663
  • Featuretokens: add a /tokens page fed by the homelab timerb41be6c
  • Fixphotos: merge the manifest instead of rebuilding it from disk7c3162a
  • Postcorrect the R2 token path in the credentials errorad344a7
  • Chorephotos: drop the local originals, guard the manifest against shrinkingf6cdbc1
  • Chorephotos: move the gallery to R2, drop originals from the repo41aad21
  • Choremedia: serve blog images from R2 instead of the repo531fb1a
  • Posttidy up a few things across the older posts4ac90dd
  • Posttrim the 2022 "what I'm working on" post41b5d77
  • Featureport the rest of the old blog, fix the age calculation2808393
  • Featureadmin: upload video to R2 instead of committing it to the repo0e5ab6b
  • Featureport four posts over from the old leodengsblog.cn9cf4511
  • Fixallow AF_UNIX in the homelab agent unit so DNS resolves5fc6c6e
  • Featurelive homelab status at /homelab44e6427
  • Featureturn /now into a split-flap departure boarde292d18
  • Featureadd /spotting and /changelog, both generated at build time24bce80
  • Featureauto-rotate the homepage status line14f1e04
  • Featurenew visual identity: blue and gold, IBM Plex Sansa1486f8
  • Fixmake small text legible across the sitee70c56a
  • Featurestop the admin editor losing unsaved work3b9dc0d
  • Postadd post "Explaining my weird home network & services setup"3f98f13
  • Featuredrafts folder in the admin editor731e129
  • Fixstop the admin editor eating characters during IME input3a0bf19
  • FeatureGitHub-style callouts for important sections448b600
  • Featurerender mermaid diagrams with pan/zoom controls95768a2
  • Fixstyle headings, links and the rest of .prosea531acc
  • Postupdate post "I Forked Tailscale's Android App So My Phone Could Find My Homelab"4271cc4
  • Postrename post to "i-forked-tailscales-android-app-so-my-phone-could-find-my-homelab"de246bd
  • Postupdate post "I Forked Tailscale's Android App So My Phone Could Find My Homelab"56b91c3
  • Fixstop /admin being cached at the edge8808874
  • Featurereplace Decap CMS with a self-built editor at /admin1cbbb89
  • Fixparse multi-line YAML frontmatter so descriptions aren't truncated719e36d
  • PostCreate Blog Posts “i-forked-a-vpn-app-so-my-phone-could-find-my-house”39ac466
  • PostUpdate Blog Posts “tailscale-headscale-setup-blog”ac41046
  • FixUpdate to correct microphone model1ade511

July 2026

  • Featureredesign contact page, fix casing across pages5d23d45
  • PostUpdate Blog Posts “tailscale-headscale-setup-blog”b0b7fdc
  • Featuresplit gallery into paginated collections, add Stack pagefe3d282
  • Fixmatch Apple Music embed theme to site's dark/light toggle0222f4f
  • Featureadd live GitHub stats and contribution graph to About pageeea1e75
  • Fixself-host decap-cms bundle instead of loading from unpkg07ce489
  • Featureadd Decap CMS admin panel, fix blog post timestamps46ba481
  • Featureuse profile pic as favicon, optimize avatar, update YouTube link35ce0d2
  • Featureadd RSS explainer page, restyle footer with social icons23ed77f
  • Featureadd /now page and RSS feed for the blog24d72bc
  • Featureadd planespotting photo gallery page63a41f5
  • Featureadd robots.txt and generated sitemap.xml798d93d
  • Fixoutput flat .html files instead of dir/index.html for prerendered routesa8de765
  • Featureserve bare routes as 200 rewrites instead of 308 redirects1ad67f5
  • Featureprerender all routes for crawler/AI-agent visibility5938fc7
  • FeatureUpdate homepage and about description48d0a09
  • FeatureUpdate english language flag from UK to US38500c3
  • Fixgive BlogPost a single template root so page transitions work05a47d9
  • Fixlabel languages as 1st/2nd language, drop fluency wording269f724
  • Featureadd languages section to about page1eaf8e5
  • Featureembed favorite rock playlist on about pagef0cd0d3
  • FeatureAdded profile picture on main page, changed about descriptions0b849c2
  • FeatureAdded new blog post and gitignored obsidian files.a4f639d

June 2026

  • Featureadd dark/light mode togglecb215b8
  • Featureadd DragonSea MC project67e12fb

May 2026

  • FixFix config027f1a0
  • Featureadd multi-page routing, blog, navigation, and polishb807316

March 2026

  • Featureinitialize Vue 3 project with Vite and Tailwind CSS4a7b321

February 2026

  • ChangeFixed mobile menu broken on terminal page5df6a0e
  • ChangeAdded/Fixed missing translations for chinese, replaced placeholder projects with actual ones7a8547c
  • ChangeAdded interactive terminal and added details about me to the about page :)302692a
  • ChangeDeleted unecessary styles6fa02e8
  • ChangeChanged some translations and styles26272a5
  • ChangeUpdated website to deprecate "#" anchors and instead use the good ol' html redirects, updated page to include chinese and english localesa6f887f
  • ChangeInitial commit for my own website41bc46b

189 commits · index rebuilt 2026-11-12.