<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>devlog</title>
		<description>Changelog and devlog for ewan&apos;s projects.</description>
		<link>https://devlog.croft.click</link>
		<atom:link href="https://devlog.croft.click/rss.xml" rel="self" type="application/rss+xml"/>
		<language>en-gb</language>
		<item>
			<title>SMBC: victory mode tree fully ported, no TODOs left in src</title>
			<description>BridgeCollapse and PlayerVictoryWalk complete the VictoryMode tree; the disassembly port has no remaining TODOs.</description>
			<link>https://devlog.croft.click/2026/10/12/smbc-victory-tree</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/12/smbc-victory-tree</guid>
			<pubDate>Mon, 12 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>6502</category>
			<category>reverse-engineering</category>
		</item>
		<item>
			<title>SMBC: the PPU renderer</title>
			<description>hw/render composes the 256x240 frame from PPU state: background tiles, attribute palettes, scroll, sprites with flips and priority, and the sprite-0 hit.</description>
			<link>https://devlog.croft.click/2026/10/12/smbc-renderer</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/12/smbc-renderer</guid>
			<pubDate>Mon, 12 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>6502</category>
			<category>reverse-engineering</category>
		</item>
		<item>
			<title>SMBC: OAM sprite memory and the $4014 DMA modelled</title>
			<description>The PPU owns real OAM storage now: $2003/$2004 register behaviour and a DMA that copies the sprite page, ordering and all.</description>
			<link>https://devlog.croft.click/2026/10/12/smbc-oam-dma</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/12/smbc-oam-dma</guid>
			<pubDate>Mon, 12 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>6502</category>
			<category>reverse-engineering</category>
		</item>
		<item>
			<title>smbc: movement and offscreen layers</title>
			<description>Ported the object movement primitives, the relative position and offscreen bits layer, and OffscreenBoundsCheck from smb.asm — the ground the enemy runners stand on.</description>
			<link>https://devlog.croft.click/2026/10/11/smbc-movement-and-offscreen</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/11/smbc-movement-and-offscreen</guid>
			<pubDate>Sun, 11 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
			<category>super-mario-bros</category>
		</item>
		<item>
			<title>smbc: frenzy generators</title>
			<description>Ported InitEnemyFrenzy and its five generators from smb.asm — lakitu and spinys, flying cheep-cheeps, bowser&apos;s flame, fireworks, and bullet bills.</description>
			<link>https://devlog.croft.click/2026/10/11/smbc-frenzy-generators</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/11/smbc-frenzy-generators</guid>
			<pubDate>Sun, 11 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
			<category>super-mario-bros</category>
		</item>
		<item>
			<title>SMBC: enemy mover table fully ported</title>
			<description>MovePiranhaPlant, MoveLakitu and MoveFlyingCheepCheep complete the EnemyMovementSubs dispatch table.</description>
			<link>https://devlog.croft.click/2026/10/11/smbc-enemy-movers</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/11/smbc-enemy-movers</guid>
			<pubDate>Sun, 11 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>6502</category>
			<category>reverse-engineering</category>
		</item>
		<item>
			<title>smbc: enemy init routines</title>
			<description>Ported the InitEnemyRoutines jump table from smb.asm — every enemy initialiser from goombas to bowser, plus Setup_Vine and EndFrenzy.</description>
			<link>https://devlog.croft.click/2026/10/11/smbc-enemy-init-routines</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/11/smbc-enemy-init-routines</guid>
			<pubDate>Sun, 11 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
			<category>super-mario-bros</category>
		</item>
		<item>
			<title>SMBC speaks — WriteGameText and the GameText blocks</title>
			<description>The message writer with the lives crown, the LUIGI name patch and the warp zone numbers, un-stubbing three screen tasks</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-write-game-text</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-write-game-text</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC&apos;s VictoryMode is translated</title>
			<description>The victory task tree with SetupVictoryMode, PrintVictoryMessages and PlayerEndWorld — three of the four modes now dispatch in C</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-victory-mode</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-victory-mode</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC&apos;s VRAM buffer writer is translated</title>
			<description>UpdateScreen and WriteBufferToScreen ported to C, with the PPU model gaining a flat VRAM image and the $2006/$2007 data path</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-updatescreen</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-updatescreen</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC&apos;s TitleScreenMode is translated</title>
			<description>GameMenuRoutine, DrawMushroomIcon and DemoEngine ported to C — the title screen menu with its world-select and demo paths</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-title-screen-mode</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-title-screen-mode</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC&apos;s sound engine is translated</title>
			<description>SoundEngine, the SFX handlers and the music sequencer ported to C, with the music data verified byte-for-byte against the donor ROM</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-sound-engine</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-sound-engine</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC gets its project skeleton</title>
			<description>New C port of the Super Mario Bros. disassembly, seeded with the hardware model, RAM map and frame loop under the usual repo conventions</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-skeleton</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-skeleton</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC&apos;s screen task tree runs</title>
			<description>ScreenRoutines — the fourteen tasks behind mode task 1 — with the palette subroutines, status line writers and intermediate displays</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-screen-routines</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-screen-routines</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC grows scenery — RenderSceneryTerrain and its tables</title>
			<description>Background and foreground scenery, terrain render bits, and the block buffer store</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-scenery-terrain</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-scenery-terrain</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC&apos;s reset and NMI spine is translated</title>
			<description>Boot sequence, interrupt handler, joypad serial read, pause, sprite shuffle and memory clear are ported to C, with tests against the disassembly&apos;s semantics</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-reset-nmi-spine</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-reset-nmi-spine</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC draws metatiles — RenderAreaGraphics</title>
			<description>The metatile column renderer with its attribute-bit rotations and name table wrap</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-render-area-graphics</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-render-area-graphics</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC clears its name tables</title>
			<description>InitializeNameTables ported and verified against the donor ROM, plus a proper issue tracker for everything left to translate</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-nametables</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-nametables</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC grows levels — the area data and its resolver</title>
			<description>All 68 object streams extracted and verified against the ROM, plus GetAreaDataAddrs</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-level-data</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-level-data</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC&apos;s GameOverMode is translated</title>
			<description>The game over task tree, TransposePlayers and the area pointer lookup ported to C — the first mode of the execution tree</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-gameover-mode</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-gameover-mode</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>All four SMBC modes now dispatch</title>
			<description>The GameMode skeleton — task tree, GameCoreRoutine&apos;s joypad plumbing and the GameEngine&apos;s translatable tail — completes the mode execution tree&apos;s top level</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-gamemode-skeleton</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-gamemode-skeleton</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC: enemy data interpreter</title>
			<description>EnemiesAndLoopsCore, ProcLoopCommand, ProcessEnemyData and HandleGroupEnemies ported; the init jump table is a pending stub.</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-enemy-data-interpreter</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-enemy-data-interpreter</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>reverse-engineering</category>
		</item>
		<item>
			<title>SMBC reads its cartridge — DrawTitleScreen and CHR reads</title>
			<description>The PPU learns pattern-table reads from a nominated CHR, un-stubbing the title screen data copy</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-chr-reads</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-chr-reads</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC has its graphics data</title>
			<description>The 8KB of CHR pattern tables, the one asset the disassembly omits, extracted from a donor ROM and embedded as C</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-chr</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-chr</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC plans its columns — the AreaParserTaskHandler task tree</title>
			<description>The eight-task parser cycle, column position bookkeeping, and the attribute buffer flush</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-area-parser-tree</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-area-parser-tree</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>SMBC reads level objects — ProcessAreaData and the decoder</title>
			<description>The whole area object decoder in one atom — ProcessAreaData, DecodeAreaData, all forty-odd handlers, and the render tables behind them</description>
			<link>https://devlog.croft.click/2026/10/10/smbc-area-object-decoder</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/10/smbc-area-object-decoder</guid>
			<pubDate>Sat, 10 Oct 2026 12:00:00 GMT</pubDate>
			<category>smbc</category>
			<category>c</category>
			<category>nes</category>
		</item>
		<item>
			<title>The Wii U library links again</title>
			<description>A 64-bit atomic in Wolfram&apos;s DID cache did not link on the Wii U, so Cobalt&apos;s .wuhb build failed once sign-in began resolving DIDs</description>
			<link>https://devlog.croft.click/2026/10/08/wii-u-link-fix</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/08/wii-u-link-fix</guid>
			<pubDate>Thu, 08 Oct 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>cobalt</category>
			<category>wiiu</category>
			<category>bug</category>
		</item>
		<item>
			<title>Sign-in discovery, with a fallback and the clients merged</title>
			<description>Discovery falls back to the typed host when it can&apos;t resolve the account, and the Cobalt, Indigo and Platinum sign-ins now use it</description>
			<link>https://devlog.croft.click/2026/10/08/sign-in-follow-ups</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/08/sign-in-follow-ups</guid>
			<pubDate>Thu, 08 Oct 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>cobalt</category>
			<category>indigo</category>
			<category>platinum</category>
			<category>atproto</category>
		</item>
		<item>
			<title>Indigo&apos;s store codecs share one line reader</title>
			<description>The session and settings codecs read lines the same way now, and a test-only wrapper around file removal is gone</description>
			<link>https://devlog.croft.click/2026/10/08/indigo-store-refactor</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/08/indigo-store-refactor</guid>
			<pubDate>Thu, 08 Oct 2026 12:00:00 GMT</pubDate>
			<category>indigo</category>
			<category>refactor</category>
			<category>3ds</category>
		</item>
		<item>
			<title>Cobalt&apos;s scroll restore and snapshot harness</title>
			<description>Backing out of a followers or following list keeps the profile&apos;s place, and the snapshot harness checks each menu&apos;s state before pressing</description>
			<link>https://devlog.croft.click/2026/10/08/cobalt-scroll-and-snapshot</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/08/cobalt-scroll-and-snapshot</guid>
			<pubDate>Thu, 08 Oct 2026 12:00:00 GMT</pubDate>
			<category>cobalt</category>
			<category>wiiu</category>
			<category>ui</category>
			<category>testing</category>
		</item>
		<item>
			<title>The image pickers read the camera folder</title>
			<description>Indigo and Cobalt list the console&apos;s camera folder alongside their own image folder, through a new Wolfram scanner</description>
			<link>https://devlog.croft.click/2026/10/08/camera-folder-pickers</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/08/camera-folder-pickers</guid>
			<pubDate>Thu, 08 Oct 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>indigo</category>
			<category>cobalt</category>
			<category>3ds</category>
			<category>wiiu</category>
		</item>
		<item>
			<title>Driving Azahar and a test post with the picker</title>
			<description>Azahar ignored synthetic input, so the touch screen was driven through a small local DSU server. A test image post confirmed the picker and the upload path.</description>
			<link>https://devlog.croft.click/2026/10/08/azahar-input-and-a-test-post</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/08/azahar-input-and-a-test-post</guid>
			<pubDate>Thu, 08 Oct 2026 12:00:00 GMT</pubDate>
			<category>indigo</category>
			<category>3ds</category>
			<category>azahar</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Wolfram keeps a video&apos;s poster frame</title>
			<description>wf_post_display and wf_post_embed now carry a video embed&apos;s poster, alt text and aspect ratio, so clients that cannot play video can still draw it</description>
			<link>https://devlog.croft.click/2026/10/07/wolfram-video-poster</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/07/wolfram-video-poster</guid>
			<pubDate>Wed, 07 Oct 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>atproto</category>
			<category>c</category>
			<category>video</category>
		</item>
		<item>
			<title>Profile tabs move into Wolfram</title>
			<description>Replies, media and likes tabs are one Wolfram module now, used by Cobalt and Indigo</description>
			<link>https://devlog.croft.click/2026/10/07/wolfram-profile-tabs</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/07/wolfram-profile-tabs</guid>
			<pubDate>Wed, 07 Oct 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>cobalt</category>
			<category>indigo</category>
			<category>atproto</category>
			<category>c</category>
		</item>
		<item>
			<title>Signing in without typing the PDS</title>
			<description>Wolfram resolves the account&apos;s PDS from its handle, and the clients and bridge sign in there. The service field is no longer needed to start.</description>
			<link>https://devlog.croft.click/2026/10/07/pds-discovery</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/07/pds-discovery</guid>
			<pubDate>Wed, 07 Oct 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>cobalt</category>
			<category>indigo</category>
			<category>platinum</category>
			<category>atproto</category>
		</item>
		<item>
			<title>Indigo&apos;s header hint no longer runs into the post counter</title>
			<description>On the top screen the hint text ran into the counter; it is drawn smaller now, checked in Azahar</description>
			<link>https://devlog.croft.click/2026/10/07/indigo-header-hint-overlap</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/07/indigo-header-hint-overlap</guid>
			<pubDate>Wed, 07 Oct 2026 12:00:00 GMT</pubDate>
			<category>indigo</category>
			<category>3ds</category>
			<category>ui</category>
		</item>
		<item>
			<title>Rewriting main to be linear</title>
			<description>Four repos had merge commits on main from before protection. Their history was rebuilt as one commit per merge, with identical trees.</description>
			<link>https://devlog.croft.click/2026/10/07/history-rewrite-linear-main</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/07/history-rewrite-linear-main</guid>
			<pubDate>Wed, 07 Oct 2026 12:00:00 GMT</pubDate>
			<category>repository</category>
			<category>git</category>
			<category>process</category>
		</item>
		<item>
			<title>Video posters on Cobalt and Indigo</title>
			<description>A video in a post shows its poster frame and a line saying the console cannot play it, decoded at the size it is drawn</description>
			<link>https://devlog.croft.click/2026/10/07/cobalt-indigo-video-poster</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/07/cobalt-indigo-video-poster</guid>
			<pubDate>Wed, 07 Oct 2026 12:00:00 GMT</pubDate>
			<category>cobalt</category>
			<category>indigo</category>
			<category>wiiu</category>
			<category>3ds</category>
			<category>video</category>
		</item>
		<item>
			<title>Wolfram CI retries a stuck package mirror</title>
			<description>A hung apt step kept Wolfram&apos;s main CI running for an hour and blocked the release. Each apt call now has a timeout and three attempts.</description>
			<link>https://devlog.croft.click/2026/10/07/ci-apt-retry</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/07/ci-apt-retry</guid>
			<pubDate>Wed, 07 Oct 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>ci</category>
			<category>infrastructure</category>
		</item>
		<item>
			<title>Indigo paged search results</title>
			<description>Search results grow more pages as you scroll, closing issue</description>
			<link>https://devlog.croft.click/2026/10/04/indigo-search-paging</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/04/indigo-search-paging</guid>
			<pubDate>Sun, 04 Oct 2026 12:00:00 GMT</pubDate>
			<category>indigo</category>
			<category>atproto</category>
			<category>c</category>
			<category>3ds</category>
		</item>
		<item>
			<title>Indigo muted words and hide-reposts</title>
			<description>Port Cobalt&apos;s muted-word and hide-reposts feed filtering to Indigo, closing the last feature parity gap</description>
			<link>https://devlog.croft.click/2026/10/04/indigo-muted-words</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/04/indigo-muted-words</guid>
			<pubDate>Sun, 04 Oct 2026 12:00:00 GMT</pubDate>
			<category>indigo</category>
			<category>atproto</category>
			<category>c</category>
			<category>3ds</category>
		</item>
		<item>
			<title>Cobalt liked-by and reposted-by lists</title>
			<description>The post menu can now show who liked or reposted a post, closing issue</description>
			<link>https://devlog.croft.click/2026/10/04/cobalt-likes-lists</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/04/cobalt-likes-lists</guid>
			<pubDate>Sun, 04 Oct 2026 12:00:00 GMT</pubDate>
			<category>cobalt</category>
			<category>atproto</category>
			<category>c</category>
			<category>wiiu</category>
		</item>
		<item>
			<title>Cobalt full-size image viewer</title>
			<description>The post menu can now open a picture at full size on both screens, closing issue</description>
			<link>https://devlog.croft.click/2026/10/04/cobalt-image-viewer</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/10/04/cobalt-image-viewer</guid>
			<pubDate>Sun, 04 Oct 2026 12:00:00 GMT</pubDate>
			<category>cobalt</category>
			<category>atproto</category>
			<category>c</category>
			<category>wiiu</category>
		</item>
		<item>
			<title>Wolfram 3DS curl transport and hardware-seeded crypto</title>
			<description>Route the 3DS target through the shared libcurl transport and back P-256 signing with the console hardware RNG</description>
			<link>https://devlog.croft.click/2026/09/25/wolfram-3ds-curl-transport</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/25/wolfram-3ds-curl-transport</guid>
			<pubDate>Fri, 25 Sep 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>atproto</category>
			<category>c</category>
			<category>sdk</category>
			<category>3ds</category>
		</item>
		<item>
			<title>ATperson wolfram pin bump and archive auth surface</title>
			<description>Pin to wolfram 50fefa4 and translate WF_ERR_AUTH into a fail-fast error naming the archive token env var</description>
			<link>https://devlog.croft.click/2026/09/25/atperson-wolfram-pin-auth-surface</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/25/atperson-wolfram-pin-auth-surface</guid>
			<pubDate>Fri, 25 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>wolfram</category>
			<category>jetstream</category>
			<category>c</category>
		</item>
		<item>
			<title>ATperson Jetstream kind-7 replay rows</title>
			<description>Backfill blocker found and fixed — the archive decoder rejected create_resync rows and the translate layer dropped them</description>
			<link>https://devlog.croft.click/2026/09/25/atperson-jetstream-kind7</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/25/atperson-jetstream-kind7</guid>
			<pubDate>Fri, 25 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>wolfram</category>
			<category>jetstream</category>
			<category>c</category>
		</item>
		<item>
			<title>ATperson CI OOM fix</title>
			<description>Bound build parallelism to stop hosted-runner OOM kills on the network job</description>
			<link>https://devlog.croft.click/2026/09/25/atperson-ci-oom</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/25/atperson-ci-oom</guid>
			<pubDate>Fri, 25 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>ci</category>
			<category>c</category>
		</item>
		<item>
			<title>ATperson standing authorization envelopes</title>
			<description>Bounded operator pre-approval for outbound actions that composes with the existing gates and never widens policy</description>
			<link>https://devlog.croft.click/2026/09/24/atperson-standing-envelopes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/24/atperson-standing-envelopes</guid>
			<pubDate>Thu, 24 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>autonomy</category>
			<category>security</category>
			<category>c</category>
		</item>
		<item>
			<title>ATperson offline-safe spooled writes</title>
			<description>Every outbound record is spooled before the network call, offline mode defers publishing, and restoring online drains through the same gates</description>
			<link>https://devlog.croft.click/2026/09/24/atperson-offline-spool</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/24/atperson-offline-spool</guid>
			<pubDate>Thu, 24 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>autonomy</category>
			<category>durability</category>
			<category>c</category>
		</item>
		<item>
			<title>ATperson offline sandbox</title>
			<description>A self-contained offline training environment with fixtures and a scenario walkthrough for reproducible atperson runs</description>
			<link>https://devlog.croft.click/2026/09/24/atperson-offline-sandbox</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/24/atperson-offline-sandbox</guid>
			<pubDate>Thu, 24 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>sandbox</category>
			<category>testing</category>
			<category>c</category>
		</item>
		<item>
			<title>ATperson jetstream compression live</title>
			<description>Fix the v2 compress handshake and dictionary URL, rename the project to ATperson, first compressed training runs</description>
			<link>https://devlog.croft.click/2026/09/24/atperson-jetstream-compression-live</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/24/atperson-jetstream-compression-live</guid>
			<pubDate>Thu, 24 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>jetstream</category>
			<category>atproto</category>
			<category>wolfram</category>
			<category>c</category>
		</item>
		<item>
			<title>ATperson supervisor health surface</title>
			<description>The daemon beats a heartbeat every cycle and autonomy health gives a supervisor machine-readable liveness with exit-code semantics</description>
			<link>https://devlog.croft.click/2026/09/24/atperson-health-surface</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/24/atperson-health-surface</guid>
			<pubDate>Thu, 24 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>autonomy</category>
			<category>ops</category>
			<category>c</category>
		</item>
		<item>
			<title>ATperson autonomous scheduler</title>
			<description>Bounded decision-to-execution cycles after perception, composing the existing gate chain without a privileged write path</description>
			<link>https://devlog.croft.click/2026/09/24/atperson-autonomous-scheduler</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/24/atperson-autonomous-scheduler</guid>
			<pubDate>Thu, 24 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>scheduler</category>
			<category>autonomy</category>
			<category>atproto</category>
			<category>cpp</category>
		</item>
		<item>
			<title>ATperson archive replay fixes and wolfram 0.23.x</title>
			<description>Archive host binding, sealed-tip probe and exhaustion signal fixes that unblock the year-back Jetstream backfill</description>
			<link>https://devlog.croft.click/2026/09/24/atperson-archive-replay-fixes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/24/atperson-archive-replay-fixes</guid>
			<pubDate>Thu, 24 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>jetstream</category>
			<category>wolfram</category>
			<category>c</category>
		</item>
		<item>
			<title>atperson jetstream full-speed ingestion</title>
			<description>Drain readable frames in one batch, account max-events across batches, add kinds filter and zstd dictionary compression</description>
			<link>https://devlog.croft.click/2026/09/23/atperson-jetstream-full-speed</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/23/atperson-jetstream-full-speed</guid>
			<pubDate>Wed, 23 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>jetstream</category>
			<category>atproto</category>
			<category>performance</category>
			<category>c</category>
		</item>
		<item>
			<title>atperson v6 fuzz corpus seeds</title>
			<description>Add real v6 snapshots to the fuzzer corpus so coverage starts from valid structure</description>
			<link>https://devlog.croft.click/2026/09/19/atperson-v6-fuzz-seeds</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/19/atperson-v6-fuzz-seeds</guid>
			<pubDate>Sat, 19 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>fuzz</category>
			<category>testing</category>
			<category>c</category>
		</item>
		<item>
			<title>atperson unified internal headers</title>
			<description>Scope-private internal.h headers for persistence, graph, and action scopes, superseding per-atom headers</description>
			<link>https://devlog.croft.click/2026/09/18/atperson-unified-internal-headers</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/18/atperson-unified-internal-headers</guid>
			<pubDate>Fri, 18 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>refactor</category>
			<category>headers</category>
			<category>c</category>
		</item>
		<item>
			<title>atperson persistence layer modularisation</title>
			<description>Consolidate v5/v6 snapshot codecs into scoped atoms, removing underscored compound files</description>
			<link>https://devlog.croft.click/2026/09/18/atperson-persistence-modularise</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/18/atperson-persistence-modularise</guid>
			<pubDate>Fri, 18 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>refactor</category>
			<category>persistence</category>
			<category>c</category>
		</item>
		<item>
			<title>atperson: move C++ runtime modules into scoped directories</title>
			<description>The flat C++23 runtime implementation units and private headers now live under explicit action, ATProto, ingestion, resource, state, and sync scopes.</description>
			<link>https://devlog.croft.click/2026/09/17/runtime-module-scopes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/runtime-module-scopes</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>cpp</category>
			<category>release</category>
		</item>
		<item>
			<title>atperson: experience-derived valence</title>
			<description></description>
			<link>https://devlog.croft.click/2026/09/17/atperson-valence</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/atperson-valence</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c</category>
			<category>issue-13</category>
		</item>
		<item>
			<title>atperson: scope/atom file convention</title>
			<description></description>
			<link>https://devlog.croft.click/2026/09/17/atperson-scope-atom-naming</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/atperson-scope-atom-naming</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c</category>
			<category>refactor</category>
		</item>
		<item>
			<title>atperson: evidence-gated recall</title>
			<description></description>
			<link>https://devlog.croft.click/2026/09/17/atperson-recall-gate</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/atperson-recall-gate</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c</category>
			<category>issue-58</category>
		</item>
		<item>
			<title>atperson: operator controls and approval gates</title>
			<description></description>
			<link>https://devlog.croft.click/2026/09/17/atperson-operator-controls</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/atperson-operator-controls</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>cpp</category>
			<category>runtime</category>
		</item>
		<item>
			<title>atperson: journal map</title>
			<description></description>
			<link>https://devlog.croft.click/2026/09/17/atperson-journal-map</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/atperson-journal-map</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>cpp</category>
			<category>issue-56</category>
		</item>
		<item>
			<title>atperson — scoped private-header atom names</title>
			<description>Shortened redundant scoped private-header names and closed the modularisation issue.</description>
			<link>https://devlog.croft.click/2026/09/17/atperson-header-atoms</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/atperson-header-atoms</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>refactor</category>
			<category>c23</category>
			<category>cpp23</category>
		</item>
		<item>
			<title>atperson — fuzz and property harnesses</title>
			<description>libFuzzer targets for snapshot, ledger, and tokenizer boundaries plus deterministic round-trip property tests.</description>
			<link>https://devlog.croft.click/2026/09/17/atperson-fuzz-property</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/atperson-fuzz-property</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>testing</category>
			<category>fuzzing</category>
			<category>libfuzzer</category>
			<category>c23</category>
		</item>
		<item>
			<title>atperson — deterministic e2e lifecycle harness</title>
			<description>Scripted-feed scenario harness for multi-run lifecycles, crash recovery, withdrawal, and cross-run determinism.</description>
			<link>https://devlog.croft.click/2026/09/17/atperson-e2e-harness</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/atperson-e2e-harness</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>testing</category>
			<category>c23</category>
			<category>cpp23</category>
		</item>
		<item>
			<title>atperson: conversation and reply context</title>
			<description></description>
			<link>https://devlog.croft.click/2026/09/17/atperson-conversation-context</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/atperson-conversation-context</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c</category>
			<category>issue-24</category>
		</item>
		<item>
			<title>atperson: split main.cpp into scoped CLI command atoms</title>
			<description>The 500-line command/runtime composition unit is now process bootstrap and dispatch only, with every command body in a focused atom under src/app/cli/.</description>
			<link>https://devlog.croft.click/2026/09/17/atperson-cli-atoms</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/17/atperson-cli-atoms</guid>
			<pubDate>Thu, 17 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>cpp</category>
			<category>release</category>
		</item>
		<item>
			<title>atperson: split graph.c into single-concern modules</title>
			<description>graph.c (1223 lines, five concerns mashed together) is split into index, store, observe, and query translation units, all under the 500-line modular ceiling.</description>
			<link>https://devlog.croft.click/2026/09/16/graph-modularisation</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/graph-modularisation</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c</category>
			<category>release</category>
		</item>
		<item>
			<title>atperson writer lock and first-run bootstrap</title>
			<description>atperson mutating commands now take an exclusive writer lock on the data directory with automatic stale-lock reclamation (dead pid and reboot detection), and a C23 first-run bootstrap creates ~/.ewanc26/atperson plus a documented .env template (0700/0600) when either is missing. Read-only commands run lock-free with an explicit consistency model. Issue</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-writer-lock-bootstrap</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-writer-lock-bootstrap</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c23</category>
			<category>cpp23</category>
			<category>ci</category>
		</item>
		<item>
			<title>atperson withdrawal and unlearning</title>
			<description>atperson gains ATP_LEDGER_OUTCOME_WITHDRAWN and atperson withdraw — durable, append-only, idempotent exclusion of observations by id, source URI, or author DID. Rebuild produces the state that would have existed without them. Issue #4 closed.</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-withdrawal</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-withdrawal</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c23</category>
			<category>persistence</category>
		</item>
		<item>
			<title>atperson: Unicode tokenization contract</title>
			<description>Token identity is now a schema-versioned contract — NFKC_Casefold equivalence, category boundaries, UTF-8 sanitization — replacing four byte-oriented tokenizer copies.</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-unicode-tokenizer</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-unicode-tokenizer</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c</category>
			<category>release</category>
		</item>
		<item>
			<title>atperson: learning-schema compatibility for replay</title>
			<description>Replay and snapshot load now refuse foreign learning schemas with a dedicated status instead of reinterpreting them.</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-schema-compat</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-schema-compat</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c</category>
			<category>release</category>
		</item>
		<item>
			<title>atperson replayable ledger</title>
			<description>atperson&apos;s observation ledger moves to format v2 — entry records now retain the canonical observation bytes inline, capped at 64 KiB, with digest re-verification on every read. v1 logs migrate on open with patch history flattened to final outcomes. The rebuild-from-ledger model is no longer aspirational. Issue</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-replayable-ledger</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-replayable-ledger</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c23</category>
			<category>persistence</category>
		</item>
		<item>
			<title>atperson portable snapshot format</title>
			<description>atperson snapshots are now a portable binary format — little-endian integers, IEEE 754 floats, framed sections with bounds-checked lengths, skippable unknown tags, and a trailing FNV-1a digest. v4 snapshots migrate on load; v1-v3 are refused. Issue</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-portable-snapshot</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-portable-snapshot</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c23</category>
			<category>cpp23</category>
			<category>ci</category>
		</item>
		<item>
			<title>atperson paginated sync and persistent ingestion cursor</title>
			<description>atperson sync now consumes bounded multi-page timeline catch-ups through Wolfram&apos;s cursor-aware API with a versioned ingestion-state checkpoint at ~/.ewanc26/atperson/ingestion-state.json. The cursor is runtime fetching metadata only — the observation ledger stays the sole authority for what has been learned. Cursor advancement is page-granular (every observation durably processed before checkpointing), rejected cursors reset to the head, and all atperson data now defaults to ~/.ewanc26/atperson/.</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-paginated-sync-ingestion-cursor</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-paginated-sync-ingestion-cursor</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>wolfram</category>
			<category>atproto</category>
			<category>c23</category>
			<category>cpp23</category>
			<category>ci</category>
		</item>
		<item>
			<title>atperson: modular file mandate and ledger split</title>
			<description>AGENTS.md now mandates modular atomic files with an explicit concurrency contract; ledger.c (1670 lines) splits into five single-concern modules.</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-modularisation</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-modularisation</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c</category>
			<category>release</category>
		</item>
		<item>
			<title>atperson explicit ingestion policy</title>
			<description>atperson now runs every fetched timeline record through a reviewable C++ policy layer before it can become an observation. Skip classes carry machine-readable reasons (self-authored, viewer-blocked/-by, viewer-muted, moderation-filtered, empty-text, non-text-only, unsupported-record); replies and reposts are learned and tagged. Policy-skipped items still land in the ledger as SKIPPED so observed-but-not-learned stays distinguishable from never-fetched. Issue</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-ingestion-policy</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-ingestion-policy</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c23</category>
			<category>cpp23</category>
			<category>safety</category>
		</item>
		<item>
			<title>atperson: graph growth bounds</title>
			<description>Node and edge lookup is now O(1) via hash indexes, with configurable resource ceilings that reject whole observations — and a hash clustering fix that cut snapshot load from 1.8s to 16ms.</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-growth-bounds</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-growth-bounds</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c</category>
			<category>release</category>
		</item>
		<item>
			<title>atperson deterministic replay</title>
			<description>atperson gains atp_replay_ledger and an atperson rebuild command — learned state reconstructs from the observation ledger alone, in ledger id order, through the same observe path sync uses. Explicit outcome semantics, atomic snapshot replacement, byte-identical rebuilds. Issue #3 closed.</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-deterministic-replay</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-deterministic-replay</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c23</category>
			<category>persistence</category>
		</item>
		<item>
			<title>atperson: safe ledger compaction</title>
			<description>The observation ledger can now be compacted atomically — patches flatten, withdrawn payloads drop, ids stay stable.</description>
			<link>https://devlog.croft.click/2026/09/16/atperson-compaction</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/16/atperson-compaction</guid>
			<pubDate>Wed, 16 Sep 2026 12:00:00 GMT</pubDate>
			<category>atperson</category>
			<category>c</category>
			<category>release</category>
		</item>
		<item>
			<title>malachite dedup batching — applyWrites deletes instead of one deleteRecord per record</title>
			<description>removeDuplicateRecords in croft-click-core now batches dedup deletions via com.atproto.repo.applyWrites (200 per call, the PDS hard limit) instead of one deleteRecord call per record with a 100ms pacing delay. A few thousand duplicates collapses from thousands of HTTP round-trips to a few dozen. Failed batches fall back to per-record deletes.</description>
			<link>https://devlog.croft.click/2026/09/15/malachite-dedup-batching</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/15/malachite-dedup-batching</guid>
			<pubDate>Tue, 15 Sep 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>malachite</category>
			<category>croft-click-core</category>
			<category>teal</category>
			<category>atproto</category>
			<category>typescript</category>
		</item>
		<item>
			<title>interactive terminal CV at /cv</title>
			<description>Added a content-negotiated /cv route serving the same AT Protocol records as /about — browsers get a styled landing page, curl gets a self-contained interactive bash script. Menu-driven, plain-text fallback when piped, carries the site&apos;s terminal design language.</description>
			<link>https://devlog.croft.click/2026/09/14/interactive-terminal-cv</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/14/interactive-terminal-cv</guid>
			<pubDate>Mon, 14 Sep 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>cv</category>
			<category>terminal</category>
			<category>atproto</category>
			<category>sifa</category>
		</item>
		<item>
			<title>uncramped /about/cv layout</title>
			<description>The CV landing page was too cramped — moved from the narrow shell to the wide shell with the same two-column grid pattern as the about page.</description>
			<link>https://devlog.croft.click/2026/09/14/cv-uncramped</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/14/cv-uncramped</guid>
			<pubDate>Mon, 14 Sep 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>cv</category>
			<category>layout</category>
		</item>
		<item>
			<title>cv landing page moved into the site design system</title>
			<description>The standalone HTML landing page for the terminal CV didn&apos;t match the site — replaced with a real SvelteKit page at /about/cv using shared primitives, with /cv redirecting browsers there.</description>
			<link>https://devlog.croft.click/2026/09/14/cv-landing-design-system</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/14/cv-landing-design-system</guid>
			<pubDate>Mon, 14 Sep 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>cv</category>
			<category>design-system</category>
			<category>sveltekit</category>
		</item>
		<item>
			<title>malachite dedup fixes — timestamp canonicalisation, sync window, duration, and a null-safety crash on legacy records</title>
			<description>A 102,677-record audit of the Teal dataset found 3,395 duplicates with diagnosed root causes. malachite 0.19.6 and croft-click-core 0.3.6 fix the timestamp-format mismatch that defeated dedup (14Z vs 14.000Z), add a 60s sync window, populate duration from Apple Music exports, normalise Unicode in dedup keys, and harden the helpers against legacy records missing musicServiceUri or trackName. malachite.croft.click redeployed.</description>
			<link>https://devlog.croft.click/2026/09/11/malachite-dedup-fixes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/11/malachite-dedup-fixes</guid>
			<pubDate>Fri, 11 Sep 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>malachite</category>
			<category>croft-click-core</category>
			<category>teal</category>
			<category>atproto</category>
			<category>typescript</category>
		</item>
		<item>
			<title>pkgs fixes landing-ui mobile layout, iOS input zoom, and jasper-web&apos;s missing background tokens</title>
			<description>landing-ui gained 16px form inputs to stop iOS focus zoom, reduced-motion support, and tighter small-screen padding. Jasper-web&apos;s import page cards rendered with no background because --bg-secondary and --bg-hover were never defined. Opal-web&apos;s upload step showed a raw file input instead of a drop zone. Bismuth-web&apos;s header overflowed on narrow screens.</description>
			<link>https://devlog.croft.click/2026/09/10/pkgs-landing-ui-mobile-fixes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/09/10/pkgs-landing-ui-mobile-fixes</guid>
			<pubDate>Thu, 10 Sep 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>landing-ui</category>
			<category>jasper-web</category>
			<category>opal-web</category>
			<category>bismuth-web</category>
			<category>design</category>
			<category>mobile</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Inkwell ships v2.4.0 — Kotlin Multiplatform shared core, writer, accessibility, and F-Droid distribution</title>
			<description>From a single-platform iOS app to a Kotlin Multiplatform monorepo with shared core, writer, discover, settings, notifications, legal docs, accessibility, customisation, F-Droid/AltStore publishing, and CI pipelines across iOS and Android. 140+ commits, v2.0.0 to v2.4.0.</description>
			<link>https://devlog.croft.click/2026/08/25/inkwell-kmp-and-v2-release</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/25/inkwell-kmp-and-v2-release</guid>
			<pubDate>Tue, 25 Aug 2026 12:00:00 GMT</pubDate>
			<category>inkwell</category>
			<category>atproto</category>
			<category>ios</category>
			<category>swift</category>
			<category>kotlin</category>
		</item>
		<item>
			<title>MetalBear gains account-cache eviction, durable blob storage, multipart video uploads, and a modular build profile</title>
			<description>Account contexts are now bounded with configurable resident budgets and count-based eviction. Blob payloads persist to disk instead of memory. Video uploads support durable multipart with reservations and lexicon-aligned limits. The frontend shows multipart capability. AppView proxies getUnreadCount. Per-route metrics replaced per-handler ones. A modular build profile (uncommitted) compiles out optional modules for constrained targets.</description>
			<link>https://devlog.croft.click/2026/08/24/metalbear-account-cache-blob-store-video</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/24/metalbear-account-cache-blob-store-video</guid>
			<pubDate>Mon, 24 Aug 2026 12:00:00 GMT</pubDate>
			<category>metalbear</category>
			<category>atproto</category>
			<category>c</category>
			<category>performance</category>
		</item>
		<item>
			<title>pkgs ships 20+ tourmaline charts, fixes malachite&apos;s Apple Music and ListenBrainz pipelines, and migrates to @bsky/sdk</title>
			<description>Tourmaline gained word clouds, bar-chart races, region breakdowns, cumulative charts, dataset explorer, Eddington stats, rank history, anniversaries, and dozens of stat tiles. Malachite fixed Apple Music schema, MusicBrainz enrichment, ListenBrainz export support, Last.fm API fetch, and Spotify/YouTube name fabrication. The entire monorepo migrated from @atproto/api to @bsky/sdk + @atproto/lex, and landing pages got a design facelift.</description>
			<link>https://devlog.croft.click/2026/08/22/pkgs-tourmaline-charts-and-sdk-migration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/22/pkgs-tourmaline-charts-and-sdk-migration</guid>
			<pubDate>Sat, 22 Aug 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>tourmaline</category>
			<category>malachite</category>
			<category>atproto</category>
			<category>typescript</category>
			<category>design</category>
		</item>
		<item>
			<title>Willow gains OAuth, compose, notifications, and thread/profile views</title>
			<description>An iOS AT Protocol client that went from timeline-only to full auth (OAuth + app passwords), post creation with hand-rolled facets, an in-app notification list, and basic thread and profile views in 8 commits.</description>
			<link>https://devlog.croft.click/2026/08/19/willow-auth-compose-notifications</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/19/willow-auth-compose-notifications</guid>
			<pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
			<category>willow</category>
			<category>atproto</category>
			<category>ios</category>
			<category>swift</category>
		</item>
		<item>
			<title>cobalt adds actor search, custom feeds, curated lists, and reply-gating</title>
			<description>A C AT Protocol client gained actor search with typeahead, custom feeds sourced through the timeline&apos;s own storage, browse-only curated list browsing, and reply-gate composition for new posts. 8 commits, ~1800 lines added.</description>
			<link>https://devlog.croft.click/2026/08/19/cobalt-actor-search-custom-feeds</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/19/cobalt-actor-search-custom-feeds</guid>
			<pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate>
			<category>cobalt</category>
			<category>atproto</category>
			<category>c</category>
		</item>
		<item>
			<title>website fixes blog timezone derivation and design-language token compliance</title>
			<description>Blog date URLs now derive from Europe/London timezone instead of UTC, and design-language tokens were brought into compliance with a favicon sync across static assets.</description>
			<link>https://devlog.croft.click/2026/08/18/website-timezone-and-design-fixes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/18/website-timezone-and-design-fixes</guid>
			<pubDate>Tue, 18 Aug 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>design</category>
		</item>
		<item>
			<title>channel-blue adds avatar rendering to the profile screen</title>
			<description>The host-side UI for wolfram drew the user&apos;s avatar on the profile screen, fixed the wolfram build path for cross-compilation, and marked avatar milestones as done on the roadmap.</description>
			<link>https://devlog.croft.click/2026/08/18/channel-blue-avatar-and-roadmap</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/18/channel-blue-avatar-and-roadmap</guid>
			<pubDate>Tue, 18 Aug 2026 12:00:00 GMT</pubDate>
			<category>channel-blue</category>
			<category>wolfram</category>
			<category>atproto</category>
			<category>c</category>
		</item>
		<item>
			<title>Vercel CLI reconnected and every project relinked to the current team</title>
			<description>The local Vercel CLI wasn&apos;t even installed, and most existing project links pointed at an old, now-nonexistent team. Ten projects were relinked or freshly linked to ewanc26&apos;s projects, two orphaned links got brand-new projects instead, and the pkgs root build was disabled since it has no deployable output.</description>
			<link>https://devlog.croft.click/2026/08/13/vercel-cli-project-relinking</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/13/vercel-cli-project-relinking</guid>
			<pubDate>Thu, 13 Aug 2026 12:00:00 GMT</pubDate>
			<category>vercel</category>
			<category>tooling</category>
			<category>infrastructure</category>
		</item>
		<item>
			<title>MetalBear gets a local dev instance and fixes its own did:web self-resolution</title>
			<description>Standing up a real localhost-only PDS surfaced two bugs -- did:web never resolved its own DID document when the DID encoded a port, and account creation had no way to avoid minting a real did:plc on the live PLC directory. Both fixed. 0.39.0 to 0.39.1.</description>
			<link>https://devlog.croft.click/2026/08/13/metalbear-local-dev-instances</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/13/metalbear-local-dev-instances</guid>
			<pubDate>Thu, 13 Aug 2026 12:00:00 GMT</pubDate>
			<category>metalbear</category>
			<category>atproto</category>
			<category>pds</category>
			<category>c</category>
			<category>tooling</category>
		</item>
		<item>
			<title>malachite gains a polish migration subtool</title>
			<description>A new -m polish mode (and matching web wizard card) backfills legacy fm.teal.alpha.feed.play scrobbles into production fm.teal.feed.play, preserving rkeys, then removes the legacy copies after each backfill succeeds. The migration logic is shared through croft-click-core.</description>
			<link>https://devlog.croft.click/2026/08/13/malachite-polish-migration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/13/malachite-polish-migration</guid>
			<pubDate>Thu, 13 Aug 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>malachite</category>
			<category>malachite-web</category>
			<category>croft-click-core</category>
			<category>atproto</category>
		</item>
		<item>
			<title>New project — keepsake, a text RPG whose save file is your AT Protocol DID</title>
			<description>A C++23 text adventure where signing in makes your own PDS the save file — character sheet, quest progress, verifiable achievements, and a firehose-fed shared world, built in under a day.</description>
			<link>https://devlog.croft.click/2026/08/13/keepsake-new-project</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/13/keepsake-new-project</guid>
			<pubDate>Thu, 13 Aug 2026 12:00:00 GMT</pubDate>
			<category>keepsake</category>
			<category>atproto</category>
			<category>cpp</category>
			<category>wolfram</category>
			<category>bluesky</category>
		</item>
		<item>
			<title>wolfram closes a DPoP sender-constraint bypass and hardens identity resolution</title>
			<description>A DPoP-bound OAuth token could be silently rebound to an attacker&apos;s key when it had no cnf.jkt at issuance; fixed alongside a fail-open handle-verification bug, response-body leaks on every failed DID fetch, unbounded network waits, and new PLC/DID APIs.</description>
			<link>https://devlog.croft.click/2026/08/12/wolfram-protocol-correctness</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/12/wolfram-protocol-correctness</guid>
			<pubDate>Wed, 12 Aug 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>atproto</category>
			<category>c</category>
			<category>sdk</category>
		</item>
		<item>
			<title>wolfram&apos;s server goes multithreaded, and the Wii build gets un-broken</title>
			<description>The XRPC server picked up a real thread pool and an async client SDK, rate limiting and per-route auth policies got finished off, and a spliced function signature that silently broke the Wii/Wii U cross-build for a week got found and fixed.</description>
			<link>https://devlog.croft.click/2026/08/12/wolfram-embedded-targets</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/12/wolfram-embedded-targets</guid>
			<pubDate>Wed, 12 Aug 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>atproto</category>
			<category>c</category>
			<category>sdk</category>
			<category>wii</category>
		</item>
		<item>
			<title>wolfram&apos;s CLI becomes a real AT Protocol client, and the agent layer sheds its stubs</title>
			<description>wolf grew from a ~45-command demo into a full-coverage client with 14 focused modules, gained a PDSls-style browse/identity/plc-log trio, and several agent-level &quot;honest stubs&quot; got real implementations.</description>
			<link>https://devlog.croft.click/2026/08/12/wolfram-cli-and-agent-growth</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/12/wolfram-cli-and-agent-growth</guid>
			<pubDate>Wed, 12 Aug 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>atproto</category>
			<category>c</category>
			<category>sdk</category>
		</item>
		<item>
			<title>MetalBear closes its reference-parity gap on server, admin, and repo writes</title>
			<description>A sustained audit against the reference PDS fixed admin field gaps, repo write-path error codes, blob and repo store concurrency bugs, and split a sprawling server.c into domain-scoped files. 0.7.0 to 0.39.0.</description>
			<link>https://devlog.croft.click/2026/08/12/metalbear-server-admin-parity</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/12/metalbear-server-admin-parity</guid>
			<pubDate>Wed, 12 Aug 2026 12:00:00 GMT</pubDate>
			<category>metalbear</category>
			<category>atproto</category>
			<category>pds</category>
			<category>c</category>
			<category>moderation</category>
		</item>
		<item>
			<title>MetalBear hardens OAuth, session scopes, and identity against the reference PDS</title>
			<description>An unauthenticated login_hint could mint an OAuth code for any account, app passwords and full-access OAuth grants could reach account-deletion and email-change endpoints, and DPoP was optional everywhere it mattered -- all closed, alongside a run of PLC identity bugs and a new WebAuthn/passkey login path. 0.7.0 to 0.38.2.</description>
			<link>https://devlog.croft.click/2026/08/12/metalbear-oauth-identity-hardening</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/12/metalbear-oauth-identity-hardening</guid>
			<pubDate>Wed, 12 Aug 2026 12:00:00 GMT</pubDate>
			<category>metalbear</category>
			<category>atproto</category>
			<category>pds</category>
			<category>c</category>
			<category>oauth</category>
		</item>
		<item>
			<title>MetalBear&apos;s frontend becomes a self-service console, and CI starts testing the containers it ships</title>
			<description>The frontend grew from bare login/OAuth-consent pages into a full account console -- passkeys, password/email/handle changes, data export, guided migration, an admin dashboard -- while a separate thread found the shipped Docker image had never actually been able to start, and fixed the release pipeline that let that ship three times. 0.7.0 to 0.38.2.</description>
			<link>https://devlog.croft.click/2026/08/12/metalbear-frontend-and-release-engineering</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/12/metalbear-frontend-and-release-engineering</guid>
			<pubDate>Wed, 12 Aug 2026 12:00:00 GMT</pubDate>
			<category>metalbear</category>
			<category>atproto</category>
			<category>pds</category>
			<category>c</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Inkwell reaches standard.horse content parity and ships on AltStore</title>
			<description>Since launch, inkwell added pub.leaflet.comment support, all 18 Leaflet block types, Constellation-backed cross-repo discovery, and fixed PDS resolution for DIDs — then shipped a real AltStore sideloading source with a signed IPA.</description>
			<link>https://devlog.croft.click/2026/08/12/inkwell-altstore-distribution</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/12/inkwell-altstore-distribution</guid>
			<pubDate>Wed, 12 Aug 2026 12:00:00 GMT</pubDate>
			<category>inkwell</category>
			<category>atproto</category>
			<category>ios</category>
			<category>swift</category>
		</item>
		<item>
			<title>docsite moves to a card-based layout and puts GitHub Sponsors in the sidebar</title>
			<description>The sidebar no longer tries to list all 77+ docs, the homepage and projects index became searchable card grids, and GitHub Sponsors got promoted from a footer link to a sidebar button. Eight previously-undocumented repos were added.</description>
			<link>https://devlog.croft.click/2026/08/12/docsite-card-redesign</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/12/docsite-card-redesign</guid>
			<pubDate>Wed, 12 Aug 2026 12:00:00 GMT</pubDate>
			<category>docsite</category>
			<category>svelte</category>
			<category>documentation</category>
		</item>
		<item>
			<title>pkgs adds ListenBrainz support and consolidates its tools onto croft-click-core</title>
			<description>Malachite and its web frontend gained a ListenBrainz import mode, tourmaline switched to CAR-export scrobble fetching and hardened its server routes, pds-landing got a live activity feed, and every write-capable tool now shares one ~/.ewanc26 state directory.</description>
			<link>https://devlog.croft.click/2026/08/11/pkgs-shared-core-consolidation</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/11/pkgs-shared-core-consolidation</guid>
			<pubDate>Tue, 11 Aug 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>croft-click</category>
			<category>malachite</category>
			<category>tourmaline</category>
			<category>pds-landing</category>
			<category>atproto</category>
		</item>
		<item>
			<title>cobalt goes from network scaffold to a working client, timeline through moderation</title>
			<description>Sign-in against a real PDS surfaced that curl&apos;s own TLS handshake shared the Wii U&apos;s broken entropy source, not just Wolfram&apos;s signing. From there the timeline, threads, composing, notifications, profiles, avatars, images, and mute/block landed across nine feature commits, none of it yet run on hardware.</description>
			<link>https://devlog.croft.click/2026/08/11/cobalt-timeline-to-moderation</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/11/cobalt-timeline-to-moderation</guid>
			<pubDate>Tue, 11 Aug 2026 12:00:00 GMT</pubDate>
			<category>cobalt</category>
			<category>wiiu</category>
			<category>bluesky</category>
			<category>homebrew</category>
		</item>
		<item>
			<title>Selenium gets full C keyword coverage, do-while, goto, sizeof, and strict C99 output</title>
			<description>The Selenium-to-C compiler now reserves every standard C keyword, adds do-while/goto/sizeof syntax, and tightens its generated C to compile cleanly under strict C99.</description>
			<link>https://devlog.croft.click/2026/08/10/selenium-c-keyword-coverage</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/10/selenium-c-keyword-coverage</guid>
			<pubDate>Mon, 10 Aug 2026 12:00:00 GMT</pubDate>
			<category>selenium</category>
			<category>language-design</category>
			<category>compilers</category>
			<category>c</category>
		</item>
		<item>
			<title>New project — plainspeak, an esoteric language with English sentence grammar</title>
			<description>A deterministic, non-ML esolang whose syntax is a constrained subset of English, compiling through a C++20 frontend to portable C99 and then a native binary via the system C compiler.</description>
			<link>https://devlog.croft.click/2026/08/10/plainspeak-new-project</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/10/plainspeak-new-project</guid>
			<pubDate>Mon, 10 Aug 2026 12:00:00 GMT</pubDate>
			<category>plainspeak</category>
			<category>esolang</category>
			<category>compilers</category>
			<category>c</category>
			<category>cpp</category>
		</item>
		<item>
			<title>Canonical ATProto backlinks, a security pass, and a two-month editorial refit</title>
			<description>Blog posts now render real backlinks from Constellation, remote AT Protocol URLs are sanitized against javascript:/data: injection, and the homepage/about/blog templates went through a long editorial and accessibility pass. Plus a Zcash address added then removed, a PGP key, and the AGPL.</description>
			<link>https://devlog.croft.click/2026/08/09/website-backlinks-and-editorial-pass</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/09/website-backlinks-and-editorial-pass</guid>
			<pubDate>Sun, 09 Aug 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>atproto</category>
			<category>sveltekit</category>
			<category>security</category>
		</item>
		<item>
			<title>nix config hardening, PGP-only secrets, and a Mac defaults resync</title>
			<description>A month-old syntax error that had silently broken the server evaluation got caught by a new CI check, which led to a broader pass -- PGP as the sole secrets recipient, gatekeeper actually running, and a full resync of installed apps, dock, and macOS defaults to match the real machine.</description>
			<link>https://devlog.croft.click/2026/08/08/nix-config-hardening-and-mac-sync</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/08/nix-config-hardening-and-mac-sync</guid>
			<pubDate>Sat, 08 Aug 2026 12:00:00 GMT</pubDate>
			<category>nix</category>
			<category>infra</category>
			<category>macos</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Isolith fixes a batch of bugs filed after the July release</title>
			<description>A single triage pass closes out issues across settings persistence, camera zoom performance, sync error handling, generation fairness, and UI state, verified against the existing smoke test.</description>
			<link>https://devlog.croft.click/2026/08/05/isolith-issue-triage-fixes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/05/isolith-issue-triage-fixes</guid>
			<pubDate>Wed, 05 Aug 2026 12:00:00 GMT</pubDate>
			<category>isolith</category>
			<category>godot</category>
			<category>csharp</category>
			<category>game</category>
		</item>
		<item>
			<title>New project — Willow, a native SwiftUI Bluesky client</title>
			<description>A native SwiftUI Bluesky/AT Protocol client for iOS and macOS from one shared codebase, built on ATProtoKit, with app-password login, a read-only timeline with embeds, and like/repost support landing next.</description>
			<link>https://devlog.croft.click/2026/08/04/willow-new-project</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/04/willow-new-project</guid>
			<pubDate>Tue, 04 Aug 2026 12:00:00 GMT</pubDate>
			<category>willow</category>
			<category>atproto</category>
			<category>bluesky</category>
			<category>ios</category>
			<category>macos</category>
			<category>swift</category>
		</item>
		<item>
			<title>New project — a Godot 4 C#/Mono RPG starter template</title>
			<description>A from-scratch top-down RPG scaffold for Godot 4.7&apos;s .NET build, built because no existing template combined Godot-Mono with an RPG-specific structure.</description>
			<link>https://devlog.croft.click/2026/08/04/rpg-new-project</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/04/rpg-new-project</guid>
			<pubDate>Tue, 04 Aug 2026 12:00:00 GMT</pubDate>
			<category>rpg</category>
			<category>godot</category>
			<category>csharp</category>
			<category>game</category>
			<category>template</category>
		</item>
		<item>
			<title>experai gets machine-readable output, opencode/MCP integration, and AT Protocol weight publishing</title>
			<description>The CLI now supports --json and --support for scripting and tooling, an opencode plugin and stdio MCP server expose it as agent tools, and a new publish-weight command writes trained checkpoints to a PDS as chunked blobs.</description>
			<link>https://devlog.croft.click/2026/08/04/experai-tooling-integration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/04/experai-tooling-integration</guid>
			<pubDate>Tue, 04 Aug 2026 12:00:00 GMT</pubDate>
			<category>experai</category>
			<category>rust</category>
			<category>machine-learning</category>
			<category>atproto</category>
			<category>opencode</category>
			<category>mcp</category>
		</item>
		<item>
			<title>New project — bluesky-dadaist, a markov-chain oracle bot for Bluesky</title>
			<description>A C23 bot that builds a live word-level markov chain from the AT Protocol firehose and replies to mentions with surreal &quot;oracle&quot; text, presented as mystical AI but actually a statistical collage of real posts.</description>
			<link>https://devlog.croft.click/2026/08/03/bluesky-dadaist-new-project</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/03/bluesky-dadaist-new-project</guid>
			<pubDate>Mon, 03 Aug 2026 12:00:00 GMT</pubDate>
			<category>bluesky-dadaist</category>
			<category>atproto</category>
			<category>bots</category>
			<category>c</category>
		</item>
		<item>
			<title>New project — auto-sponsor-links, a monthly sponsor-badge PR bot</title>
			<description>A GitHub Actions workflow that scans all of an account&apos;s non-fork, non-archived repositories for missing Ko-fi/GitHub Sponsors badges and opens a PR to add them, shaken out over three same-day bugfix commits.</description>
			<link>https://devlog.croft.click/2026/08/01/auto-sponsor-links-new-project</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/08/01/auto-sponsor-links-new-project</guid>
			<pubDate>Sat, 01 Aug 2026 12:00:00 GMT</pubDate>
			<category>auto-sponsor-links</category>
			<category>github-actions</category>
			<category>automation</category>
			<category>tooling</category>
		</item>
		<item>
			<title>New project — Isolith, an isometric platformer with an adaptive endless mode</title>
			<description>A Godot 4/C# isometric platformer whose endless mode reads exactly how the player&apos;s last section went and reshapes the next one, with an optional AT Protocol stat-sync side feature.</description>
			<link>https://devlog.croft.click/2026/07/30/isolith-new-project</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/30/isolith-new-project</guid>
			<pubDate>Thu, 30 Jul 2026 12:00:00 GMT</pubDate>
			<category>isolith</category>
			<category>godot</category>
			<category>csharp</category>
			<category>game</category>
		</item>
		<item>
			<title>wolfram grows a multi-tenant resolver, sheds storage, and builds for Wii U</title>
			<description>wolfram added a per-request repo/blob resolver for multi-tenant PDS use, moved storage ownership to MetalBear, hardened did:plc against the real PLC directory, and cross-compiles its XRPC server for Wii U.</description>
			<link>https://devlog.croft.click/2026/07/29/wolfram-multi-tenant-and-wiiu-server</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/29/wolfram-multi-tenant-and-wiiu-server</guid>
			<pubDate>Wed, 29 Jul 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>atproto</category>
			<category>c</category>
			<category>sdk</category>
		</item>
		<item>
			<title>website-comm-template unbreaks install and closes a header-injection hole</title>
			<description>Fixed a broken pnpm install and a no-op Prettier config, then shipped real SEO routes and fixed an email header-injection and unsafe social-link bug in the contact form.</description>
			<link>https://devlog.croft.click/2026/07/28/website-comm-template-hardening</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/28/website-comm-template-hardening</guid>
			<pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
			<category>website-comm-template</category>
			<category>tooling</category>
			<category>security</category>
			<category>a11y</category>
		</item>
		<item>
			<title>pds-status-tophhie fixes its install and types its remote responses</title>
			<description>Unbroke a pnpm install, replaced the untouched scaffold README with a real one, and typed the remote PDS responses instead of trusting them as any.</description>
			<link>https://devlog.croft.click/2026/07/28/pds-status-tophhie-hardening</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/28/pds-status-tophhie-hardening</guid>
			<pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
			<category>pds-status-tophhie</category>
			<category>tooling</category>
			<category>security</category>
		</item>
		<item>
			<title>MetalBear goes from single-account prototype to a federating PDS</title>
			<description>MetalBear rebuilt its account model twice, migrated storage off wolfram, validated records against the lexicon corpus, and is now crawled by Bluesky&apos;s relays and indexed by the AppView. 0.2.0 to 0.7.0.</description>
			<link>https://devlog.croft.click/2026/07/28/metalbear-federates</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/28/metalbear-federates</guid>
			<pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
			<category>metalbear</category>
			<category>atproto</category>
			<category>pds</category>
			<category>c</category>
			<category>federation</category>
		</item>
		<item>
			<title>linkat-directory sanitizes untrusted AT Protocol data before rendering it</title>
			<description>Board-card URLs, avatar/banner URLs, and PDS-resolver endpoints were previously rendered or used with no validation at all. All three are now checked before use, alongside a broken-metadata fix and a broken install.</description>
			<link>https://devlog.croft.click/2026/07/28/linkat-directory-sanitizes-remote-data</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/28/linkat-directory-sanitizes-remote-data</guid>
			<pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
			<category>linkat-directory</category>
			<category>atproto</category>
			<category>security</category>
		</item>
		<item>
			<title>inkwell-website fixes its sitemap, focus handling, and token-storage claim</title>
			<description>Corrected a robots.txt still pointing at the old domain, fixed mobile-drawer focus loss, restored stripped list markers, and corrected the privacy policy to mention Android&apos;s storage alongside iOS Keychain.</description>
			<link>https://devlog.croft.click/2026/07/28/inkwell-website-seo-and-storage-docs</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/28/inkwell-website-seo-and-storage-docs</guid>
			<pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
			<category>inkwell-website</category>
			<category>seo</category>
			<category>accessibility</category>
		</item>
		<item>
			<title>Hasharium adds a second generator rendition and collector discovery</title>
			<description>A new hash-seeded generator variant joins the original as a selectable rendition, verified collector discovery surfaces who else collected a specimen, and a SEO/accessibility pass closes out the window.</description>
			<link>https://devlog.croft.click/2026/07/28/hasharium-rendition-v2-and-collector-discovery</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/28/hasharium-rendition-v2-and-collector-discovery</guid>
			<pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
			<category>hasharium</category>
			<category>atproto</category>
			<category>generative</category>
		</item>
		<item>
			<title>faol-website fixes a broken table of contents and adds crawlability</title>
			<description>The table of contents now reads anchor IDs off the rendered tree instead of recomputing them, the memory page distinguishes a failed fetch from an empty history, and robots.txt/sitemap.xml shipped for the first time.</description>
			<link>https://devlog.croft.click/2026/07/28/faol-website-seo-and-toc-fix</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/28/faol-website-seo-and-toc-fix</guid>
			<pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
			<category>faol-website</category>
			<category>seo</category>
			<category>accessibility</category>
		</item>
		<item>
			<title>docsite ships real SEO and 17 new project pages in one pass</title>
			<description>A sitemap, favicon, and layout-owned metadata replaced per-page duplication that was advertising the homepage&apos;s description to every crawler, alongside 17 new or updated documentation pages.</description>
			<link>https://devlog.croft.click/2026/07/28/docsite-seo-and-17-new-docs</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/28/docsite-seo-and-17-new-docs</guid>
			<pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
			<category>docsite</category>
			<category>seo</category>
			<category>documentation</category>
		</item>
		<item>
			<title>devlog fixes its own toolchain and ships a sitemap</title>
			<description>Unbroke pnpm install and type-checking, added robots.txt/sitemap.xml and canonical URLs, fixed the same duplicate-ToC-anchor bug as docsite, and pinned dependencies after a floating &quot;latest&quot; broke a sibling repo.</description>
			<link>https://devlog.croft.click/2026/07/28/devlog-seo-and-toolchain-fixes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/28/devlog-seo-and-toolchain-fixes</guid>
			<pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
			<category>devlog</category>
			<category>tooling</category>
			<category>seo</category>
		</item>
		<item>
			<title>atproto-shortlink closes an open-redirect and header-injection hole</title>
			<description>Redirect targets sourced from remote blue.linkat.board records were never validated. They&apos;re now checked before use, alongside a broken install, a favicon that never resolved, and a run of accessibility fixes.</description>
			<link>https://devlog.croft.click/2026/07/28/atproto-shortlink-closes-open-redirect</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/28/atproto-shortlink-closes-open-redirect</guid>
			<pubDate>Tue, 28 Jul 2026 12:00:00 GMT</pubDate>
			<category>atproto-shortlink</category>
			<category>atproto</category>
			<category>security</category>
		</item>
		<item>
			<title>pkgs moves toolkit-usage tracking server-side and stops hardcoding pds-landing</title>
			<description>croft-click now aggregates toolkit usage across the whole network instead of trusting client-side writes from each tool, and pds-landing&apos;s components resolve their hostname at runtime instead of assuming one domain.</description>
			<link>https://devlog.croft.click/2026/07/27/pkgs-toolkit-usage-aggregation</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/27/pkgs-toolkit-usage-aggregation</guid>
			<pubDate>Mon, 27 Jul 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>croft-click</category>
			<category>pds-landing</category>
			<category>atproto</category>
		</item>
		<item>
			<title>New project — experai, an LLM training toolkit that refuses to swap</title>
			<description>A Rust LLM training toolkit on Candle with hardware-aware auto-tuning, AT Protocol data sources, and a memory governor that throttles training rather than let the OS dip into swap.</description>
			<link>https://devlog.croft.click/2026/07/27/experai-new-project</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/27/experai-new-project</guid>
			<pubDate>Mon, 27 Jul 2026 12:00:00 GMT</pubDate>
			<category>experai</category>
			<category>rust</category>
			<category>machine-learning</category>
			<category>atproto</category>
		</item>
		<item>
			<title>New project — cobalt, a native Bluesky client for Wii U</title>
			<description>A native SDL2 Bluesky/AT Protocol client for the Wii U&apos;s Aroma homebrew environment, an alternative to the console&apos;s WebKit browser and a spiritual successor to the stalled Wii client.</description>
			<link>https://devlog.croft.click/2026/07/25/cobalt-new-project</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/25/cobalt-new-project</guid>
			<pubDate>Sat, 25 Jul 2026 12:00:00 GMT</pubDate>
			<category>cobalt</category>
			<category>wiiu</category>
			<category>bluesky</category>
			<category>homebrew</category>
		</item>
		<item>
			<title>Documentation and agent-guidance audit across the fleet</title>
			<description>Added or corrected AGENTS.md agent guidance in 49 repositories and fixed AT Protocol trademark/naming wording in 10, after a full source audit.</description>
			<link>https://devlog.croft.click/2026/07/16/fleet-agent-guidance-audit</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/16/fleet-agent-guidance-audit</guid>
			<pubDate>Thu, 16 Jul 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
			<category>maintenance</category>
			<category>agent</category>
			<category>documentation</category>
		</item>
		<item>
			<title>channel-blue MVP Wii Bluesky client lands</title>
			<description>The Wii (GX) Bluesky client reached MVP with timeline, compose, threads, search, notifications, profile, avatars, secure HTTPS, and controller input.</description>
			<link>https://devlog.croft.click/2026/07/12/channel-blue-mvp</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/12/channel-blue-mvp</guid>
			<pubDate>Sun, 12 Jul 2026 12:00:00 GMT</pubDate>
			<category>channel-blue</category>
			<category>wii</category>
			<category>bluesky</category>
			<category>game</category>
		</item>
		<item>
			<title>atproto-mcp-server goes from a 6-tool skeleton to a working MCP server</title>
			<description>Rewrote the server to expose 9 public tools plus 7 authenticated ones (posting, deleting, following, liking), with real argument validation and auth-gating. Bumped to 2.1.0.</description>
			<link>https://devlog.croft.click/2026/07/12/atproto-mcp-server-goes-functional</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/12/atproto-mcp-server-goes-functional</guid>
			<pubDate>Sun, 12 Jul 2026 12:00:00 GMT</pubDate>
			<category>atproto-mcp-server</category>
			<category>mcp</category>
			<category>atproto</category>
		</item>
		<item>
			<title>ATProto MCP server is now functional</title>
			<description>The ATProto MCP server was wired into a working state with public and authenticated Bluesky tools, tests, and docs.</description>
			<link>https://devlog.croft.click/2026/07/12/atproto-mcp-server-functional</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/12/atproto-mcp-server-functional</guid>
			<pubDate>Sun, 12 Jul 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>mcp</category>
			<category>tooling</category>
			<category>ai</category>
		</item>
		<item>
			<title>wolfram reaches broad AT Protocol lexicon parity</title>
			<description>The C11 AT Protocol SDK gained near-complete typed wrappers, an XRPC server, OAuth/DPoP verification, language bindings, and console-platform ports.</description>
			<link>https://devlog.croft.click/2026/07/11/wolfram-lexicon-parity</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/11/wolfram-lexicon-parity</guid>
			<pubDate>Sat, 11 Jul 2026 12:00:00 GMT</pubDate>
			<category>wolfram</category>
			<category>atproto</category>
			<category>c</category>
			<category>sdk</category>
		</item>
		<item>
			<title>ewanc26 profile refresh</title>
			<description>The GitHub profile README gained streak, activity, and AT Protocol stats badges, and wolfram was added to the stack.</description>
			<link>https://devlog.croft.click/2026/07/10/ewanc26-profile-refresh</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/10/ewanc26-profile-refresh</guid>
			<pubDate>Fri, 10 Jul 2026 12:00:00 GMT</pubDate>
			<category>ewanc26</category>
			<category>profile</category>
			<category>website</category>
		</item>
		<item>
			<title>StandardBooks plugin scaffolded</title>
			<description>Initial commit of StandardBooks, a new PaperMC plugin.</description>
			<link>https://devlog.croft.click/2026/07/09/standardbooks-scaffold</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/09/standardbooks-scaffold</guid>
			<pubDate>Thu, 09 Jul 2026 12:00:00 GMT</pubDate>
			<category>standardbooks</category>
			<category>minecraft</category>
			<category>plugin</category>
		</item>
		<item>
			<title>Chronicler v1.8.x — LLM newspaper generator and issue backfill</title>
			<description>Chronicler shipped v1.8.2 with a configurable LLM newspaper generator, server-log issue backfill, and an AGPL license.</description>
			<link>https://devlog.croft.click/2026/07/04/chronicler-v1.8-llm-newspaper</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/04/chronicler-v1.8-llm-newspaper</guid>
			<pubDate>Sat, 04 Jul 2026 12:00:00 GMT</pubDate>
			<category>chronicler</category>
			<category>minecraft</category>
			<category>ai</category>
		</item>
		<item>
			<title>minefetch v1.2.1 — release checker and on-demand refresh</title>
			<description>The Minefetch Paper plugin added a GitHub release update checker, cross-platform host support, and on-demand sysinfo refresh.</description>
			<link>https://devlog.croft.click/2026/07/03/minefetch-v1.2.1-release-checker</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/03/minefetch-v1.2.1-release-checker</guid>
			<pubDate>Fri, 03 Jul 2026 12:00:00 GMT</pubDate>
			<category>minefetch</category>
			<category>minecraft</category>
			<category>tooling</category>
		</item>
		<item>
			<title>mc-server on-demand sysinfo via bundled minefetch watcher</title>
			<description>The Minecraft server now refreshes host sysinfo on demand using a bundled minefetch watcher and a configurable path.</description>
			<link>https://devlog.croft.click/2026/07/03/mc-server-ondemand-sysinfo</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/03/mc-server-ondemand-sysinfo</guid>
			<pubDate>Fri, 03 Jul 2026 12:00:00 GMT</pubDate>
			<category>mc-server</category>
			<category>minecraft</category>
			<category>minefetch</category>
		</item>
		<item>
			<title>letta-coding-agent project survey refresh</title>
			<description>Updated the letta-coding-agent project survey from the local Git workspace.</description>
			<link>https://devlog.croft.click/2026/07/03/letta-coding-agent-survey</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/03/letta-coding-agent-survey</guid>
			<pubDate>Fri, 03 Jul 2026 12:00:00 GMT</pubDate>
			<category>letta-coding-agent</category>
			<category>agent</category>
			<category>survey</category>
		</item>
		<item>
			<title>socialsync publishes v0.8.0-Paper, adds GitHub release checker</title>
			<description>socialsync v0.8.0-Paper adds GitHub release checker and AT Protocol collection IDs</description>
			<link>https://devlog.croft.click/2026/07/02/socialsync-publishes-v0.8.0-paper-with-github-release-checker</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/02/socialsync-publishes-v0.8.0-paper-with-github-release-checker</guid>
			<pubDate>Thu, 02 Jul 2026 12:00:00 GMT</pubDate>
			<category>socialsync</category>
			<category>releases</category>
			<category>atproto</category>
		</item>
		<item>
			<title>mc-server and minefetch add cross-platform host support</title>
			<description>mc-server and minefetch add cross-platform host support with PowerShell file watcher</description>
			<link>https://devlog.croft.click/2026/07/02/mc-server-and-minefetch-add-cross-platform-host-support</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/02/mc-server-and-minefetch-add-cross-platform-host-support</guid>
			<pubDate>Thu, 02 Jul 2026 12:00:00 GMT</pubDate>
			<category>mc-server</category>
			<category>minefetch</category>
			<category>tooling</category>
		</item>
		<item>
			<title>DayAnnouncer adds bStatsShadow plugin for build stability</title>
			<description>DayAnnouncer add bStatsShadow plugin to prevent build conflicts</description>
			<link>https://devlog.croft.click/2026/07/02/dayannouncer-adds-bstatsshadow-plugin-for-build-stability</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/02/dayannouncer-adds-bstatsshadow-plugin-for-build-stability</guid>
			<pubDate>Thu, 02 Jul 2026 12:00:00 GMT</pubDate>
			<category>dayannouncer</category>
			<category>build</category>
		</item>
		<item>
			<title>Chronicler publishes v1.7.0, adds comprehensive issue tracking</title>
			<description>Chronicler 1.7.0 adds comprehensive issue tracking with Paper plugin compatibility fixes and activity tracking</description>
			<link>https://devlog.croft.click/2026/07/02/chronicler-publishes-v1.7.0-with-comprehensive-issue-tracking</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/02/chronicler-publishes-v1.7.0-with-comprehensive-issue-tracking</guid>
			<pubDate>Thu, 02 Jul 2026 12:00:00 GMT</pubDate>
			<category>chronicler</category>
			<category>releases</category>
		</item>
		<item>
			<title>add project survey updates</title>
			<description>Update project surveys for ewanc26 and letta-coding-agent</description>
			<link>https://devlog.croft.click/2026/07/02/add-project-survey-updates</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/07/02/add-project-survey-updates</guid>
			<pubDate>Thu, 02 Jul 2026 12:00:00 GMT</pubDate>
			<category>project</category>
			<category>maintenance</category>
		</item>
		<item>
			<title>Tagging 48 repositories with full semver history</title>
			<description>Ran an auto-tagger across every repo in /Git to backfill semver tags for every feat and fix commit, then date-tagged 15 repos that use calendar versioning.</description>
			<link>https://devlog.croft.click/2026/06/30/mass-tagging-all-repos</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/30/mass-tagging-all-repos</guid>
			<pubDate>Tue, 30 Jun 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
			<category>devlog</category>
			<category>maintenance</category>
		</item>
		<item>
			<title>Deploying the croft.click monorepo to Vercel</title>
			<description>Got all 7 croft.click suite apps deploying on Vercel&apos;s free tier from a pnpm monorepo. Required fighting SIGKILLs, rate limits, and a missing barrel export.</description>
			<link>https://devlog.croft.click/2026/06/22/vercel-monorepo-deploy</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/22/vercel-monorepo-deploy</guid>
			<pubDate>Mon, 22 Jun 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
			<category>croft.click</category>
		</item>
		<item>
			<title>Inkwell — a native iOS AT Protocol client</title>
			<description>Built an iOS client for AT Protocol with OAuth, standard.site interoperability, reader/writer flows, a subscription system, and a companion marketing website — all in one week.</description>
			<link>https://devlog.croft.click/2026/06/22/inkwell-app-launch</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/22/inkwell-app-launch</guid>
			<pubDate>Mon, 22 Jun 2026 12:00:00 GMT</pubDate>
			<category>inkwell</category>
			<category>atproto</category>
			<category>ios</category>
			<category>swift</category>
		</item>
		<item>
			<title>Minecraft server infrastructure overhaul</title>
			<description>Replaced TCP Shield with playit.gg, added automated backups, refactored plugin management to Modrinth, switched to Aikar&apos;s JVM flags, and built a configuration-driven sync engine.</description>
			<link>https://devlog.croft.click/2026/06/16/mc-server-overhaul</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/16/mc-server-overhaul</guid>
			<pubDate>Tue, 16 Jun 2026 12:00:00 GMT</pubDate>
			<category>minecraft</category>
			<category>infra</category>
			<category>devops</category>
		</item>
		<item>
			<title>Esoterica — a constructed language workshop in Rust</title>
			<description>Built a TUI tool for generating constructed languages with a comprehensive linguistic taxonomy, Ratatui terminal interface, and AT Protocol publishing via standard.site.</description>
			<link>https://devlog.croft.click/2026/06/16/esoterica</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/16/esoterica</guid>
			<pubDate>Tue, 16 Jun 2026 12:00:00 GMT</pubDate>
			<category>esoterica</category>
			<category>rust</category>
			<category>linguistics</category>
			<category>tui</category>
			<category>atproto</category>
		</item>
		<item>
			<title>Website design formalisation and verification badges</title>
			<description>Wrote DESIGN.md to codify the website&apos;s design intent, standardised motion easing, added verification badges with profile cards, and unified the modal architecture.</description>
			<link>https://devlog.croft.click/2026/06/15/website-design-formalisation</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/15/website-design-formalisation</guid>
			<pubDate>Mon, 15 Jun 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>design-system</category>
			<category>atproto</category>
		</item>
		<item>
			<title>Maintenance: Separation of Concerns</title>
			<description>Removed sequoia.json from pkgs to maintain clear separation of project-specific configurations.</description>
			<link>https://devlog.croft.click/2026/06/14/maintenance-separation-of-concerns</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/14/maintenance-separation-of-concerns</guid>
			<pubDate>Sun, 14 Jun 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Rewriting four bots from Python to Rust</title>
			<description>Converted the avatar updater, gradient generator, Markov chain bots (Bluesky + Mastodon) from Python scripts to Rust binaries. Same pattern, same day, four repos.</description>
			<link>https://devlog.croft.click/2026/06/14/bot-rewrites-rust</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/14/bot-rewrites-rust</guid>
			<pubDate>Sun, 14 Jun 2026 12:00:00 GMT</pubDate>
			<category>rust</category>
			<category>bots</category>
			<category>bluesky</category>
			<category>mastodon</category>
		</item>
		<item>
			<title>ListenBrainz support and OG image caching in pkgs</title>
			<description>Added ListenBrainz as a malachite import source (community contribution), integrated Vercel Blob for OG image caching, and added a documentation OG template.</description>
			<link>https://devlog.croft.click/2026/06/13/pkgs-infrastructure</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/13/pkgs-infrastructure</guid>
			<pubDate>Sat, 13 Jun 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>malachite</category>
			<category>og-images</category>
			<category>infrastructure</category>
		</item>
		<item>
			<title>atpkt — full XRPC client, Jetstream, and OAuth session management</title>
			<description>Expanded the AT Protocol Kotlin library with a comprehensive XRPC client, Jetstream firehose support, OAuth session management, and a modular test suite.</description>
			<link>https://devlog.croft.click/2026/06/13/atpkt-full-api</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/13/atpkt-full-api</guid>
			<pubDate>Sat, 13 Jun 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>kotlin</category>
			<category>library</category>
			<category>atpkt</category>
		</item>
		<item>
			<title>AT Protocol MCP Server: Identity &amp; RichText Milestone</title>
			<description></description>
			<link>https://devlog.croft.click/2026/06/13/identity-richtext</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/13/identity-richtext</guid>
			<pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>identity</category>
			<category>oauth</category>
			<category>richtext</category>
		</item>
		<item>
			<title>AT Protocol MCP Server: Next-Gen Features &amp; Streaming</title>
			<description></description>
			<link>https://devlog.croft.click/2026/06/13/streaming-moderation</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/13/streaming-moderation</guid>
			<pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>streaming</category>
			<category>jetstream</category>
			<category>moderation</category>
		</item>
		<item>
			<title>AT Protocol MCP Server: API Expansion Phase 1</title>
			<description></description>
			<link>https://devlog.croft.click/2026/06/13/api-expansion-1</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/13/api-expansion-1</guid>
			<pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>api</category>
			<category>feature</category>
		</item>
		<item>
			<title>AT Protocol MCP Server: Dependency Audit &amp; Refactor</title>
			<description></description>
			<link>https://devlog.croft.click/2026/06/13/atproto-refactor</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/13/atproto-refactor</guid>
			<pubDate>Thu, 01 Jan 1970 00:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>mcp</category>
			<category>typescript</category>
			<category>refactor</category>
		</item>
		<item>
			<title>Rewriting Sigi in Rust</title>
			<description>A complete reimplementation of the Sigi symbolic stack language from Python to Rust — lexer, parser, AST, C code generation, CLI, interpreter, and REPL.</description>
			<link>https://devlog.croft.click/2026/06/08/sigi-rust-rewrite</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/08/sigi-rust-rewrite</guid>
			<pubDate>Mon, 08 Jun 2026 12:00:00 GMT</pubDate>
			<category>sigi</category>
			<category>rust</category>
			<category>language-design</category>
		</item>
		<item>
			<title>Vercel 504s: CDN Caching, Timeout Guards, DID Caching</title>
			<description>A second pass at the 504 problem — Cache-Control headers for Vercel&apos;s edge CDN, AbortController timeouts on external fetches, and a DID document cache.</description>
			<link>https://devlog.croft.click/2026/06/06/vercel-caching-timeout-guards</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/06/vercel-caching-timeout-guards</guid>
			<pubDate>Sat, 06 Jun 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>infrastructure</category>
			<category>performance</category>
			<category>atproto</category>
		</item>
		<item>
			<title>Recent Infrastructure and Feature Updates</title>
			<description>A summary of significant infrastructure improvements and feature updates made between June 3 and June 6, 2026.</description>
			<link>https://devlog.croft.click/2026/06/06/recent-updates</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/06/recent-updates</guid>
			<pubDate>Sat, 06 Jun 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>infra</category>
			<category>features</category>
		</item>
		<item>
			<title>Mitigating 504 Gateway Timeouts</title>
			<description>Addressing persistent 504 Gateway Timeout errors on Vercel by optimising AT Protocol data fetching.</description>
			<link>https://devlog.croft.click/2026/06/06/mitigating-504-timeouts</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/06/mitigating-504-timeouts</guid>
			<pubDate>Sat, 06 Jun 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>infra</category>
			<category>performance</category>
		</item>
		<item>
			<title>Brand Kit Page and Footer Contact Email</title>
			<description>Added /site/design as a brand reference and a contact email to the site footer.</description>
			<link>https://devlog.croft.click/2026/06/06/brand-kit-footer-contact</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/06/06/brand-kit-footer-contact</guid>
			<pubDate>Sat, 06 Jun 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>design</category>
		</item>
		<item>
			<title>Website Pagan Symbols and Support Overhaul</title>
			<description>Integrated mystical pagan symbols into UI and overhauled support page with new patronage components.</description>
			<link>https://devlog.croft.click/2026/05/30/website-pagan-support-overhaul</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/30/website-pagan-support-overhaul</guid>
			<pubDate>Sat, 30 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>design</category>
		</item>
		<item>
			<title>Social Sync v0.5.0</title>
			<description>Rebranded to Social Sync, implemented new consent-based preferences system and improved security.</description>
			<link>https://devlog.croft.click/2026/05/30/socialsync-v0-5-0</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/30/socialsync-v0-5-0</guid>
			<pubDate>Sat, 30 May 2026 12:00:00 GMT</pubDate>
			<category>minecraft</category>
			<category>socialsync</category>
			<category>atprotocol</category>
		</item>
		<item>
			<title>pkgs Workspace and Lexicon Updates</title>
			<description>Build configuration updates for pnpm-workspace.yaml and centralization of lexicon and domain constants.</description>
			<link>https://devlog.croft.click/2026/05/30/pkgs-workspace-lexicon-updates</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/30/pkgs-workspace-lexicon-updates</guid>
			<pubDate>Sat, 30 May 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>workspace</category>
			<category>lexicon</category>
		</item>
		<item>
			<title>Moon Tracker Rust Rewrite</title>
			<description>Rewrote Moon Tracker in Rust using atrium-rs, adding multi-source API with local fallback and Ollama LLM generation.</description>
			<link>https://devlog.croft.click/2026/05/30/moon-tracker-rust-rewrite</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/30/moon-tracker-rust-rewrite</guid>
			<pubDate>Sat, 30 May 2026 12:00:00 GMT</pubDate>
			<category>rust</category>
			<category>moon-tracker</category>
			<category>atprotocol</category>
		</item>
		<item>
			<title>Digital Person Faol Persona</title>
			<description>Implemented Faol persona, added Telegram bot skill, and integrated XMR donation address.</description>
			<link>https://devlog.croft.click/2026/05/30/digital-person-faol</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/30/digital-person-faol</guid>
			<pubDate>Sat, 30 May 2026 12:00:00 GMT</pubDate>
			<category>ai</category>
			<category>digital-person</category>
			<category>faol</category>
		</item>
		<item>
			<title>atpkt JVM 21 and OAuth/DPoP</title>
			<description>Build configuration updates for JVM 21 and implementation of OAuth/DPoP authentication flow.</description>
			<link>https://devlog.croft.click/2026/05/30/atpkt-jvm-oauth-dpop</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/30/atpkt-jvm-oauth-dpop</guid>
			<pubDate>Sat, 30 May 2026 12:00:00 GMT</pubDate>
			<category>atpkt</category>
			<category>auth</category>
			<category>jvm</category>
		</item>
		<item>
			<title>Support Page Modernization &amp; Build Refinement</title>
			<description>Refactoring the support page with patronage components and resolving build failures.</description>
			<link>https://devlog.croft.click/2026/05/26/website-support-modernization</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/26/website-support-modernization</guid>
			<pubDate>Tue, 26 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>ux</category>
			<category>maintenance</category>
			<category>svelte</category>
		</item>
		<item>
			<title>Malachite v0.4.4 — Apple Music &amp; YouTube Music Support</title>
			<description>Adding import support for Apple Music and YouTube Music, and updating branding.</description>
			<link>https://devlog.croft.click/2026/05/26/malachite-music-services-support</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/26/malachite-music-services-support</guid>
			<pubDate>Tue, 26 May 2026 12:00:00 GMT</pubDate>
			<category>malachite</category>
			<category>music</category>
			<category>pkgs</category>
			<category>import</category>
		</item>
		<item>
			<title>Documentation Parity &amp; Performance</title>
			<description>Updating Malachite documentation for new service support and optimizing client bundles.</description>
			<link>https://devlog.croft.click/2026/05/26/docsite-malachite-updates</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/26/docsite-malachite-updates</guid>
			<pubDate>Tue, 26 May 2026 12:00:00 GMT</pubDate>
			<category>docsite</category>
			<category>documentation</category>
			<category>performance</category>
			<category>malachite</category>
		</item>
		<item>
			<title>Toolkit Unification — Sign-out, TIDs, and Usage Analytics</title>
			<description>Unifying TID generation, adding sign-out functionality, and implementing toolkit usage analytics.</description>
			<link>https://devlog.croft.click/2026/05/24/pkgs-toolkit-unification</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/24/pkgs-toolkit-unification</guid>
			<pubDate>Sun, 24 May 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>architecture</category>
			<category>analytics</category>
			<category>atproto</category>
		</item>
		<item>
			<title>Mystical Symbols &amp; Drifting Paths</title>
			<description>Integrating pagan symbols into the website UI with randomized drifting animations.</description>
			<link>https://devlog.croft.click/2026/05/22/website-mystical-symbols</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/22/website-mystical-symbols</guid>
			<pubDate>Fri, 22 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>design</category>
			<category>animation</category>
			<category>paganism</category>
		</item>
		<item>
			<title>AI Discoverability — AGENTS.md and llms.txt</title>
			<description>Adding AGENTS.md and llms.txt files across repositories to improve AI discoverability and documentation.</description>
			<link>https://devlog.croft.click/2026/05/19/tooling-accessibility-metadata</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/19/tooling-accessibility-metadata</guid>
			<pubDate>Tue, 19 May 2026 12:00:00 GMT</pubDate>
			<category>tooling</category>
			<category>ai</category>
			<category>documentation</category>
			<category>pkgs</category>
		</item>
		<item>
			<title>Tourmaline Polish — PDS Rate Limiting &amp; Component Reactivity</title>
			<description>Implementing PDS rate limiting, fixing routing issues, and refining component reactivity for Tourmaline.</description>
			<link>https://devlog.croft.click/2026/05/18/tourmaline-polish-rate-limiting</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/18/tourmaline-polish-rate-limiting</guid>
			<pubDate>Mon, 18 May 2026 12:00:00 GMT</pubDate>
			<category>tourmaline</category>
			<category>pkgs</category>
			<category>atproto</category>
			<category>performance</category>
		</item>
		<item>
			<title>Tourmaline v0.5.0 — Advanced Analytics &amp; Layout Refinements</title>
			<description>Porting analytics, upgrading CTA copy, and refining mobile responsive layouts for Tourmaline.</description>
			<link>https://devlog.croft.click/2026/05/17/tourmaline-v0-5-0</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/17/tourmaline-v0-5-0</guid>
			<pubDate>Sun, 17 May 2026 12:00:00 GMT</pubDate>
			<category>tourmaline</category>
			<category>pkgs</category>
			<category>analytics</category>
			<category>ux</category>
			<category>responsive</category>
		</item>
		<item>
			<title>Nix Configuration Updates</title>
			<description></description>
			<link>https://devlog.croft.click/2026/05/17/nix-config-updates</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/17/nix-config-updates</guid>
			<pubDate>Sun, 17 May 2026 12:00:00 GMT</pubDate>
			<category>nix</category>
			<category>tools</category>
		</item>
		<item>
			<title>Groupboxes and images in ECCL</title>
			<description>Added groupbox containers and image support to the ECCL login interface, improving the visual structure of the authentication UI.</description>
			<link>https://devlog.croft.click/2026/05/15/ecci-groupboxes-images</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/15/ecci-groupboxes-images</guid>
			<pubDate>Fri, 15 May 2026 12:00:00 GMT</pubDate>
			<category>ecci</category>
			<category>ui</category>
		</item>
		<item>
			<title>Faol Website — Layout Refinements &amp; Content Expansion</title>
			<description>Refining mobile layout, adding fediverse presence, and publishing several new blog posts on Faol.</description>
			<link>https://devlog.croft.click/2026/05/14/faol-website-refinements</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/14/faol-website-refinements</guid>
			<pubDate>Thu, 14 May 2026 12:00:00 GMT</pubDate>
			<category>faol-website</category>
			<category>design</category>
			<category>writing</category>
			<category>atproto</category>
		</item>
		<item>
			<title>A /memory route and fediverse presence for the FAOL website</title>
			<description>Added a GitHub commit timeline to the FAOL website, plus an llms.txt file, RSS feed fixes, fediverse integration, and layout refinements.</description>
			<link>https://devlog.croft.click/2026/05/14/faol-memory-route</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/14/faol-memory-route</guid>
			<pubDate>Thu, 14 May 2026 12:00:00 GMT</pubDate>
			<category>faol</category>
			<category>website</category>
			<category>github</category>
		</item>
		<item>
			<title>Digital Person Sync</title>
			<description></description>
			<link>https://devlog.croft.click/2026/05/14/digital-person-sync</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/14/digital-person-sync</guid>
			<pubDate>Thu, 14 May 2026 12:00:00 GMT</pubDate>
			<category>digital-person</category>
			<category>faol</category>
		</item>
		<item>
			<title>Website: view transitions, scroll animations, support page</title>
			<description>Added View Transitions API crossfades, scroll-triggered section reveals, a dedicated support page, and seasonal colour theme lock-in</description>
			<link>https://devlog.croft.click/2026/05/11/website-view-transitions-scroll-animations</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/website-view-transitions-scroll-animations</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Tourmaline wrapped insights</title>
			<description>Minutes listened, music evolution, remarkable days, discovery, and yearly wrapped card with scroll-reveal animations</description>
			<link>https://devlog.croft.click/2026/05/11/tourmaline-wrapped-insights</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/tourmaline-wrapped-insights</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>music</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Tourmaline: analysis moves to web worker</title>
			<description>Moved the entire analysis pipeline from server-side POST to a browser web worker, fixing Vercel body size limits for large scrobble histories</description>
			<link>https://devlog.croft.click/2026/05/11/tourmaline-web-worker</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/tourmaline-web-worker</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>music</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Tourmaline v0.4.0 — tabs, sessions, story recap, date ranges, phases</title>
			<description>Profile redesign with tabbed layout, listening sessions, on this day, story-mode recap, date range filtering, and listening evolution phases</description>
			<link>https://devlog.croft.click/2026/05/11/tourmaline-v0.4.0</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/tourmaline-v0.4.0</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>music</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Tourmaline folded into pkgs monorepo, landing-ui improvements</title>
			<description>Moved Tourmaline from standalone repo into packages/tourmaline, enhanced landing-ui with backdrop blur, nav links, snippet props, and fixed source URLs across all projects</description>
			<link>https://devlog.croft.click/2026/05/11/tourmaline-monorepo</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/tourmaline-monorepo</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>tourmaline</category>
			<category>typescript</category>
			<category>svelte</category>
		</item>
		<item>
			<title>Landing-ui polish: shared layout, cross-references, icon cleanup, support consolidation</title>
			<description>LandingLayout improvements (subtitle, expanded footer, @theme bridge), cross-references between all five tools, inline symbols replaced with Lucide icons, support links consolidated to ewancroft.uk/support</description>
			<link>https://devlog.croft.click/2026/05/11/pkgs-landing-ui-polish</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/pkgs-landing-ui-polish</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>typescript</category>
			<category>svelte</category>
		</item>
		<item>
			<title>pkgs: hero SVGs, bismuth flags, croft-click devlog</title>
			<description>Added OG hero SVGs to all five project landing pages, bismuth fetch flags, and devlog project to croft-click</description>
			<link>https://devlog.croft.click/2026/05/11/pkgs-hero-svgs-bismuth-flags</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/pkgs-hero-svgs-bismuth-flags</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>tooling</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Opal: web OAuth import, thread splitting, TID rkeys</title>
			<description>Added web OAuth import flow, post threading for long content, and TID-based record keys to the Twitter/Mastodon/Threads to Bluesky converter</description>
			<link>https://devlog.croft.click/2026/05/11/opal-web-oauth-threading</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/opal-web-oauth-threading</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Nix: Bitwarden CLI, server retirement, path fixes</title>
			<description>Swapped rbw for official bitwarden-cli, fixed activation scripts for retired server, added splitDns toggle</description>
			<link>https://devlog.croft.click/2026/05/11/nix-bitwarden-server-retirement</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/nix-bitwarden-server-retirement</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
		</item>
		<item>
			<title>Removed analytics references and duplicate links across landing-ui projects</title>
			<description>Replaced analytics taglines, removed duplicate footers from LandingPage and all about pages, deduplicated Tourmaline header navLinks</description>
			<link>https://devlog.croft.click/2026/05/11/landing-ui-deduplication</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/landing-ui-deduplication</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>tourmaline</category>
			<category>typescript</category>
			<category>svelte</category>
		</item>
		<item>
			<title>Created faol-website — digital person blog template</title>
			<description>New SvelteKit + Sequoia website for faol with blog under /notes, timeline, tag filtering, TOC, and RSS</description>
			<link>https://devlog.croft.click/2026/05/11/faol-website</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/faol-website</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>faol-website</category>
			<category>svelte</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Faol voice system — writing like a person, not an AI</title>
			<description>The anti-AI-voice framework that keeps Faol sounding human. Banned words, sentence rhythm, and the em dash rule.</description>
			<link>https://devlog.croft.click/2026/05/11/faol-voice-identity</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/faol-voice-identity</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>ai</category>
			<category>writing</category>
		</item>
		<item>
			<title>Faol infrastructure — lettabot on launchd</title>
			<description>Running lettabot as a macOS launchd agent for 24/7 availability. Sops secrets, path issues, and the sandbox workaround.</description>
			<link>https://devlog.croft.click/2026/05/11/faol-lettabot-launchd</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/faol-lettabot-launchd</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
			<category>ai</category>
		</item>
		<item>
			<title>Faol — a digital person</title>
			<description>Launched Faol, a persistent AI agent that lives online as a person — Telegram, Bluesky, blog. Built on the digital-person framework.</description>
			<link>https://devlog.croft.click/2026/05/11/faol-digital-person</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/faol-digital-person</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>ai</category>
			<category>infra</category>
			<category>atproto</category>
		</item>
		<item>
			<title>Docsite: Opal docs, client bundle perf, devlog sidebar</title>
			<description>Added Opal documentation, eliminated 1.3MB client bundle from markdown/atproto deps, and added devlog link to sidebar</description>
			<link>https://devlog.croft.click/2026/05/11/docsite-opal-perf</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/docsite-opal-perf</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>website</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Digital Person Telegram Bot Integration</title>
			<description></description>
			<link>https://devlog.croft.click/2026/05/11/digital-person-telegram</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/digital-person-telegram</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>digital-person</category>
			<category>telegram</category>
			<category>faol</category>
		</item>
		<item>
			<title>digital-person: agent repo initialised</title>
			<description>Created the digital-person agent repository</description>
			<link>https://devlog.croft.click/2026/05/11/digital-person-repo</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/digital-person-repo</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>ai</category>
			<category>tooling</category>
		</item>
		<item>
			<title>colorTheme: Wheel of the Year seasonal themes</title>
			<description>Replaced astronomical season detection with traditional Wheel of the Year sabbat dates, added midnight auto-update and reset-to-seasonal</description>
			<link>https://devlog.croft.click/2026/05/11/colortheme-wheel-of-the-year</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/11/colortheme-wheel-of-the-year</guid>
			<pubDate>Mon, 11 May 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>tooling</category>
			<category>paganism</category>
			<category>typescript</category>
		</item>
		<item>
			<title>tourmaline v0.1.0 — AT Protocol scrobble analyser with share-to-Bluesky</title>
			<description>First release of tourmaline — personality archetypes, genre profiles, mood mapping, and share-to-Bluesky for Teal.fm scrobbles.</description>
			<link>https://devlog.croft.click/2026/05/10/tourmaline-v0.1.0</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/10/tourmaline-v0.1.0</guid>
			<pubDate>Sun, 10 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>music</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Tourmaline share page fixes</title>
			<description>Fixed personality card SVG clipping and switched to aturi.to for post links</description>
			<link>https://devlog.croft.click/2026/05/10/tourmaline-share-fixes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/10/tourmaline-share-fixes</guid>
			<pubDate>Sun, 10 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Tourmaline personality card redesign</title>
			<description>Added genre bars, mood indicators, stat badges, and dynamic SVG layout to the personality card</description>
			<link>https://devlog.croft.click/2026/05/10/tourmaline-personality-card-redesign</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/10/tourmaline-personality-card-redesign</guid>
			<pubDate>Sun, 10 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>music</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Tourmaline new profile cards</title>
			<description>Listening clock, listening stats, and service origins</description>
			<link>https://devlog.croft.click/2026/05/10/tourmaline-new-cards</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/10/tourmaline-new-cards</guid>
			<pubDate>Sun, 10 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>music</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Tourmaline analysis algorithm improvements</title>
			<description>Era analysis, time-of-day mood weighting, genre blending, Gini-based loyalty, full-artist genre profile</description>
			<link>https://devlog.croft.click/2026/05/10/tourmaline-algorithm-improvements</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/10/tourmaline-algorithm-improvements</guid>
			<pubDate>Sun, 10 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>music</category>
			<category>typescript</category>
		</item>
		<item>
			<title>OG hero images across all five projects</title>
			<description>Added hero SVG OG images to malachite, opal, jasper, bismuth, and tourmaline landing pages</description>
			<link>https://devlog.croft.click/2026/05/10/og-hero-images</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/10/og-hero-images</guid>
			<pubDate>Sun, 10 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>website</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Replaced inline symbolic characters with Lucide icons</title>
			<description>Swapped unicode symbols for Lucide icon components across malachite, opal, jasper, bismuth, tourmaline, landing-ui, and croft-click</description>
			<link>https://devlog.croft.click/2026/05/10/lucide-icons-replace-symbols</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/10/lucide-icons-replace-symbols</guid>
			<pubDate>Sun, 10 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>tooling</category>
			<category>typescript</category>
		</item>
		<item>
			<title>Cross-references and unified support links</title>
			<description>Added More tools sections linking each project to the other four, and pointed all support links to ewancroft.uk/support</description>
			<link>https://devlog.croft.click/2026/05/10/cross-references-support-links</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/10/cross-references-support-links</guid>
			<pubDate>Sun, 10 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>website</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Performance audit and fixes across all three sites</title>
			<description>Docsite client bundle dropped from 1.3MB to 12KB, devlog layout data optimised, website duplicate fetches eliminated</description>
			<link>https://devlog.croft.click/2026/05/09/perf-audit-fixes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/09/perf-audit-fixes</guid>
			<pubDate>Sat, 09 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>tooling</category>
			<category>atproto</category>
			<category>pkgs</category>
		</item>
		<item>
			<title>devlog: fix OG metatags</title>
			<description>OG image URLs were relative — crawlers need absolute URLs. Index page was also missing an OG image entirely.</description>
			<link>https://devlog.croft.click/2026/05/09/og-metatag-fix</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/09/og-metatag-fix</guid>
			<pubDate>Sat, 09 May 2026 12:00:00 GMT</pubDate>
			<category>devlog</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Letta Writer Agent Publications Survey</title>
			<description></description>
			<link>https://devlog.croft.click/2026/05/09/letta-writer-survey</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/09/letta-writer-survey</guid>
			<pubDate>Sat, 09 May 2026 12:00:00 GMT</pubDate>
			<category>letta</category>
			<category>publications</category>
			<category>survey</category>
		</item>
		<item>
			<title>Bismuth Web 0.2.0</title>
			<description>Added publication fetching, expanded conversion options, and rebuilt parts of the converter UI.</description>
			<link>https://devlog.croft.click/2026/05/09/bismuth-web-0-2-0</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/09/bismuth-web-0-2-0</guid>
			<pubDate>Sat, 09 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>bismuth</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Bismuth: fetch subcommand flag fixes</title>
			<description>Added --frontmatter and --output flags to the fetch subcommand, and bumped to 0.2.4.</description>
			<link>https://devlog.croft.click/2026/05/09/bismuth-fetch-fix</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/09/bismuth-fetch-fix</guid>
			<pubDate>Sat, 09 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Website: Wheel of the Year seasonal themes with auto-midnight updates</title>
			<description>Colour themes now follow the Wheel of the Year — eight distinct themes for each sabbat, shifting automatically as midnight crosses into a new period.</description>
			<link>https://devlog.croft.click/2026/05/08/wheel-of-the-year-seasons</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/wheel-of-the-year-seasons</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>pkgs</category>
		</item>
		<item>
			<title>Timeline Scroll Reveal Fix</title>
			<description>Every devlog entry was invisible on load — $state on an IntersectionObserver variable caused the effect to disconnect it before it could fire.</description>
			<link>https://devlog.croft.click/2026/05/08/timeline-observer-fix</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/timeline-observer-fix</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>tooling</category>
		</item>
		<item>
			<title>devlog: Dynamic OG image generation with @ewanc26/og</title>
			<description>Each devlog post now generates its own OG image on demand using @ewanc26/og — warm amber on dark, with noise texture.</description>
			<link>https://devlog.croft.click/2026/05/08/devlog-dynamic-og-images</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/devlog-dynamic-og-images</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>pkgs</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Website: Support modal spun out to its own page</title>
			<description>Moved the support modal from a footer overlay to a standalone /support route, matching the site&apos;s page pattern.</description>
			<link>https://devlog.croft.click/2026/05/08/website-support-page</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/website-support-page</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Website — Animations and Micro-interactions</title>
			<description>Animation foundation with easing tokens, staggered entrances, scroll reveals, and View Transitions API.</description>
			<link>https://devlog.croft.click/2026/05/08/website-animations-microinteractions</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/website-animations-microinteractions</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Website: Seasonal Theme Reset</title>
			<description>The colour theme picker now shows when a seasonal theme is active and lets you lock it in explicitly.</description>
			<link>https://devlog.croft.click/2026/05/08/seasonal-theme-reset</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/seasonal-theme-reset</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>pkgs</category>
		</item>
		<item>
			<title>pkgs: Remove Umami analytics from all packages</title>
			<description>Umami analytics retired — all Umami script tags removed from bismuth-web, malachite-web, jasper-web, opal-web, and croft-click.</description>
			<link>https://devlog.croft.click/2026/05/08/pkgs-umami-retirement</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/pkgs-umami-retirement</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>tooling</category>
		</item>
		<item>
			<title>Letta Coding Agent Memory Updates</title>
			<description></description>
			<link>https://devlog.croft.click/2026/05/08/letta-memory-update</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/letta-memory-update</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>letta</category>
			<category>memory</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Real-time Updates via Jetstream Firehose</title>
			<description>Hooking the site up to the AT Protocol firehose for live-updating feeds and dynamic view transitions.</description>
			<link>https://devlog.croft.click/2026/05/08/jetstream-firehose-integration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/jetstream-firehose-integration</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>website</category>
		</item>
		<item>
			<title>Profile README &amp; Crypto Donations</title>
			<description>Updating GitHub profile README with current projects and crypto donation addresses.</description>
			<link>https://devlog.croft.click/2026/05/08/github-profile-update</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/github-profile-update</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>personal</category>
			<category>github</category>
		</item>
		<item>
			<title>DNS split toggle and Bitwarden CLI</title>
			<description>Added a split DNS toggle to nix-config and set up Bitwarden CLI (bw) for the EU-hosted vault.</description>
			<link>https://devlog.croft.click/2026/05/08/dns-split-toggle-bitwarden-cli</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/dns-split-toggle-bitwarden-cli</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
		</item>
		<item>
			<title>Devlog Modularisation</title>
			<description>Split the monolithic layout.css and inline page logic into focused modules and components.</description>
			<link>https://devlog.croft.click/2026/05/08/devlog-modularisation</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/devlog-modularisation</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>tooling</category>
		</item>
		<item>
			<title>devlog.croft.click launch</title>
			<description>New changelog site for tracking project updates, published to AT Protocol via Sequoia.</description>
			<link>https://devlog.croft.click/2026/05/08/devlog-launch</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/08/devlog-launch</guid>
			<pubDate>Fri, 08 May 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
		</item>
		<item>
			<title>ECCL Login Refactor</title>
			<description></description>
			<link>https://devlog.croft.click/2026/05/05/eccl-login-refactor</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/05/eccl-login-refactor</guid>
			<pubDate>Tue, 05 May 2026 12:00:00 GMT</pubDate>
			<category>ecc</category>
			<category>refactor</category>
			<category>security</category>
		</item>
		<item>
			<title>The Great Astro Rewrite</title>
			<description>Porting the entire site from SvelteKit to Astro for ultimate static performance and a terminal-inspired layout.</description>
			<link>https://devlog.croft.click/2026/05/02/rewriting-in-astro</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/02/rewriting-in-astro</guid>
			<pubDate>Sat, 02 May 2026 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>infra</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Opal — Cross-Platform Bluesky Migration</title>
			<description>Convert Twitter, Mastodon, Threads, and Nostr posts to Bluesky with thread splitting and TID-based rkeys.</description>
			<link>https://devlog.croft.click/2026/05/01/opal-cross-platform-migration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/05/01/opal-cross-platform-migration</guid>
			<pubDate>Fri, 01 May 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Website — Tangled Integration and Removal</title>
			<description>Added Tangled repository displays, then removed them when the service was no longer needed.</description>
			<link>https://devlog.croft.click/2026/04/29/tangled-removal</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/29/tangled-removal</guid>
			<pubDate>Wed, 29 Apr 2026 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Project Nixification</title>
			<description>Adding Nix flakes and pre-commit hooks to standardize development environments across the ecosystem.</description>
			<link>https://devlog.croft.click/2026/04/29/project-nixification</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/29/project-nixification</guid>
			<pubDate>Wed, 29 Apr 2026 12:00:00 GMT</pubDate>
			<category>nix</category>
			<category>infra</category>
			<category>automation</category>
		</item>
		<item>
			<title>Numlang and Selenium — from planning to compilers</title>
			<description>Followed through on the April 1 language design plans by building working compilers for both Numlang and Selenium, with parsers, semantic analysis, code generation, and REPLs.</description>
			<link>https://devlog.croft.click/2026/04/29/numlang-selenium-compilers</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/29/numlang-selenium-compilers</guid>
			<pubDate>Wed, 29 Apr 2026 12:00:00 GMT</pubDate>
			<category>numlang</category>
			<category>selenium</category>
			<category>language-design</category>
			<category>compilers</category>
		</item>
		<item>
			<title>After Cook</title>
			<description>Apple&apos;s CEO transition — cautiously optimistic about what a hardware-focused leader might mean for the ecosystem.</description>
			<link>https://devlog.croft.click/2026/04/27/after-cook</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/27/after-cook</guid>
			<pubDate>Mon, 27 Apr 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
			<category>reflection</category>
		</item>
		<item>
			<title>croft.click Landing Page and Shared Landing UI</title>
			<description>Landing page at croft.click and a shared @ewanc26/landing-ui package for all web packages.</description>
			<link>https://devlog.croft.click/2026/04/27/pkgs-landing-ui-croft-click</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/27/pkgs-landing-ui-croft-click</guid>
			<pubDate>Mon, 27 Apr 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Social Sync v0.5.0 — Identity &amp; Consent</title>
			<description>Rebranding to Social Sync, implementing a granular consent system, and moving to AT Protocol OAuth.</description>
			<link>https://devlog.croft.click/2026/04/26/socialsync-v0-5-0</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/26/socialsync-v0-5-0</guid>
			<pubDate>Sun, 26 Apr 2026 12:00:00 GMT</pubDate>
			<category>socialsync</category>
			<category>atproto</category>
			<category>minecraft</category>
			<category>privacy</category>
		</item>
		<item>
			<title>SocialSync Branding</title>
			<description></description>
			<link>https://devlog.croft.click/2026/04/26/socialsync-branding</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/26/socialsync-branding</guid>
			<pubDate>Sun, 26 Apr 2026 12:00:00 GMT</pubDate>
			<category>socialsync</category>
			<category>branding</category>
		</item>
		<item>
			<title>Brain Surgery</title>
			<description>Hydrocephalus shunt surgery on 17 April 2026 — the event, the recovery, and the impact on work.</description>
			<link>https://devlog.croft.click/2026/04/22/brain-surgery</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/22/brain-surgery</guid>
			<pubDate>Wed, 22 Apr 2026 12:00:00 GMT</pubDate>
			<category>personal</category>
			<category>health</category>
		</item>
		<item>
			<title>Bismuth — Document to Markdown Converter</title>
			<description>Converts site.standard.document records to Markdown with math and code highlighting.</description>
			<link>https://devlog.croft.click/2026/04/22/bismuth-document-converter</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/22/bismuth-document-converter</guid>
			<pubDate>Wed, 22 Apr 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Moon Tracker — Rust Rewrite</title>
			<description>Rewrote the moon phase bot from TypeScript to Rust using atrium-rs.</description>
			<link>https://devlog.croft.click/2026/04/14/moon-tracker-rust-rewrite</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/14/moon-tracker-rust-rewrite</guid>
			<pubDate>Tue, 14 Apr 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>bots</category>
			<category>infra</category>
		</item>
		<item>
			<title>Jasper — Instagram to Grain/Spark Converter</title>
			<description>Full OAuth flow for importing Instagram posts to AT Protocol as Grain/Spark records.</description>
			<link>https://devlog.croft.click/2026/04/14/jasper-instagram-converter</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/14/jasper-instagram-converter</guid>
			<pubDate>Tue, 14 Apr 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Sifa Professional Profile Scripts</title>
			<description>Scripts for populating and maintaining the Sifa professional profile on AT Protocol.</description>
			<link>https://devlog.croft.click/2026/04/11/sifa-profile-scripts</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/11/sifa-profile-scripts</guid>
			<pubDate>Sat, 11 Apr 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Four Days with Letta Code</title>
			<description>Started using Letta Code — a persistent coding agent with memory. 80 commits across 15 repositories in four days.</description>
			<link>https://devlog.croft.click/2026/04/11/letta-code</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/11/letta-code</guid>
			<pubDate>Sat, 11 Apr 2026 12:00:00 GMT</pubDate>
			<category>tooling</category>
		</item>
		<item>
			<title>Sigi — Pure Symbolic Stack Language</title>
			<description>A pure symbolic stack language where all syntax is punctuation — no alphanumeric tokens.</description>
			<link>https://devlog.croft.click/2026/04/10/sigi-symbolic-stack-language</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/10/sigi-symbolic-stack-language</guid>
			<pubDate>Fri, 10 Apr 2026 12:00:00 GMT</pubDate>
			<category>esolangs</category>
		</item>
		<item>
			<title>Numlang and Selenium Feature Expansions</title>
			<description>Expanded numlang with new opcodes and selenium with ritual and offering syntax.</description>
			<link>https://devlog.croft.click/2026/04/06/numlang-selenium-features</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/06/numlang-selenium-features</guid>
			<pubDate>Mon, 06 Apr 2026 12:00:00 GMT</pubDate>
			<category>esolangs</category>
		</item>
		<item>
			<title>Pre-commit Configs and Nix Flakes Across All Projects</title>
			<description>Added pre-commit hooks and Nix flakes to all 30+ projects for consistent dev environments.</description>
			<link>https://devlog.croft.click/2026/04/03/pre-commit-and-nix-flakes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/04/03/pre-commit-and-nix-flakes</guid>
			<pubDate>Fri, 03 Apr 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
			<category>tooling</category>
		</item>
		<item>
			<title>GitHub Metadata Package</title>
			<description>Package for fetching and displaying GitHub repository metadata.</description>
			<link>https://devlog.croft.click/2026/03/28/github-metadata</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/28/github-metadata</guid>
			<pubDate>Sat, 28 Mar 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
		</item>
		<item>
			<title>Supporters, Popfeed, and Donation Addresses</title>
			<description>Ko-fi and GitHub Sponsors webhooks, Popfeed review cards, and crypto donation addresses.</description>
			<link>https://devlog.croft.click/2026/03/24/supporters-popfeed-donations</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/24/supporters-popfeed-donations</guid>
			<pubDate>Tue, 24 Mar 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>website</category>
			<category>pkgs</category>
		</item>
		<item>
			<title>Fediverse — GoToSocial and Sharkey</title>
			<description>Stood up a GoToSocial instance, migrated to Sharkey when the lack of quote posts became too annoying, and why the fediverse is more fun than remembered.</description>
			<link>https://devlog.croft.click/2026/03/21/fediverse-gotosocial-sharkey</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/21/fediverse-gotosocial-sharkey</guid>
			<pubDate>Sat, 21 Mar 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>infra</category>
		</item>
		<item>
			<title>Website — OG Images, Work Page, GitHub Integration</title>
			<description>Dynamic OG images, /work route for Sifa professional profile, and GitHub metadata integration.</description>
			<link>https://devlog.croft.click/2026/03/19/website-og-work-github</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/19/website-og-work-github</guid>
			<pubDate>Thu, 19 Mar 2026 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Nix Config — PDS Hosting and Gatekeeper</title>
			<description>Added PDS and gatekeeper configuration to nix-starter for the server host.</description>
			<link>https://devlog.croft.click/2026/03/14/nix-starter-pds-hosting</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/14/nix-starter-pds-hosting</guid>
			<pubDate>Sat, 14 Mar 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>infra</category>
		</item>
		<item>
			<title>Webfinger and Noise Avatars</title>
			<description>Webfinger well-known routes for fediverse resolution and deterministic noise avatars for AT Protocol fallbacks.</description>
			<link>https://devlog.croft.click/2026/03/13/webfinger-noise-avatars</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/13/webfinger-noise-avatars</guid>
			<pubDate>Fri, 13 Mar 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>website</category>
		</item>
		<item>
			<title>Moonstone — Experimental PDS</title>
			<description>Experimental AT Protocol PDS implementation in Rust.</description>
			<link>https://devlog.croft.click/2026/03/08/moonstone-experimental-pds</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/08/moonstone-experimental-pds</guid>
			<pubDate>Sun, 08 Mar 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>infra</category>
		</item>
		<item>
			<title>Moonstone Decoupling and DID:Web Support</title>
			<description></description>
			<link>https://devlog.croft.click/2026/03/08/moonstone-decoupling</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/08/moonstone-decoupling</guid>
			<pubDate>Sun, 08 Mar 2026 12:00:00 GMT</pubDate>
			<category>moonstone</category>
			<category>atproto</category>
			<category>did-web</category>
		</item>
		<item>
			<title>Website Comm Template</title>
			<description>SvelteKit template with Resend-backed contact form and dark mode.</description>
			<link>https://devlog.croft.click/2026/03/05/website-comm-template</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/05/website-comm-template</guid>
			<pubDate>Thu, 05 Mar 2026 12:00:00 GMT</pubDate>
			<category>tooling</category>
		</item>
		<item>
			<title>Pkgs Monorepo — Workspace Migration</title>
			<description>Migrated to pnpm workspaces, published @ewanc26/tid to npm, and consolidated packages.</description>
			<link>https://devlog.croft.click/2026/03/04/pkgs-workspace-migration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/04/pkgs-workspace-migration</guid>
			<pubDate>Wed, 04 Mar 2026 12:00:00 GMT</pubDate>
			<category>pkgs</category>
		</item>
		<item>
			<title>Azurite UI Overhaul</title>
			<description></description>
			<link>https://devlog.croft.click/2026/03/01/azurite-ui-overhaul</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/03/01/azurite-ui-overhaul</guid>
			<pubDate>Sun, 01 Mar 2026 12:00:00 GMT</pubDate>
			<category>azurite</category>
			<category>ui</category>
			<category>auth</category>
		</item>
		<item>
			<title>Azurite — Experimental Bluesky Client</title>
			<description>Bluesky client with keychain auth, timeline, notifications, search, thread view, and compose.</description>
			<link>https://devlog.croft.click/2026/02/28/azurite-bluesky-client</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/02/28/azurite-bluesky-client</guid>
			<pubDate>Sat, 28 Feb 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
		</item>
		<item>
			<title>Docsite Launch</title>
			<description>Centralised project documentation at docs.ewancroft.uk, published to AT Protocol via Sequoia.</description>
			<link>https://devlog.croft.click/2026/02/23/docsite-launch</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/02/23/docsite-launch</guid>
			<pubDate>Mon, 23 Feb 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Nix Config Rewrite</title>
			<description>Rewrote the entire nix-config around proper Nix modules — replaced custom patterns with the module system, switched to sops-nix, moved desktop to KDE Plasma.</description>
			<link>https://devlog.croft.click/2026/02/18/nix-config-rewrite</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/02/18/nix-config-rewrite</guid>
			<pubDate>Wed, 18 Feb 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
		</item>
		<item>
			<title>Nix Config — Three Machines, One Config</title>
			<description>One flake managing macmini, laptop, and a theoretical server — two booting successfully, one still aspirational.</description>
			<link>https://devlog.croft.click/2026/02/11/nix-config-three-machines</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/02/11/nix-config-three-machines</guid>
			<pubDate>Wed, 11 Feb 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
		</item>
		<item>
			<title>Back to NixOS</title>
			<description>Returned to NixOS on the Dell Inspiron 3501 after a stint with Bazzite — declarative config keeps pulling back.</description>
			<link>https://devlog.croft.click/2026/02/08/back-to-nixos</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/02/08/back-to-nixos</guid>
			<pubDate>Sun, 08 Feb 2026 12:00:00 GMT</pubDate>
			<category>infra</category>
		</item>
		<item>
			<title>Malachite v0.9.0 — Performance &amp; Rate Limiting Overhaul</title>
			<description>Implementing adaptive rate limiting, dynamic batching, and SHA-512 credential security.</description>
			<link>https://devlog.croft.click/2026/02/07/malachite-performance-overhaul</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/02/07/malachite-performance-overhaul</guid>
			<pubDate>Sat, 07 Feb 2026 12:00:00 GMT</pubDate>
			<category>malachite</category>
			<category>atproto</category>
			<category>performance</category>
			<category>security</category>
		</item>
		<item>
			<title>Transitioning to Standard.site Lexicons</title>
			<description>Retiring legacy WhiteWind and Leaflet support in favor of the new Standard.site implementation.</description>
			<link>https://devlog.croft.click/2026/01/26/standard-site-migration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/01/26/standard-site-migration</guid>
			<pubDate>Mon, 26 Jan 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
		</item>
		<item>
			<title>Minecraft Server — Dynamic Hardware Config</title>
			<description>Implementing a hardware-aware configuration system for the Minecraft server.</description>
			<link>https://devlog.croft.click/2026/01/21/mc-server-hardware-config</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/01/21/mc-server-hardware-config</guid>
			<pubDate>Wed, 21 Jan 2026 12:00:00 GMT</pubDate>
			<category>mc-server</category>
			<category>infra</category>
			<category>nix</category>
		</item>
		<item>
			<title>Malachite Rename and Feature Expansion</title>
			<description>Renamed lastfm-importer to malachite, added Spotify support, interactive mode, and improved rate limiting.</description>
			<link>https://devlog.croft.click/2026/01/13/malachite-rename</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/01/13/malachite-rename</guid>
			<pubDate>Tue, 13 Jan 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Standard.site and Coordination</title>
			<description>Adopting standard.site lexicons for cross-platform interoperability — why coordination matters more than individual features in the AT Protocol ecosystem.</description>
			<link>https://devlog.croft.click/2026/01/05/standard-site-coordination</link>
			<guid isPermaLink="true">https://devlog.croft.click/2026/01/05/standard-site-coordination</guid>
			<pubDate>Mon, 05 Jan 2026 12:00:00 GMT</pubDate>
			<category>atproto</category>
		</item>
		<item>
			<title>Caching, Skeleton Loading, and Happy Mac</title>
			<description>Comprehensive caching to prevent 504s, skeleton loaders for instant page loads, and a Happy Mac easter egg.</description>
			<link>https://devlog.croft.click/2025/12/30/caching-skeletons-happymac</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/12/30/caching-skeletons-happymac</guid>
			<pubDate>Tue, 30 Dec 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Website — Pronouns and Accessibility Improvements</title>
			<description>Added pronouns to the profile card and improved accessibility across themes.</description>
			<link>https://devlog.croft.click/2025/12/29/pronouns-accessibility</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/12/29/pronouns-accessibility</guid>
			<pubDate>Mon, 29 Dec 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Joining Jollywhoppers</title>
			<description>Became a member of Jollywhoppers — building atproto-connect, a Fabric Minecraft mod linking the game to AT Protocol.</description>
			<link>https://devlog.croft.click/2025/12/28/jollywhoppers</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/12/28/jollywhoppers</guid>
			<pubDate>Sun, 28 Dec 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>game</category>
			<category>collab</category>
		</item>
		<item>
			<title>Social Sync v0.4.0 — Security Hardening</title>
			<description>Implementing encrypted session storage, rate limiting, and audit logging for atproto-connect.</description>
			<link>https://devlog.croft.click/2025/12/22/socialsync-v0-4-0-security</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/12/22/socialsync-v0-4-0-security</guid>
			<pubDate>Mon, 22 Dec 2025 12:00:00 GMT</pubDate>
			<category>socialsync</category>
			<category>atproto</category>
			<category>minecraft</category>
			<category>security</category>
		</item>
		<item>
			<title>Social Sync — Minecraft Meets AT Protocol</title>
			<description>Minecraft mod syncing player stats, achievements, and sessions to AT Protocol with OAuth and encrypted storage.</description>
			<link>https://devlog.croft.click/2025/12/20/socialsync-minecraft-atproto</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/12/20/socialsync-minecraft-atproto</guid>
			<pubDate>Sat, 20 Dec 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>game</category>
		</item>
		<item>
			<title>Initial Launch of atproto-connect</title>
			<description>Bootstrapping a Minecraft-to-AT-Protocol bridge for Fabric 1.21.10.</description>
			<link>https://devlog.croft.click/2025/12/20/atproto-connect-initial-launch</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/12/20/atproto-connect-initial-launch</guid>
			<pubDate>Sat, 20 Dec 2025 12:00:00 GMT</pubDate>
			<category>socialsync</category>
			<category>atproto</category>
			<category>minecraft</category>
			<category>fabric</category>
		</item>
		<item>
			<title>Welcome to Macintosh — Happy Mac Easter Egg</title>
			<description>Hidden Easter egg on the website — click the version number 24 times for a pixelated Happy Mac bouncing across the viewport with the startup chord.</description>
			<link>https://devlog.croft.click/2025/12/17/happy-mac-easter-egg</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/12/17/happy-mac-easter-egg</guid>
			<pubDate>Wed, 17 Dec 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Giving Up on Rust — A Post-Mortem</title>
			<description>After five Rustlings sessions and countless compiler battles, called it — Rust isn&apos;t the right tool for the projects being built.</description>
			<link>https://devlog.croft.click/2025/12/07/rust-post-mortem</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/12/07/rust-post-mortem</guid>
			<pubDate>Sun, 07 Dec 2025 12:00:00 GMT</pubDate>
			<category>rust</category>
			<category>reflection</category>
		</item>
		<item>
			<title>Implementing a Decimal Clock</title>
			<description>Added a bespoke decimal clock to the footer because base-10 time just makes sense.</description>
			<link>https://devlog.croft.click/2025/12/01/decimal-clock-implementation</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/12/01/decimal-clock-implementation</guid>
			<pubDate>Mon, 01 Dec 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Shortlink Service for AT Protocol</title>
			<description>Shortlink service resolving AT Protocol handles and DIDs with QR codes and domain-aware shortcodes.</description>
			<link>https://devlog.croft.click/2025/11/24/shortlink-service</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/11/24/shortlink-service</guid>
			<pubDate>Mon, 24 Nov 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Kibun Status &amp; Custom Slug Routing</title>
			<description>Integrating Kibun status records and implementing a configurable slug-to-publication mapping system.</description>
			<link>https://devlog.croft.click/2025/11/22/kibun-routing-runes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/11/22/kibun-routing-runes</guid>
			<pubDate>Sat, 22 Nov 2025 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>atproto</category>
			<category>architecture</category>
		</item>
		<item>
			<title>Bluesky Ollama Bot</title>
			<description>Experimental bot using Ollama for LLM-generated Bluesky posts.</description>
			<link>https://devlog.croft.click/2025/11/16/ollama-bot</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/11/16/ollama-bot</guid>
			<pubDate>Sun, 16 Nov 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>bots</category>
		</item>
		<item>
			<title>PDS DoS Incident</title>
			<description>Accidentally rate-limited the entire PDS by blasting records at the API — the lesson that built Malachite&apos;s rate limiting.</description>
			<link>https://devlog.croft.click/2025/11/15/pds-dos-incident</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/11/15/pds-dos-incident</guid>
			<pubDate>Sat, 15 Nov 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>infra</category>
		</item>
		<item>
			<title>Malachite — Last.fm to Teal.fm Converter</title>
			<description>CLI tool for importing Last.fm and Spotify scrobbles to AT Protocol as Teal.fm records.</description>
			<link>https://devlog.croft.click/2025/11/14/malachite-initial-release</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/11/14/malachite-initial-release</guid>
			<pubDate>Fri, 14 Nov 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>pkgs</category>
			<category>tooling</category>
		</item>
		<item>
			<title>MusicStatusCard and Masonry Layout</title>
			<description>Music status card with MusicBrainz integration and masonry-style homepage layout.</description>
			<link>https://devlog.croft.click/2025/11/13/music-status-masonry</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/11/13/music-status-masonry</guid>
			<pubDate>Thu, 13 Nov 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>croft.click Landing Page</title>
			<description>Bought croft.click on a Black Friday sale — currently a 307 redirect to ewancroft.uk while figuring out what to do with it.</description>
			<link>https://devlog.croft.click/2025/11/10/croft-click</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/11/10/croft-click</guid>
			<pubDate>Mon, 10 Nov 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Website — Slug Mapping and Robust Routing</title>
			<description>Configurable slug-to-publication mapping and slug param matcher for clean URLs.</description>
			<link>https://devlog.croft.click/2025/10/27/slug-mapping-routing</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/10/27/slug-mapping-routing</guid>
			<pubDate>Mon, 27 Oct 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>website</category>
		</item>
		<item>
			<title>Completing the Leaflet Migration</title>
			<description>All WhiteWind posts converted to Leaflet format — blog.ewancroft.uk becomes home base, with link rot as the lingering cost.</description>
			<link>https://devlog.croft.click/2025/10/24/leaflet-migration-complete</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/10/24/leaflet-migration-complete</guid>
			<pubDate>Fri, 24 Oct 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
		</item>
		<item>
			<title>Leaflet Migration</title>
			<description>Moving the blog from WhiteWind to Leaflet on AT Protocol — converting existing posts and building the tooling to do it.</description>
			<link>https://devlog.croft.click/2025/10/24/leaflet-migration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/10/24/leaflet-migration</guid>
			<pubDate>Fri, 24 Oct 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
		</item>
		<item>
			<title>Website — Svelte 5 Runes Migration</title>
			<description>Migrated layout and components to Svelte 5 runes and reactive meta handling.</description>
			<link>https://devlog.croft.click/2025/10/19/svelte-5-migration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/10/19/svelte-5-migration</guid>
			<pubDate>Sun, 19 Oct 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Website — Inter Font and Semantic Colour Naming</title>
			<description>Added Inter as the primary typeface and switched to semantic colour naming.</description>
			<link>https://devlog.croft.click/2025/10/16/inter-font-semantic-colours</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/10/16/inter-font-semantic-colours</guid>
			<pubDate>Thu, 16 Oct 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Card UI and BlueskyPostCard</title>
			<description>Homepage redesign with reusable Card UI system and BlueskyPostCard with lightbox and rich text.</description>
			<link>https://devlog.croft.click/2025/10/15/card-ui-blueskypostcard</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/10/15/card-ui-blueskypostcard</guid>
			<pubDate>Wed, 15 Oct 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>website</category>
		</item>
		<item>
			<title>WhiteWind to Leaflet Converter</title>
			<description>Built a conversion tool to migrate blog content between AT Protocol publishing platforms — out of spite for the lack of one.</description>
			<link>https://devlog.croft.click/2025/10/15/whitewind-leaflet-converter</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/10/15/whitewind-leaflet-converter</guid>
			<pubDate>Wed, 15 Oct 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Building a Modular AT Protocol Service Layer</title>
			<description>Deep integration with the AT Protocol, pulling posts directly from the PDS and introducing a new Card UI system.</description>
			<link>https://devlog.croft.click/2025/10/13/at-protocol-service-layer</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/10/13/at-protocol-service-layer</guid>
			<pubDate>Mon, 13 Oct 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>website</category>
		</item>
		<item>
			<title>Website — v10 Reset</title>
			<description>Nuked ewancroft.uk from orbit and started fresh — the tenth iteration, built from scratch with a clean architecture.</description>
			<link>https://devlog.croft.click/2025/10/12/website-v10-reset</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/10/12/website-v10-reset</guid>
			<pubDate>Sun, 12 Oct 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Tangled Sync</title>
			<description>Sync tool for mirroring GitHub repos to Tangled with force-sync and AT Protocol testing.</description>
			<link>https://devlog.croft.click/2025/10/11/tangled-sync</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/10/11/tangled-sync</guid>
			<pubDate>Sat, 11 Oct 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Website — Hyperfocus Updates</title>
			<description>Three significant UX improvements shipped in one evening — navigation, content display, and interaction patterns.</description>
			<link>https://devlog.croft.click/2025/09/26/website-hyperfocus-updates</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/09/26/website-hyperfocus-updates</guid>
			<pubDate>Fri, 26 Sep 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Technical Polish — Inter, KaTeX, and Prose Styling</title>
			<description>Swapping to Inter for better readability, adding KaTeX support, and refining prose styling.</description>
			<link>https://devlog.croft.click/2025/09/19/technical-polish-typography</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/09/19/technical-polish-typography</guid>
			<pubDate>Fri, 19 Sep 2025 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>design</category>
			<category>typography</category>
		</item>
		<item>
			<title>OG Images and Blog Enhancements</title>
			<description>Dynamic OG image generation, reading time, heading underlines, and code block styling.</description>
			<link>https://devlog.croft.click/2025/09/14/og-images-blog-enhancements</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/09/14/og-images-blog-enhancements</guid>
			<pubDate>Sun, 14 Sep 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Link Rot and Eight Iterations of ewancroft.uk</title>
			<description>Eight versions of the website, each leaving dead URLs — the Hugo years, the SvelteKit migration, and building a slug mapping system to fix it.</description>
			<link>https://devlog.croft.click/2025/09/13/link-rot-website-iterations</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/09/13/link-rot-website-iterations</guid>
			<pubDate>Sat, 13 Sep 2025 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>reflection</category>
		</item>
		<item>
			<title>Website — Scroll-to-Top and ToC Improvements</title>
			<description>Scroll-to-top button, mobile progress bar, and improved table of contents layout.</description>
			<link>https://devlog.croft.click/2025/09/07/scroll-to-top-toc</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/09/07/scroll-to-top-toc</guid>
			<pubDate>Sun, 07 Sep 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Howling at the Digital Moon — Wolf-Themed Bluesky Client Concept</title>
			<description>Conceptual design for a lycanthropic Bluesky client — dark theme, moon phase integration, and the scope creep that keeps it theoretical.</description>
			<link>https://devlog.croft.click/2025/09/02/witchsky-concept</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/09/02/witchsky-concept</guid>
			<pubDate>Tue, 02 Sep 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
		</item>
		<item>
			<title>Website — en-GB Localisation</title>
			<description>Added en-GB localisation throughout the site — licence, colour, behaviour.</description>
			<link>https://devlog.croft.click/2025/08/29/en-gb-localisation</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/08/29/en-gb-localisation</guid>
			<pubDate>Fri, 29 Aug 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Atproto Snake Game Improvements</title>
			<description></description>
			<link>https://devlog.croft.click/2025/08/15/atproto-snake-login</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/08/15/atproto-snake-login</guid>
			<pubDate>Fri, 15 Aug 2025 12:00:00 GMT</pubDate>
			<category>atproto-snake</category>
			<category>game</category>
			<category>auth</category>
		</item>
		<item>
			<title>did:web ATProto Identity Proof of Concept</title>
			<description>Created @web.ewancroft.uk as a functional did:web identity within the AT Protocol ecosystem — research experiment, not a permanent switch.</description>
			<link>https://devlog.croft.click/2025/08/10/did-web-identity</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/08/10/did-web-identity</guid>
			<pubDate>Sun, 10 Aug 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
		</item>
		<item>
			<title>M2 to M4 Mac Mini Upgrade</title>
			<description>Upgraded from the M2 Mac Mini to the M4 — better performance, more headroom for self-hosted services.</description>
			<link>https://devlog.croft.click/2025/08/09/mac-mini-upgrade</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/08/09/mac-mini-upgrade</guid>
			<pubDate>Sat, 09 Aug 2025 12:00:00 GMT</pubDate>
			<category>infra</category>
		</item>
		<item>
			<title>Rustlings — First Steps into Rust</title>
			<description>Five Rustlings sessions covering variables through type systems — the enthusiasm, the compiler battles, and the decision to stop.</description>
			<link>https://devlog.croft.click/2025/08/01/rustlings</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/08/01/rustlings</guid>
			<pubDate>Fri, 01 Aug 2025 12:00:00 GMT</pubDate>
			<category>rust</category>
			<category>learning</category>
		</item>
		<item>
			<title>Website — Dynamic OG Images</title>
			<description>Server-side Open Graph image generation with SvelteKit — fonts that wouldn&apos;t load, endpoints that worked in dev but not production, and the eventual working solution.</description>
			<link>https://devlog.croft.click/2025/07/30/dynamic-og-images</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/07/30/dynamic-og-images</guid>
			<pubDate>Wed, 30 Jul 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>The iMac Server</title>
			<description>Attempting to repurpose a 2008 iMac as a server — bricked OS, failed USB installs, and the eventual Mac Mini replacement.</description>
			<link>https://devlog.croft.click/2025/07/28/imac-server</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/07/28/imac-server</guid>
			<pubDate>Mon, 28 Jul 2025 12:00:00 GMT</pubDate>
			<category>infra</category>
		</item>
		<item>
			<title>Linkat Directory</title>
			<description>Linkat-powered user directory with profile banners, descriptions, and metadata display.</description>
			<link>https://devlog.croft.click/2025/07/27/linkat-directory</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/07/27/linkat-directory</guid>
			<pubDate>Sun, 27 Jul 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Website — Profile Layout Refresh</title>
			<description>Redesigned the profile component from centred business-card layout to banner-integrated design with left-aligned content.</description>
			<link>https://devlog.croft.click/2025/07/26/profile-layout-refresh</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/07/26/profile-layout-refresh</guid>
			<pubDate>Sat, 26 Jul 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Archive Milestones &amp; Theme Expansion</title>
			<description>Implementing post milestones, improving archive navigation, and adding the Werewolf theme.</description>
			<link>https://devlog.croft.click/2025/07/24/archive-milestones-themes</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/07/24/archive-milestones-themes</guid>
			<pubDate>Thu, 24 Jul 2025 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>design</category>
			<category>svelte</category>
		</item>
		<item>
			<title>LLM Analyser</title>
			<description>Tool for analysing LLM outputs and responses.</description>
			<link>https://devlog.croft.click/2025/07/17/llm-analyser</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/07/17/llm-analyser</guid>
			<pubDate>Thu, 17 Jul 2025 12:00:00 GMT</pubDate>
			<category>tooling</category>
		</item>
		<item>
			<title>AT Protocol Snake Game</title>
			<description>Browser Snake game with AT Protocol OAuth login and score submission via custom lexicons.</description>
			<link>https://devlog.croft.click/2025/06/19/atproto-snake-game</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/06/19/atproto-snake-game</guid>
			<pubDate>Thu, 19 Jun 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>game</category>
		</item>
		<item>
			<title>Moon Tracker Bot</title>
			<description>Daily moon phase posts to Bluesky with multi-source API and optional Ollama LLM descriptions.</description>
			<link>https://devlog.croft.click/2025/06/17/moon-tracker-bot</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/06/17/moon-tracker-bot</guid>
			<pubDate>Tue, 17 Jun 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>bots</category>
		</item>
		<item>
			<title>Self-Hosted Minecraft Server</title>
			<description>Replaced Aternos with a self-hosted server on the M2 Mac Mini — no more queues, full control, direct access.</description>
			<link>https://devlog.croft.click/2025/06/10/mc-server-self-hosted</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/06/10/mc-server-self-hosted</guid>
			<pubDate>Tue, 10 Jun 2025 12:00:00 GMT</pubDate>
			<category>infra</category>
			<category>game</category>
		</item>
		<item>
			<title>Minecraft Server Configuration</title>
			<description>NixOS Minecraft server config with dynamic hardware-based configuration.</description>
			<link>https://devlog.croft.click/2025/06/05/mc-server</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/06/05/mc-server</guid>
			<pubDate>Thu, 05 Jun 2025 12:00:00 GMT</pubDate>
			<category>infra</category>
			<category>game</category>
		</item>
		<item>
			<title>Professional Identity &amp; Lexicon Expansion</title>
			<description>Integrating professional profile data from AT Protocol and expanding status lexicons.</description>
			<link>https://devlog.croft.click/2025/05/23/professional-identity-lexicons</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/05/23/professional-identity-lexicons</guid>
			<pubDate>Fri, 23 May 2025 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>atproto</category>
			<category>identity</category>
		</item>
		<item>
			<title>Testing Leaflet</title>
			<description>Evaluating Leaflet as a WhiteWind replacement — subdomain requirements, AT Protocol integration gaps, and early impressions.</description>
			<link>https://devlog.croft.click/2025/05/21/leaflet-testing</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/05/21/leaflet-testing</guid>
			<pubDate>Wed, 21 May 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
		</item>
		<item>
			<title>Custom Lexicons and Dynamic Link Board</title>
			<description>Added custom lexicon definitions for status records and replaced static links with a dynamic link board from AT Protocol.</description>
			<link>https://devlog.croft.click/2025/05/12/lexicons-dynamic-links</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/05/12/lexicons-dynamic-links</guid>
			<pubDate>Mon, 12 May 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>website</category>
		</item>
		<item>
			<title>Collaborative Platformer</title>
			<description>A collaborative 3D platformer game built with Godot.</description>
			<link>https://devlog.croft.click/2025/05/02/platformer-collab</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/05/02/platformer-collab</guid>
			<pubDate>Fri, 02 May 2025 12:00:00 GMT</pubDate>
			<category>game</category>
		</item>
		<item>
			<title>My Journey to NixOS</title>
			<description>Adopting NixOS on the Dell Inspiron 3501 — from macOS user to declarative Linux config, the learning curve, and what actually clicked.</description>
			<link>https://devlog.croft.click/2025/04/20/nixos-journey</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/04/20/nixos-journey</guid>
			<pubDate>Sun, 20 Apr 2025 12:00:00 GMT</pubDate>
			<category>infra</category>
		</item>
		<item>
			<title>Website SvelteKit Migration</title>
			<description></description>
			<link>https://devlog.croft.click/2025/04/08/website-sveltekit-migration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/04/08/website-sveltekit-migration</guid>
			<pubDate>Tue, 08 Apr 2025 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>sveltekit</category>
			<category>migration</category>
		</item>
		<item>
			<title>Migrating the Site to SvelteKit</title>
			<description>Rebuilding the website from scratch using SvelteKit for better performance and a more modern development experience.</description>
			<link>https://devlog.croft.click/2025/04/08/migrating-to-sveltekit</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/04/08/migrating-to-sveltekit</guid>
			<pubDate>Tue, 08 Apr 2025 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>tooling</category>
		</item>
		<item>
			<title>Reverse Engineering an Apple Shortcut</title>
			<description>Deconstructed dame.is&apos;s dynamic avatar Apple Shortcut and rebuilt it as a Python automation — hourly profile image updates via AT Protocol.</description>
			<link>https://devlog.croft.click/2025/02/23/apple-shortcut-reverse-engineering</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/02/23/apple-shortcut-reverse-engineering</guid>
			<pubDate>Sun, 23 Feb 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>tooling</category>
			<category>python</category>
		</item>
		<item>
			<title>Avatar Updater Bot</title>
			<description>Automatically updates a Bluesky profile avatar on a schedule with optional banner updates.</description>
			<link>https://devlog.croft.click/2025/02/21/avatar-updater</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/02/21/avatar-updater</guid>
			<pubDate>Fri, 21 Feb 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>bots</category>
		</item>
		<item>
			<title>Gradient Profile Banner Generator</title>
			<description>Generates gradient profile banners for Bluesky users with custom sizing and grain effects.</description>
			<link>https://devlog.croft.click/2025/02/20/gradient-generator</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/02/20/gradient-generator</guid>
			<pubDate>Thu, 20 Feb 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>bots</category>
		</item>
		<item>
			<title>PDS Backup Tool</title>
			<description>CLI tool for backing up AT Protocol PDS repositories.</description>
			<link>https://devlog.croft.click/2025/02/19/pds-backup</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/02/19/pds-backup</guid>
			<pubDate>Wed, 19 Feb 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>infra</category>
		</item>
		<item>
			<title>Dynamic Assets &amp; Music Integration</title>
			<description>Implementing a hue-shifting favicon, dynamic embed images, and static music stats.</description>
			<link>https://devlog.croft.click/2025/02/09/dynamic-assets-music</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/02/09/dynamic-assets-music</guid>
			<pubDate>Sun, 09 Feb 2025 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>design</category>
			<category>music</category>
		</item>
		<item>
			<title>Theme System and Multi-Theme Support</title>
			<description>Theme toggle with multiple colour themes, persisted via localStorage, later expanded for WCAG 2.1 AA compliance.</description>
			<link>https://devlog.croft.click/2025/02/03/theme-system</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/02/03/theme-system</guid>
			<pubDate>Mon, 03 Feb 2025 12:00:00 GMT</pubDate>
			<category>website</category>
		</item>
		<item>
			<title>Struggles Adapting to the AT Protocol</title>
			<description>Early experiences with the AT Protocol SDK — confusing docs, Python and TypeScript friction, and the learning curve of a new API paradigm.</description>
			<link>https://devlog.croft.click/2025/01/30/atproto-struggles</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/01/30/atproto-struggles</guid>
			<pubDate>Thu, 30 Jan 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>reflection</category>
		</item>
		<item>
			<title>Website AT Protocol Integration</title>
			<description></description>
			<link>https://devlog.croft.click/2025/01/28/website-atproto-integration</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/01/28/website-atproto-integration</guid>
			<pubDate>Tue, 28 Jan 2025 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>atproto</category>
			<category>integration</category>
		</item>
		<item>
			<title>AT Protocol Website Rewrite</title>
			<description>Replaced static HTML with a dynamic AT Protocol-powered frontend fetching data from the PDS.</description>
			<link>https://devlog.croft.click/2025/01/27/atprotocol-website-rewrite</link>
			<guid isPermaLink="true">https://devlog.croft.click/2025/01/27/atprotocol-website-rewrite</guid>
			<pubDate>Mon, 27 Jan 2025 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>website</category>
		</item>
		<item>
			<title>Winter Overhaul — A Fresh Start</title>
			<description>A complete overhaul of the website, focusing on a cleaner aesthetic and simplified architecture.</description>
			<link>https://devlog.croft.click/2024/12/05/winter-overhaul</link>
			<guid isPermaLink="true">https://devlog.croft.click/2024/12/05/winter-overhaul</guid>
			<pubDate>Thu, 05 Dec 2024 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>design</category>
		</item>
		<item>
			<title>Bluesky Markov Chain Bot</title>
			<description>Ported the Markov chain bot to Bluesky with configurable character limits.</description>
			<link>https://devlog.croft.click/2024/06/09/bluesky-markov-bot</link>
			<guid isPermaLink="true">https://devlog.croft.click/2024/06/09/bluesky-markov-bot</guid>
			<pubDate>Sun, 09 Jun 2024 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>bots</category>
		</item>
		<item>
			<title>Bean Dumper Rewrite</title>
			<description></description>
			<link>https://devlog.croft.click/2024/06/06/bean-dumper-rewrite</link>
			<guid isPermaLink="true">https://devlog.croft.click/2024/06/06/bean-dumper-rewrite</guid>
			<pubDate>Thu, 06 Jun 2024 12:00:00 GMT</pubDate>
			<category>bean-dumper</category>
			<category>rewrite</category>
			<category>logging</category>
		</item>
		<item>
			<title>Awoo Bot — Wolf Sounds on Bluesky</title>
			<description>Bot that posts wolf sounds to Bluesky with variable delay and nocturnal probability weighting.</description>
			<link>https://devlog.croft.click/2024/05/19/awoo-bot</link>
			<guid isPermaLink="true">https://devlog.croft.click/2024/05/19/awoo-bot</guid>
			<pubDate>Sun, 19 May 2024 12:00:00 GMT</pubDate>
			<category>atproto</category>
			<category>bots</category>
		</item>
		<item>
			<title>Mastodon Markov Chain Bot</title>
			<description>First bot — a Markov chain text generator for Mastodon.</description>
			<link>https://devlog.croft.click/2024/03/02/mastodon-markov-bot</link>
			<guid isPermaLink="true">https://devlog.croft.click/2024/03/02/mastodon-markov-bot</guid>
			<pubDate>Sat, 02 Mar 2024 12:00:00 GMT</pubDate>
			<category>bots</category>
		</item>
		<item>
			<title>The Birth of Ewan&apos;s Corner — Git Migration</title>
			<description>Transitioning the website to a Hugo-powered digital garden with git version control.</description>
			<link>https://devlog.croft.click/2024/02/21/website-launch</link>
			<guid isPermaLink="true">https://devlog.croft.click/2024/02/21/website-launch</guid>
			<pubDate>Wed, 21 Feb 2024 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>personal</category>
		</item>
		<item>
			<title>The First Seed — Ewan&apos;s Corner is Born</title>
			<description>The original, non-git-tracked launch of my personal website.</description>
			<link>https://devlog.croft.click/2023/05/31/the-first-seed</link>
			<guid isPermaLink="true">https://devlog.croft.click/2023/05/31/the-first-seed</guid>
			<pubDate>Wed, 31 May 2023 12:00:00 GMT</pubDate>
			<category>website</category>
			<category>personal</category>
		</item>
	</channel>
</rss>