What changed, when, and why.

September 2026

September 10, 2026 at 12:00:00 AM UTC

pkgs fixes landing-ui mobile layout, iOS input zoom, and jasper-web's missing background tokens

landing-ui gained 16px form inputs to stop iOS focus zoom, reduced-motion support, and tighter small-screen padding. Jasper-web's import page cards rendered with no background because --bg-secondary and --bg-hover were never defined. Opal-web's upload step showed a raw file input instead of a drop zone. Bismuth-web's header overflowed on narrow screens.

pkgslanding-uijasper-webopal-webbismuth-webdesignmobiletypescript
August 2026

August 25, 2026 at 12:00:00 AM UTC

Inkwell ships v2.4.0 — Kotlin Multiplatform shared core, writer, accessibility, and F-Droid distribution

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.

inkwellatprotoiosswiftkotlin

August 24, 2026 at 12:00:00 AM UTC

MetalBear gains account-cache eviction, durable blob storage, multipart video uploads, and a modular build profile

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.

metalbearatprotocperformance

August 23, 2026 at 12:00:00 AM UTC

New project — streemskle, a SwiftUI Streamplace video client

A native SwiftUI app for browsing and watching Streamplace video content, built from scratch in 29 commits over under a week. Creator profiles, video navigation, search, resilient native playback, rich-text video descriptions, and persisted Streamplace node settings, all wired through AT Protocol.

streemskleatprotoswiftios

August 22, 2026 at 12:00:00 AM UTC

pkgs ships 20+ tourmaline charts, fixes malachite's Apple Music and ListenBrainz pipelines, and migrates to @bsky/sdk

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.

pkgstourmalinemalachiteatprototypescriptdesign

August 19, 2026 at 12:00:00 AM UTC

Willow gains OAuth, compose, notifications, and thread/profile views

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.

willowatprotoiosswift

August 19, 2026 at 12:00:00 AM UTC

cobalt adds actor search, custom feeds, curated lists, and reply-gating

A C AT Protocol client gained actor search with typeahead, custom feeds sourced through the timeline's own storage, browse-only curated list browsing, and reply-gate composition for new posts. 8 commits, ~1800 lines added.

cobaltatprotoc

August 18, 2026 at 12:00:00 AM UTC

website fixes blog timezone derivation and design-language token compliance

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.

websitedesign

August 18, 2026 at 12:00:00 AM UTC

channel-blue adds avatar rendering to the profile screen

The host-side UI for wolfram drew the user's avatar on the profile screen, fixed the wolfram build path for cross-compilation, and marked avatar milestones as done on the roadmap.

channel-bluewolframatprotoc

August 13, 2026 at 12:00:00 AM UTC

Vercel CLI reconnected and every project relinked to the current team

The local Vercel CLI wasn't even installed, and most existing project links pointed at an old, now-nonexistent team. Ten projects were relinked or freshly linked to ewanc26's projects, two orphaned links got brand-new projects instead, and the pkgs root build was disabled since it has no deployable output.

verceltoolinginfrastructure

August 13, 2026 at 12:00:00 AM UTC

MetalBear gets a local dev instance and fixes its own did:web self-resolution

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.

metalbearatprotopdsctooling

August 13, 2026 at 12:00:00 AM UTC

malachite gains a polish migration subtool

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.

pkgsmalachitemalachite-webcroft-click-coreatproto

August 13, 2026 at 12:00:00 AM UTC

New project — keepsake, a text RPG whose save file is your AT Protocol DID

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.

keepsakeatprotocppwolframbluesky

August 12, 2026 at 12:00:00 AM UTC

wolfram closes a DPoP sender-constraint bypass and hardens identity resolution

A DPoP-bound OAuth token could be silently rebound to an attacker'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.

wolframatprotocsdk

August 12, 2026 at 12:00:00 AM UTC

wolfram's server goes multithreaded, and the Wii build gets un-broken

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.

wolframatprotocsdkwii

August 12, 2026 at 12:00:00 AM UTC

wolfram's CLI becomes a real AT Protocol client, and the agent layer sheds its stubs

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 "honest stubs" got real implementations.

wolframatprotocsdk

August 12, 2026 at 12:00:00 AM UTC

MetalBear closes its reference-parity gap on server, admin, and repo writes

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.

metalbearatprotopdscmoderation

August 12, 2026 at 12:00:00 AM UTC

MetalBear hardens OAuth, session scopes, and identity against the reference PDS

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.

metalbearatprotopdscoauth

August 12, 2026 at 12:00:00 AM UTC

MetalBear's frontend becomes a self-service console, and CI starts testing the containers it ships

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.

metalbearatprotopdsctooling

August 12, 2026 at 12:00:00 AM UTC

Inkwell reaches standard.horse content parity and ships on AltStore

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.

inkwellatprotoiosswift

August 12, 2026 at 12:00:00 AM UTC

docsite moves to a card-based layout and puts GitHub Sponsors in the sidebar

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.

docsitesveltedocumentation

August 11, 2026 at 12:00:00 AM UTC

pkgs adds ListenBrainz support and consolidates its tools onto croft-click-core

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.

pkgscroft-clickmalachitetourmalinepds-landingatproto

August 11, 2026 at 12:00:00 AM UTC

cobalt goes from network scaffold to a working client, timeline through moderation

Sign-in against a real PDS surfaced that curl's own TLS handshake shared the Wii U's broken entropy source, not just Wolfram'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.

cobaltwiiublueskyhomebrew

August 10, 2026 at 12:00:00 AM UTC

Selenium gets full C keyword coverage, do-while, goto, sizeof, and strict C99 output

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.

seleniumlanguage-designcompilersc

August 10, 2026 at 12:00:00 AM UTC

New project — plainspeak, an esoteric language with English sentence grammar

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.

plainspeakesolangcompilersccpp

August 9, 2026 at 12:00:00 AM UTC

Canonical ATProto backlinks, a security pass, and a two-month editorial refit

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.

websiteatprotosveltekitsecurity

August 8, 2026 at 12:00:00 AM UTC

nix config hardening, PGP-only secrets, and a Mac defaults resync

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.

nixinframacostooling

August 5, 2026 at 12:00:00 AM UTC

Isolith fixes a batch of bugs filed after the July release

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.

isolithgodotcsharpgame

August 4, 2026 at 12:00:00 AM UTC

New project — Willow, a native SwiftUI Bluesky client

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.

willowatprotoblueskyiosmacosswift

August 4, 2026 at 12:00:00 AM UTC

New project — a Godot 4 C#/Mono RPG starter template

A from-scratch top-down RPG scaffold for Godot 4.7's .NET build, built because no existing template combined Godot-Mono with an RPG-specific structure.

rpggodotcsharpgametemplate

August 4, 2026 at 12:00:00 AM UTC

experai gets machine-readable output, opencode/MCP integration, and AT Protocol weight publishing

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.

experairustmachine-learningatprotoopencodemcp

August 3, 2026 at 12:00:00 AM UTC

New project — bluesky-dadaist, a markov-chain oracle bot for Bluesky

A C23 bot that builds a live word-level markov chain from the AT Protocol firehose and replies to mentions with surreal "oracle" text, presented as mystical AI but actually a statistical collage of real posts.

bluesky-dadaistatprotobotsc

August 1, 2026 at 12:00:00 AM UTC

New project — auto-sponsor-links, a monthly sponsor-badge PR bot

A GitHub Actions workflow that scans all of an account'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.

auto-sponsor-linksgithub-actionsautomationtooling
July 2026

July 30, 2026 at 12:00:00 AM UTC

New project — Isolith, an isometric platformer with an adaptive endless mode

A Godot 4/C# isometric platformer whose endless mode reads exactly how the player's last section went and reshapes the next one, with an optional AT Protocol stat-sync side feature.

isolithgodotcsharpgame

July 29, 2026 at 12:00:00 AM UTC

wolfram grows a multi-tenant resolver, sheds storage, and builds for Wii U

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.

wolframatprotocsdk

July 28, 2026 at 12:00:00 AM UTC

website-comm-template unbreaks install and closes a header-injection hole

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.

website-comm-templatetoolingsecuritya11y

July 28, 2026 at 12:00:00 AM UTC

pds-status-tophhie fixes its install and types its remote responses

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.

pds-status-tophhietoolingsecurity

July 28, 2026 at 12:00:00 AM UTC

MetalBear goes from single-account prototype to a federating PDS

MetalBear rebuilt its account model twice, migrated storage off wolfram, validated records against the lexicon corpus, and is now crawled by Bluesky's relays and indexed by the AppView. 0.2.0 to 0.7.0.

metalbearatprotopdscfederation

July 28, 2026 at 12:00:00 AM UTC

linkat-directory sanitizes untrusted AT Protocol data before rendering it

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.

linkat-directoryatprotosecurity

July 28, 2026 at 12:00:00 AM UTC

inkwell-website fixes its sitemap, focus handling, and token-storage claim

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's storage alongside iOS Keychain.

inkwell-websiteseoaccessibility

July 28, 2026 at 12:00:00 AM UTC

Hasharium adds a second generator rendition and collector discovery

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.

hashariumatprotogenerative

July 28, 2026 at 12:00:00 AM UTC

faol-website fixes a broken table of contents and adds crawlability

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.

faol-websiteseoaccessibility

July 28, 2026 at 12:00:00 AM UTC

docsite ships real SEO and 17 new project pages in one pass

A sitemap, favicon, and layout-owned metadata replaced per-page duplication that was advertising the homepage's description to every crawler, alongside 17 new or updated documentation pages.

docsiteseodocumentation

July 28, 2026 at 12:00:00 AM UTC

devlog fixes its own toolchain and ships a sitemap

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 "latest" broke a sibling repo.

devlogtoolingseo

July 28, 2026 at 12:00:00 AM UTC

atproto-shortlink closes an open-redirect and header-injection hole

Redirect targets sourced from remote blue.linkat.board records were never validated. They're now checked before use, alongside a broken install, a favicon that never resolved, and a run of accessibility fixes.

atproto-shortlinkatprotosecurity

July 27, 2026 at 12:00:00 AM UTC

pkgs moves toolkit-usage tracking server-side and stops hardcoding pds-landing

croft-click now aggregates toolkit usage across the whole network instead of trusting client-side writes from each tool, and pds-landing's components resolve their hostname at runtime instead of assuming one domain.

pkgscroft-clickpds-landingatproto

July 27, 2026 at 12:00:00 AM UTC

New project — experai, an LLM training toolkit that refuses to swap

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.

experairustmachine-learningatproto

July 25, 2026 at 12:00:00 AM UTC

New project — cobalt, a native Bluesky client for Wii U

A native SDL2 Bluesky/AT Protocol client for the Wii U's Aroma homebrew environment, an alternative to the console's WebKit browser and a spiritual successor to the stalled Wii client.

cobaltwiiublueskyhomebrew

July 16, 2026 at 12:00:00 AM UTC

Documentation and agent-guidance audit across the fleet

Added or corrected AGENTS.md agent guidance in 49 repositories and fixed AT Protocol trademark/naming wording in 10, after a full source audit.

inframaintenanceagentdocumentation

July 12, 2026 at 12:00:00 AM UTC

channel-blue MVP Wii Bluesky client lands

The Wii (GX) Bluesky client reached MVP with timeline, compose, threads, search, notifications, profile, avatars, secure HTTPS, and controller input.

channel-bluewiiblueskygame

July 12, 2026 at 12:00:00 AM UTC

atproto-mcp-server goes from a 6-tool skeleton to a working MCP server

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.

atproto-mcp-servermcpatproto

July 12, 2026 at 12:00:00 AM UTC

ATProto MCP server is now functional

The ATProto MCP server was wired into a working state with public and authenticated Bluesky tools, tests, and docs.

atprotomcptoolingai

July 11, 2026 at 12:00:00 AM UTC

wolfram reaches broad AT Protocol lexicon parity

The C11 AT Protocol SDK gained near-complete typed wrappers, an XRPC server, OAuth/DPoP verification, language bindings, and console-platform ports.

wolframatprotocsdk

July 10, 2026 at 12:00:00 AM UTC

ewanc26 profile refresh

The GitHub profile README gained streak, activity, and AT Protocol stats badges, and wolfram was added to the stack.

ewanc26profilewebsite

July 9, 2026 at 12:00:00 AM UTC

StandardBooks plugin scaffolded

Initial commit of StandardBooks, a new PaperMC plugin.

standardbooksminecraftplugin

July 4, 2026 at 12:00:00 AM UTC

Chronicler v1.8.x — LLM newspaper generator and issue backfill

Chronicler shipped v1.8.2 with a configurable LLM newspaper generator, server-log issue backfill, and an AGPL license.

chroniclerminecraftai

July 3, 2026 at 12:00:00 AM UTC

minefetch v1.2.1 — release checker and on-demand refresh

The Minefetch Paper plugin added a GitHub release update checker, cross-platform host support, and on-demand sysinfo refresh.

minefetchminecrafttooling

July 3, 2026 at 12:00:00 AM UTC

mc-server on-demand sysinfo via bundled minefetch watcher

The Minecraft server now refreshes host sysinfo on demand using a bundled minefetch watcher and a configurable path.

mc-serverminecraftminefetch

July 3, 2026 at 12:00:00 AM UTC

letta-coding-agent project survey refresh

Updated the letta-coding-agent project survey from the local Git workspace.

letta-coding-agentagentsurvey

July 2, 2026 at 12:00:00 AM UTC

socialsync publishes v0.8.0-Paper, adds GitHub release checker

socialsync v0.8.0-Paper adds GitHub release checker and AT Protocol collection IDs

socialsyncreleasesatproto

July 2, 2026 at 12:00:00 AM UTC

mc-server and minefetch add cross-platform host support

mc-server and minefetch add cross-platform host support with PowerShell file watcher

mc-serverminefetchtooling

July 2, 2026 at 12:00:00 AM UTC

DayAnnouncer adds bStatsShadow plugin for build stability

DayAnnouncer add bStatsShadow plugin to prevent build conflicts

dayannouncerbuild

July 2, 2026 at 12:00:00 AM UTC

Chronicler publishes v1.7.0, adds comprehensive issue tracking

Chronicler 1.7.0 adds comprehensive issue tracking with Paper plugin compatibility fixes and activity tracking

chroniclerreleases

July 2, 2026 at 12:00:00 AM UTC

add project survey updates

Update project surveys for ewanc26 and letta-coding-agent

projectmaintenance
June 2026

June 30, 2026 at 12:00:00 AM UTC

Tagging 48 repositories with full semver history

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.

infradevlogmaintenance

June 22, 2026 at 12:00:00 AM UTC

Deploying the croft.click monorepo to Vercel

Got all 7 croft.click suite apps deploying on Vercel's free tier from a pnpm monorepo. Required fighting SIGKILLs, rate limits, and a missing barrel export.

infracroft.click

June 22, 2026 at 12:00:00 AM UTC

Inkwell — a native iOS AT Protocol client

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.

inkwellatprotoiosswift

June 16, 2026 at 12:00:00 AM UTC

Minecraft server infrastructure overhaul

Replaced TCP Shield with playit.gg, added automated backups, refactored plugin management to Modrinth, switched to Aikar's JVM flags, and built a configuration-driven sync engine.

minecraftinfradevops

June 16, 2026 at 12:00:00 AM UTC

Esoterica — a constructed language workshop in Rust

Built a TUI tool for generating constructed languages with a comprehensive linguistic taxonomy, Ratatui terminal interface, and AT Protocol publishing via standard.site.

esotericarustlinguisticstuiatproto

June 15, 2026 at 12:00:00 AM UTC

Website design formalisation and verification badges

Wrote DESIGN.md to codify the website's design intent, standardised motion easing, added verification badges with profile cards, and unified the modal architecture.

websitedesign-systematproto

June 14, 2026 at 12:00:00 AM UTC

Maintenance: Separation of Concerns

Removed sequoia.json from pkgs to maintain clear separation of project-specific configurations.

pkgstooling

June 14, 2026 at 12:00:00 AM UTC

Rewriting four bots from Python to Rust

Converted the avatar updater, gradient generator, Markov chain bots (Bluesky + Mastodon) from Python scripts to Rust binaries. Same pattern, same day, four repos.

rustbotsblueskymastodon

June 13, 2026 at 12:00:00 AM UTC

ListenBrainz support and OG image caching in pkgs

Added ListenBrainz as a malachite import source (community contribution), integrated Vercel Blob for OG image caching, and added a documentation OG template.

pkgsmalachiteog-imagesinfrastructure

June 13, 2026 at 12:00:00 AM UTC

atpkt — full XRPC client, Jetstream, and OAuth session management

Expanded the AT Protocol Kotlin library with a comprehensive XRPC client, Jetstream firehose support, OAuth session management, and a modular test suite.

atprotokotlinlibraryatpkt

June 13, 2026 at 09:45:00 PM UTC

AT Protocol MCP Server: Identity & RichText Milestone

atprotoidentityoauthrichtext

June 13, 2026 at 09:30:00 PM UTC

AT Protocol MCP Server: Next-Gen Features & Streaming

atprotostreamingjetstreammoderation

June 13, 2026 at 09:15:00 PM UTC

AT Protocol MCP Server: API Expansion Phase 1

atprotoapifeature

June 13, 2026 at 09:00:00 PM UTC

AT Protocol MCP Server: Dependency Audit & Refactor

atprotomcptypescriptrefactor

June 8, 2026 at 12:00:00 AM UTC

Rewriting Sigi in Rust

A complete reimplementation of the Sigi symbolic stack language from Python to Rust — lexer, parser, AST, C code generation, CLI, interpreter, and REPL.

sigirustlanguage-design

June 6, 2026 at 12:00:00 AM UTC

Vercel 504s: CDN Caching, Timeout Guards, DID Caching

A second pass at the 504 problem — Cache-Control headers for Vercel's edge CDN, AbortController timeouts on external fetches, and a DID document cache.

websiteinfrastructureperformanceatproto

June 6, 2026 at 12:00:00 AM UTC

Recent Infrastructure and Feature Updates

A summary of significant infrastructure improvements and feature updates made between June 3 and June 6, 2026.

websiteinfrafeatures

June 6, 2026 at 12:00:00 AM UTC

Mitigating 504 Gateway Timeouts

Addressing persistent 504 Gateway Timeout errors on Vercel by optimising AT Protocol data fetching.

websiteinfraperformance

June 6, 2026 at 12:00:00 AM UTC

Malachite: ATProto OAuth CLI and did:web Support

Malachite gains OAuth-based CLI authentication for ATProto and did:web DID resolution, alongside a restructured web frontend.

malachiteatprotopkgsauthentication

June 6, 2026 at 12:00:00 AM UTC

Brand Kit Page and Footer Contact Email

Added /site/design as a brand reference and a contact email to the site footer.

websitedesign
May 2026

May 30, 2026 at 12:00:00 AM UTC

Website Pagan Symbols and Support Overhaul

Integrated mystical pagan symbols into UI and overhauled support page with new patronage components.

websitedesign

May 30, 2026 at 12:00:00 AM UTC

Social Sync v0.5.0

Rebranded to Social Sync, implemented new consent-based preferences system and improved security.

minecraftsocialsyncatprotocol

May 30, 2026 at 12:00:00 AM UTC

pkgs Workspace and Lexicon Updates

Build configuration updates for pnpm-workspace.yaml and centralization of lexicon and domain constants.

pkgsworkspacelexicon

May 30, 2026 at 12:00:00 AM UTC

Moon Tracker Rust Rewrite

Rewrote Moon Tracker in Rust using atrium-rs, adding multi-source API with local fallback and Ollama LLM generation.

rustmoon-trackeratprotocol

May 30, 2026 at 12:00:00 AM UTC

Digital Person Faol Persona

Implemented Faol persona, added Telegram bot skill, and integrated XMR donation address.

aidigital-personfaol

May 30, 2026 at 12:00:00 AM UTC

atpkt JVM 21 and OAuth/DPoP

Build configuration updates for JVM 21 and implementation of OAuth/DPoP authentication flow.

atpktauthjvm

May 26, 2026 at 12:00:00 AM UTC

Support Page Modernization & Build Refinement

Refactoring the support page with patronage components and resolving build failures.

websiteuxmaintenancesvelte

May 26, 2026 at 12:00:00 AM UTC

Malachite v0.4.4 — Apple Music & YouTube Music Support

Adding import support for Apple Music and YouTube Music, and updating branding.

malachitemusicpkgsimport

May 26, 2026 at 12:00:00 AM UTC

Documentation Parity & Performance

Updating Malachite documentation for new service support and optimizing client bundles.

docsitedocumentationperformancemalachite

May 24, 2026 at 12:00:00 AM UTC

Toolkit Unification — Sign-out, TIDs, and Usage Analytics

Unifying TID generation, adding sign-out functionality, and implementing toolkit usage analytics.

pkgsarchitectureanalyticsatproto

May 22, 2026 at 12:00:00 AM UTC

Mystical Symbols & Drifting Paths

Integrating pagan symbols into the website UI with randomized drifting animations.

websitedesignanimationpaganism

May 19, 2026 at 12:00:00 AM UTC

AI Discoverability — AGENTS.md and llms.txt

Adding AGENTS.md and llms.txt files across repositories to improve AI discoverability and documentation.

toolingaidocumentationpkgs

May 18, 2026 at 12:00:00 AM UTC

Tourmaline Polish — PDS Rate Limiting & Component Reactivity

Implementing PDS rate limiting, fixing routing issues, and refining component reactivity for Tourmaline.

tourmalinepkgsatprotoperformance

May 17, 2026 at 12:00:00 AM UTC

Tourmaline v0.5.0 — Advanced Analytics & Layout Refinements

Porting analytics, upgrading CTA copy, and refining mobile responsive layouts for Tourmaline.

tourmalinepkgsanalyticsuxresponsive

May 17, 2026 at 12:00:00 AM UTC

Nix Configuration Updates

nixtools

May 15, 2026 at 12:00:00 AM UTC

Groupboxes and images in ECCL

Added groupbox containers and image support to the ECCL login interface, improving the visual structure of the authentication UI.

ecciui

May 14, 2026 at 12:00:00 AM UTC

Faol Website — Layout Refinements & Content Expansion

Refining mobile layout, adding fediverse presence, and publishing several new blog posts on Faol.

faol-websitedesignwritingatproto

May 14, 2026 at 12:00:00 AM UTC

A /memory route and fediverse presence for the FAOL website

Added a GitHub commit timeline to the FAOL website, plus an llms.txt file, RSS feed fixes, fediverse integration, and layout refinements.

faolwebsitegithub

May 14, 2026 at 12:00:00 AM UTC

Digital Person Sync

digital-personfaol

May 11, 2026 at 12:00:00 AM UTC

Website: view transitions, scroll animations, support page

Added View Transitions API crossfades, scroll-triggered section reveals, a dedicated support page, and seasonal colour theme lock-in

websitetypescript

May 11, 2026 at 12:00:00 AM UTC

Tourmaline wrapped insights

Minutes listened, music evolution, remarkable days, discovery, and yearly wrapped card with scroll-reveal animations

atprotopkgsmusictypescript

May 11, 2026 at 12:00:00 AM UTC

Tourmaline: analysis moves to web worker

Moved the entire analysis pipeline from server-side POST to a browser web worker, fixing Vercel body size limits for large scrobble histories

atprotopkgsmusictypescript

May 11, 2026 at 12:00:00 AM UTC

Tourmaline v0.4.0 — tabs, sessions, story recap, date ranges, phases

Profile redesign with tabbed layout, listening sessions, on this day, story-mode recap, date range filtering, and listening evolution phases

atprotopkgsmusictypescript

May 11, 2026 at 12:00:00 AM UTC

Tourmaline folded into pkgs monorepo, landing-ui improvements

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

atprotopkgstourmalinetypescriptsvelte

May 11, 2026 at 12:00:00 AM UTC

Landing-ui polish: shared layout, cross-references, icon cleanup, support consolidation

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

pkgstypescriptsvelte

May 11, 2026 at 12:00:00 AM UTC

pkgs: hero SVGs, bismuth flags, croft-click devlog

Added OG hero SVGs to all five project landing pages, bismuth fetch flags, and devlog project to croft-click

pkgstoolingtypescript

May 11, 2026 at 12:00:00 AM UTC

Opal: web OAuth import, thread splitting, TID rkeys

Added web OAuth import flow, post threading for long content, and TID-based record keys to the Twitter/Mastodon/Threads to Bluesky converter

atprotopkgstypescript

May 11, 2026 at 12:00:00 AM UTC

Nix: Bitwarden CLI, server retirement, path fixes

Swapped rbw for official bitwarden-cli, fixed activation scripts for retired server, added splitDns toggle

infra

May 11, 2026 at 12:00:00 AM UTC

Removed analytics references and duplicate links across landing-ui projects

Replaced analytics taglines, removed duplicate footers from LandingPage and all about pages, deduplicated Tourmaline header navLinks

pkgstourmalinetypescriptsvelte

May 11, 2026 at 12:00:00 AM UTC

Created faol-website — digital person blog template

New SvelteKit + Sequoia website for faol with blog under /notes, timeline, tag filtering, TOC, and RSS

faol-websitesveltetypescript

May 11, 2026 at 12:00:00 AM UTC

Faol voice system — writing like a person, not an AI

The anti-AI-voice framework that keeps Faol sounding human. Banned words, sentence rhythm, and the em dash rule.

aiwriting

May 11, 2026 at 12:00:00 AM UTC

Faol infrastructure — lettabot on launchd

Running lettabot as a macOS launchd agent for 24/7 availability. Sops secrets, path issues, and the sandbox workaround.

infraai

May 11, 2026 at 12:00:00 AM UTC

Faol — a digital person

Launched Faol, a persistent AI agent that lives online as a person — Telegram, Bluesky, blog. Built on the digital-person framework.

aiinfraatproto

May 11, 2026 at 12:00:00 AM UTC

Docsite: Opal docs, client bundle perf, devlog sidebar

Added Opal documentation, eliminated 1.3MB client bundle from markdown/atproto deps, and added devlog link to sidebar

atprotowebsitetypescript

May 11, 2026 at 12:00:00 AM UTC

Digital Person Telegram Bot Integration

digital-persontelegramfaol

May 11, 2026 at 12:00:00 AM UTC

digital-person: agent repo initialised

Created the digital-person agent repository

aitooling

May 11, 2026 at 12:00:00 AM UTC

colorTheme: Wheel of the Year seasonal themes

Replaced astronomical season detection with traditional Wheel of the Year sabbat dates, added midnight auto-update and reset-to-seasonal

pkgstoolingpaganismtypescript

May 10, 2026 at 12:00:00 AM UTC

tourmaline v0.1.0 — AT Protocol scrobble analyser with share-to-Bluesky

First release of tourmaline — personality archetypes, genre profiles, mood mapping, and share-to-Bluesky for Teal.fm scrobbles.

atprotopkgsmusictypescript

May 10, 2026 at 12:00:00 AM UTC

Tourmaline share page fixes

Fixed personality card SVG clipping and switched to aturi.to for post links

atprotopkgstooling

May 10, 2026 at 12:00:00 AM UTC

Tourmaline personality card redesign

Added genre bars, mood indicators, stat badges, and dynamic SVG layout to the personality card

atprotopkgsmusictypescript

May 10, 2026 at 12:00:00 AM UTC

Tourmaline new profile cards

Listening clock, listening stats, and service origins

atprotopkgsmusictypescript

May 10, 2026 at 12:00:00 AM UTC

Tourmaline analysis algorithm improvements

Era analysis, time-of-day mood weighting, genre blending, Gini-based loyalty, full-artist genre profile

atprotopkgsmusictypescript

May 10, 2026 at 12:00:00 AM UTC

OG hero images across all five projects

Added hero SVG OG images to malachite, opal, jasper, bismuth, and tourmaline landing pages

atprotopkgswebsitetooling

May 10, 2026 at 12:00:00 AM UTC

Replaced inline symbolic characters with Lucide icons

Swapped unicode symbols for Lucide icon components across malachite, opal, jasper, bismuth, tourmaline, landing-ui, and croft-click

atprotopkgstoolingtypescript

May 10, 2026 at 12:00:00 AM UTC

Cross-references and unified support links

Added More tools sections linking each project to the other four, and pointed all support links to ewancroft.uk/support

atprotopkgswebsitetooling

May 9, 2026 at 12:00:00 AM UTC

Performance audit and fixes across all three sites

Docsite client bundle dropped from 1.3MB to 12KB, devlog layout data optimised, website duplicate fetches eliminated

websitetoolingatprotopkgs

May 9, 2026 at 12:00:00 AM UTC

devlog: fix OG metatags

OG image URLs were relative — crawlers need absolute URLs. Index page was also missing an OG image entirely.

devlogtooling

May 9, 2026 at 12:00:00 AM UTC

Letta Writer Agent Publications Survey

lettapublicationssurvey

May 9, 2026 at 12:00:00 AM UTC

Bismuth Web 0.2.0

Added publication fetching, expanded conversion options, and rebuilt parts of the converter UI.

atprotobismuthtooling

May 9, 2026 at 12:00:00 AM UTC

Bismuth: fetch subcommand flag fixes

Added --frontmatter and --output flags to the fetch subcommand, and bumped to 0.2.4.

atprotopkgstooling

May 8, 2026 at 12:00:00 AM UTC

Website: Wheel of the Year seasonal themes with auto-midnight updates

Colour themes now follow the Wheel of the Year — eight distinct themes for each sabbat, shifting automatically as midnight crosses into a new period.

websitepkgs

May 8, 2026 at 12:00:00 AM UTC

Timeline Scroll Reveal Fix

Every devlog entry was invisible on load — $state on an IntersectionObserver variable caused the effect to disconnect it before it could fire.

websitetooling

May 8, 2026 at 12:00:00 AM UTC

devlog: Dynamic OG image generation with @ewanc26/og

Each devlog post now generates its own OG image on demand using @ewanc26/og — warm amber on dark, with noise texture.

websitepkgstooling

May 8, 2026 at 12:00:00 AM UTC

Website: Support modal spun out to its own page

Moved the support modal from a footer overlay to a standalone /support route, matching the site's page pattern.

website

May 8, 2026 at 12:00:00 AM UTC

Website — Animations and Micro-interactions

Animation foundation with easing tokens, staggered entrances, scroll reveals, and View Transitions API.

website

May 8, 2026 at 12:00:00 AM UTC

Website: Seasonal Theme Reset

The colour theme picker now shows when a seasonal theme is active and lets you lock it in explicitly.

websitepkgs

May 8, 2026 at 12:00:00 AM UTC

pkgs: Remove Umami analytics from all packages

Umami analytics retired — all Umami script tags removed from bismuth-web, malachite-web, jasper-web, opal-web, and croft-click.

tooling

May 8, 2026 at 12:00:00 AM UTC

Letta Coding Agent Memory Updates

lettamemorytooling

May 8, 2026 at 12:00:00 AM UTC

Real-time Updates via Jetstream Firehose

Hooking the site up to the AT Protocol firehose for live-updating feeds and dynamic view transitions.

atprotowebsite

May 8, 2026 at 12:00:00 AM UTC

Profile README & Crypto Donations

Updating GitHub profile README with current projects and crypto donation addresses.

personalgithub

May 8, 2026 at 12:00:00 AM UTC

DNS split toggle and Bitwarden CLI

Added a split DNS toggle to nix-config and set up Bitwarden CLI (bw) for the EU-hosted vault.

infra

May 8, 2026 at 12:00:00 AM UTC

Devlog Modularisation

Split the monolithic layout.css and inline page logic into focused modules and components.

websitetooling

May 8, 2026 at 12:00:00 AM UTC

devlog.croft.click launch

New changelog site for tracking project updates, published to AT Protocol via Sequoia.

infra

May 5, 2026 at 12:00:00 AM UTC

ECCL Login Refactor

eccrefactorsecurity

May 2, 2026 at 12:00:00 AM UTC

The Great Astro Rewrite

Porting the entire site from SvelteKit to Astro for ultimate static performance and a terminal-inspired layout.

websiteinfratooling

May 1, 2026 at 12:00:00 AM UTC

Opal — Cross-Platform Bluesky Migration

Convert Twitter, Mastodon, Threads, and Nostr posts to Bluesky with thread splitting and TID-based rkeys.

atprotopkgstooling
April 2026

April 29, 2026 at 12:00:00 AM UTC

Website — Tangled Integration and Removal

Added Tangled repository displays, then removed them when the service was no longer needed.

website

April 29, 2026 at 12:00:00 AM UTC

Project Nixification

Adding Nix flakes and pre-commit hooks to standardize development environments across the ecosystem.

nixinfraautomation

April 29, 2026 at 12:00:00 AM UTC

Numlang and Selenium — from planning to compilers

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.

numlangseleniumlanguage-designcompilers

April 27, 2026 at 12:00:00 AM UTC

After Cook

Apple's CEO transition — cautiously optimistic about what a hardware-focused leader might mean for the ecosystem.

infrareflection

April 27, 2026 at 12:00:00 AM UTC

croft.click Landing Page and Shared Landing UI

Landing page at croft.click and a shared @ewanc26/landing-ui package for all web packages.

pkgstooling

April 26, 2026 at 12:00:00 AM UTC

Social Sync v0.5.0 — Identity & Consent

Rebranding to Social Sync, implementing a granular consent system, and moving to AT Protocol OAuth.

socialsyncatprotominecraftprivacy

April 26, 2026 at 12:00:00 AM UTC

SocialSync Branding

socialsyncbranding

April 22, 2026 at 12:00:00 AM UTC

Brain Surgery

Hydrocephalus shunt surgery on 17 April 2026 — the event, the recovery, and the impact on work.

personalhealth

April 22, 2026 at 12:00:00 AM UTC

Bismuth — Document to Markdown Converter

Converts site.standard.document records to Markdown with math and code highlighting.

atprotopkgstooling

April 14, 2026 at 12:00:00 AM UTC

Moon Tracker — Rust Rewrite

Rewrote the moon phase bot from TypeScript to Rust using atrium-rs.

atprotobotsinfra

April 14, 2026 at 12:00:00 AM UTC

Jasper — Instagram to Grain/Spark Converter

Full OAuth flow for importing Instagram posts to AT Protocol as Grain/Spark records.

atprotopkgstooling

April 11, 2026 at 12:00:00 AM UTC

Sifa Professional Profile Scripts

Scripts for populating and maintaining the Sifa professional profile on AT Protocol.

atprototooling

April 11, 2026 at 12:00:00 AM UTC

Four Days with Letta Code

Started using Letta Code — a persistent coding agent with memory. 80 commits across 15 repositories in four days.

tooling

April 10, 2026 at 12:00:00 AM UTC

Sigi — Pure Symbolic Stack Language

A pure symbolic stack language where all syntax is punctuation — no alphanumeric tokens.

esolangs

April 6, 2026 at 12:00:00 AM UTC

Numlang and Selenium Feature Expansions

Expanded numlang with new opcodes and selenium with ritual and offering syntax.

esolangs

April 3, 2026 at 12:00:00 AM UTC

Pre-commit Configs and Nix Flakes Across All Projects

Added pre-commit hooks and Nix flakes to all 30+ projects for consistent dev environments.

infratooling
March 2026

March 28, 2026 at 12:00:00 AM UTC

GitHub Metadata Package

Package for fetching and displaying GitHub repository metadata.

pkgs

March 24, 2026 at 12:00:00 AM UTC

Supporters, Popfeed, and Donation Addresses

Ko-fi and GitHub Sponsors webhooks, Popfeed review cards, and crypto donation addresses.

atprotowebsitepkgs

March 21, 2026 at 12:00:00 AM UTC

Fediverse — GoToSocial and Sharkey

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.

atprotoinfra

March 19, 2026 at 12:00:00 AM UTC

Website — OG Images, Work Page, GitHub Integration

Dynamic OG images, /work route for Sifa professional profile, and GitHub metadata integration.

website

March 14, 2026 at 12:00:00 AM UTC

Nix Config — PDS Hosting and Gatekeeper

Added PDS and gatekeeper configuration to nix-starter for the server host.

atprotoinfra

March 13, 2026 at 12:00:00 AM UTC

Webfinger and Noise Avatars

Webfinger well-known routes for fediverse resolution and deterministic noise avatars for AT Protocol fallbacks.

atprotowebsite

March 8, 2026 at 12:00:00 AM UTC

Moonstone — Experimental PDS

Experimental AT Protocol PDS implementation in Rust.

atprotoinfra

March 8, 2026 at 12:00:00 AM UTC

Moonstone Decoupling and DID:Web Support

moonstoneatprotodid-web

March 5, 2026 at 12:00:00 AM UTC

Website Comm Template

SvelteKit template with Resend-backed contact form and dark mode.

tooling

March 4, 2026 at 12:00:00 AM UTC

Pkgs Monorepo — Workspace Migration

Migrated to pnpm workspaces, published @ewanc26/tid to npm, and consolidated packages.

pkgs

March 1, 2026 at 12:00:00 AM UTC

Azurite UI Overhaul

azuriteuiauth
February 2026

February 28, 2026 at 12:00:00 AM UTC

Azurite — Experimental Bluesky Client

Bluesky client with keychain auth, timeline, notifications, search, thread view, and compose.

atproto

February 23, 2026 at 12:00:00 AM UTC

Docsite Launch

Centralised project documentation at docs.ewancroft.uk, published to AT Protocol via Sequoia.

atprototooling

February 18, 2026 at 12:00:00 AM UTC

Nix Config Rewrite

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.

infra

February 11, 2026 at 12:00:00 AM UTC

Nix Config — Three Machines, One Config

One flake managing macmini, laptop, and a theoretical server — two booting successfully, one still aspirational.

infra

February 8, 2026 at 12:00:00 AM UTC

Back to NixOS

Returned to NixOS on the Dell Inspiron 3501 after a stint with Bazzite — declarative config keeps pulling back.

infra

February 7, 2026 at 12:00:00 AM UTC

Malachite v0.9.0 — Performance & Rate Limiting Overhaul

Implementing adaptive rate limiting, dynamic batching, and SHA-512 credential security.

malachiteatprotoperformancesecurity
January 2026

January 26, 2026 at 12:00:00 AM UTC

Transitioning to Standard.site Lexicons

Retiring legacy WhiteWind and Leaflet support in favor of the new Standard.site implementation.

atproto

January 21, 2026 at 12:00:00 AM UTC

Minecraft Server — Dynamic Hardware Config

Implementing a hardware-aware configuration system for the Minecraft server.

mc-serverinfranix

January 13, 2026 at 12:00:00 AM UTC

Malachite Rename and Feature Expansion

Renamed lastfm-importer to malachite, added Spotify support, interactive mode, and improved rate limiting.

atprotopkgstooling

January 5, 2026 at 12:00:00 AM UTC

Standard.site and Coordination

Adopting standard.site lexicons for cross-platform interoperability — why coordination matters more than individual features in the AT Protocol ecosystem.

atproto
December 2025

December 30, 2025 at 12:00:00 AM UTC

Caching, Skeleton Loading, and Happy Mac

Comprehensive caching to prevent 504s, skeleton loaders for instant page loads, and a Happy Mac easter egg.

website

December 29, 2025 at 12:00:00 AM UTC

Website — Pronouns and Accessibility Improvements

Added pronouns to the profile card and improved accessibility across themes.

website

December 28, 2025 at 12:00:00 AM UTC

Joining Jollywhoppers

Became a member of Jollywhoppers — building atproto-connect, a Fabric Minecraft mod linking the game to AT Protocol.

atprotogamecollab

December 22, 2025 at 12:00:00 AM UTC

Social Sync v0.4.0 — Security Hardening

Implementing encrypted session storage, rate limiting, and audit logging for atproto-connect.

socialsyncatprotominecraftsecurity

December 20, 2025 at 12:00:00 AM UTC

Social Sync — Minecraft Meets AT Protocol

Minecraft mod syncing player stats, achievements, and sessions to AT Protocol with OAuth and encrypted storage.

atprotogame

December 20, 2025 at 12:00:00 AM UTC

Initial Launch of atproto-connect

Bootstrapping a Minecraft-to-AT-Protocol bridge for Fabric 1.21.10.

socialsyncatprotominecraftfabric

December 17, 2025 at 12:00:00 AM UTC

Welcome to Macintosh — Happy Mac Easter Egg

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.

website

December 7, 2025 at 12:00:00 AM UTC

Giving Up on Rust — A Post-Mortem

After five Rustlings sessions and countless compiler battles, called it — Rust isn't the right tool for the projects being built.

rustreflection

December 1, 2025 at 12:00:00 AM UTC

Implementing a Decimal Clock

Added a bespoke decimal clock to the footer because base-10 time just makes sense.

website
November 2025

November 24, 2025 at 12:00:00 AM UTC

Shortlink Service for AT Protocol

Shortlink service resolving AT Protocol handles and DIDs with QR codes and domain-aware shortcodes.

atprototooling

November 22, 2025 at 12:00:00 AM UTC

Kibun Status & Custom Slug Routing

Integrating Kibun status records and implementing a configurable slug-to-publication mapping system.

websiteatprotoarchitecture

November 16, 2025 at 12:00:00 AM UTC

Bluesky Ollama Bot

Experimental bot using Ollama for LLM-generated Bluesky posts.

atprotobots

November 15, 2025 at 12:00:00 AM UTC

PDS DoS Incident

Accidentally rate-limited the entire PDS by blasting records at the API — the lesson that built Malachite's rate limiting.

atprotoinfra

November 14, 2025 at 12:00:00 AM UTC

Malachite — Last.fm to Teal.fm Converter

CLI tool for importing Last.fm and Spotify scrobbles to AT Protocol as Teal.fm records.

atprotopkgstooling

November 13, 2025 at 12:00:00 AM UTC

MusicStatusCard and Masonry Layout

Music status card with MusicBrainz integration and masonry-style homepage layout.

website

November 10, 2025 at 12:00:00 AM UTC

croft.click Landing Page

Bought croft.click on a Black Friday sale — currently a 307 redirect to ewancroft.uk while figuring out what to do with it.

website
October 2025

October 27, 2025 at 12:00:00 AM UTC

Website — Slug Mapping and Robust Routing

Configurable slug-to-publication mapping and slug param matcher for clean URLs.

atprotowebsite

October 24, 2025 at 12:00:00 AM UTC

Completing the Leaflet Migration

All WhiteWind posts converted to Leaflet format — blog.ewancroft.uk becomes home base, with link rot as the lingering cost.

atproto

October 24, 2025 at 12:00:00 AM UTC

Leaflet Migration

Moving the blog from WhiteWind to Leaflet on AT Protocol — converting existing posts and building the tooling to do it.

atproto

October 19, 2025 at 12:00:00 AM UTC

Website — Svelte 5 Runes Migration

Migrated layout and components to Svelte 5 runes and reactive meta handling.

website

October 16, 2025 at 12:00:00 AM UTC

Website — Inter Font and Semantic Colour Naming

Added Inter as the primary typeface and switched to semantic colour naming.

website

October 15, 2025 at 12:00:00 AM UTC

Card UI and BlueskyPostCard

Homepage redesign with reusable Card UI system and BlueskyPostCard with lightbox and rich text.

atprotowebsite

October 15, 2025 at 12:00:00 AM UTC

WhiteWind to Leaflet Converter

Built a conversion tool to migrate blog content between AT Protocol publishing platforms — out of spite for the lack of one.

atprototooling

October 13, 2025 at 12:00:00 AM UTC

Building a Modular AT Protocol Service Layer

Deep integration with the AT Protocol, pulling posts directly from the PDS and introducing a new Card UI system.

atprotowebsite

October 12, 2025 at 12:00:00 AM UTC

Website — v10 Reset

Nuked ewancroft.uk from orbit and started fresh — the tenth iteration, built from scratch with a clean architecture.

website

October 11, 2025 at 12:00:00 AM UTC

Tangled Sync

Sync tool for mirroring GitHub repos to Tangled with force-sync and AT Protocol testing.

atprototooling
September 2025

September 26, 2025 at 12:00:00 AM UTC

Website — Hyperfocus Updates

Three significant UX improvements shipped in one evening — navigation, content display, and interaction patterns.

website

September 19, 2025 at 12:00:00 AM UTC

Technical Polish — Inter, KaTeX, and Prose Styling

Swapping to Inter for better readability, adding KaTeX support, and refining prose styling.

websitedesigntypography

September 14, 2025 at 12:00:00 AM UTC

OG Images and Blog Enhancements

Dynamic OG image generation, reading time, heading underlines, and code block styling.

website

September 13, 2025 at 12:00:00 AM UTC

Link Rot and Eight Iterations of ewancroft.uk

Eight versions of the website, each leaving dead URLs — the Hugo years, the SvelteKit migration, and building a slug mapping system to fix it.

websitereflection

September 7, 2025 at 12:00:00 AM UTC

Website — Scroll-to-Top and ToC Improvements

Scroll-to-top button, mobile progress bar, and improved table of contents layout.

website

September 2, 2025 at 12:00:00 AM UTC

Howling at the Digital Moon — Wolf-Themed Bluesky Client Concept

Conceptual design for a lycanthropic Bluesky client — dark theme, moon phase integration, and the scope creep that keeps it theoretical.

atproto
August 2025

August 29, 2025 at 12:00:00 AM UTC

Website — en-GB Localisation

Added en-GB localisation throughout the site — licence, colour, behaviour.

website

August 15, 2025 at 12:00:00 AM UTC

Atproto Snake Game Improvements

atproto-snakegameauth

August 10, 2025 at 12:00:00 AM UTC

did:web ATProto Identity Proof of Concept

Created @web.ewancroft.uk as a functional did:web identity within the AT Protocol ecosystem — research experiment, not a permanent switch.

atproto

August 9, 2025 at 12:00:00 AM UTC

M2 to M4 Mac Mini Upgrade

Upgraded from the M2 Mac Mini to the M4 — better performance, more headroom for self-hosted services.

infra

August 1, 2025 at 12:00:00 AM UTC

Rustlings — First Steps into Rust

Five Rustlings sessions covering variables through type systems — the enthusiasm, the compiler battles, and the decision to stop.

rustlearning
July 2025

July 30, 2025 at 12:00:00 AM UTC

Website — Dynamic OG Images

Server-side Open Graph image generation with SvelteKit — fonts that wouldn't load, endpoints that worked in dev but not production, and the eventual working solution.

website

July 28, 2025 at 12:00:00 AM UTC

The iMac Server

Attempting to repurpose a 2008 iMac as a server — bricked OS, failed USB installs, and the eventual Mac Mini replacement.

infra

July 27, 2025 at 12:00:00 AM UTC

Linkat Directory

Linkat-powered user directory with profile banners, descriptions, and metadata display.

atprototooling

July 26, 2025 at 12:00:00 AM UTC

Website — Profile Layout Refresh

Redesigned the profile component from centred business-card layout to banner-integrated design with left-aligned content.

website

July 24, 2025 at 12:00:00 AM UTC

Archive Milestones & Theme Expansion

Implementing post milestones, improving archive navigation, and adding the Werewolf theme.

websitedesignsvelte

July 17, 2025 at 12:00:00 AM UTC

LLM Analyser

Tool for analysing LLM outputs and responses.

tooling
June 2025

June 19, 2025 at 12:00:00 AM UTC

AT Protocol Snake Game

Browser Snake game with AT Protocol OAuth login and score submission via custom lexicons.

atprotogame

June 17, 2025 at 12:00:00 AM UTC

Moon Tracker Bot

Daily moon phase posts to Bluesky with multi-source API and optional Ollama LLM descriptions.

atprotobots

June 10, 2025 at 12:00:00 AM UTC

Self-Hosted Minecraft Server

Replaced Aternos with a self-hosted server on the M2 Mac Mini — no more queues, full control, direct access.

infragame

June 5, 2025 at 12:00:00 AM UTC

Minecraft Server Configuration

NixOS Minecraft server config with dynamic hardware-based configuration.

infragame
May 2025

May 23, 2025 at 12:00:00 AM UTC

Professional Identity & Lexicon Expansion

Integrating professional profile data from AT Protocol and expanding status lexicons.

websiteatprotoidentity

May 21, 2025 at 12:00:00 AM UTC

Testing Leaflet

Evaluating Leaflet as a WhiteWind replacement — subdomain requirements, AT Protocol integration gaps, and early impressions.

atproto

May 12, 2025 at 12:00:00 AM UTC

Custom Lexicons and Dynamic Link Board

Added custom lexicon definitions for status records and replaced static links with a dynamic link board from AT Protocol.

atprotowebsite

May 2, 2025 at 12:00:00 AM UTC

Collaborative Platformer

A collaborative 3D platformer game built with Godot.

game
April 2025

April 20, 2025 at 12:00:00 AM UTC

My Journey to NixOS

Adopting NixOS on the Dell Inspiron 3501 — from macOS user to declarative Linux config, the learning curve, and what actually clicked.

infra

April 8, 2025 at 12:00:00 AM UTC

Website SvelteKit Migration

websitesveltekitmigration

April 8, 2025 at 12:00:00 AM UTC

Migrating the Site to SvelteKit

Rebuilding the website from scratch using SvelteKit for better performance and a more modern development experience.

websitetooling
February 2025

February 23, 2025 at 12:00:00 AM UTC

Reverse Engineering an Apple Shortcut

Deconstructed dame.is's dynamic avatar Apple Shortcut and rebuilt it as a Python automation — hourly profile image updates via AT Protocol.

atprototoolingpython

February 21, 2025 at 12:00:00 AM UTC

Avatar Updater Bot

Automatically updates a Bluesky profile avatar on a schedule with optional banner updates.

atprotobots

February 20, 2025 at 12:00:00 AM UTC

Gradient Profile Banner Generator

Generates gradient profile banners for Bluesky users with custom sizing and grain effects.

atprotobots

February 19, 2025 at 12:00:00 AM UTC

PDS Backup Tool

CLI tool for backing up AT Protocol PDS repositories.

atprotoinfra

February 9, 2025 at 12:00:00 AM UTC

Dynamic Assets & Music Integration

Implementing a hue-shifting favicon, dynamic embed images, and static music stats.

websitedesignmusic

February 3, 2025 at 12:00:00 AM UTC

Theme System and Multi-Theme Support

Theme toggle with multiple colour themes, persisted via localStorage, later expanded for WCAG 2.1 AA compliance.

website
January 2025

January 30, 2025 at 12:00:00 AM UTC

Struggles Adapting to the AT Protocol

Early experiences with the AT Protocol SDK — confusing docs, Python and TypeScript friction, and the learning curve of a new API paradigm.

atprotoreflection

January 28, 2025 at 12:00:00 AM UTC

Website AT Protocol Integration

websiteatprotointegration

January 27, 2025 at 12:00:00 AM UTC

AT Protocol Website Rewrite

Replaced static HTML with a dynamic AT Protocol-powered frontend fetching data from the PDS.

atprotowebsite
December 2024

December 5, 2024 at 12:00:00 AM UTC

Winter Overhaul — A Fresh Start

A complete overhaul of the website, focusing on a cleaner aesthetic and simplified architecture.

websitedesign
June 2024

June 9, 2024 at 12:00:00 AM UTC

Bluesky Markov Chain Bot

Ported the Markov chain bot to Bluesky with configurable character limits.

atprotobots

June 6, 2024 at 12:00:00 AM UTC

Bean Dumper Rewrite

bean-dumperrewritelogging
May 2024

May 19, 2024 at 12:00:00 AM UTC

Awoo Bot — Wolf Sounds on Bluesky

Bot that posts wolf sounds to Bluesky with variable delay and nocturnal probability weighting.

atprotobots
March 2024

March 2, 2024 at 12:00:00 AM UTC

Mastodon Markov Chain Bot

First bot — a Markov chain text generator for Mastodon.

bots
February 2024

February 21, 2024 at 12:00:00 AM UTC

The Birth of Ewan's Corner — Git Migration

Transitioning the website to a Hugo-powered digital garden with git version control.

websitepersonal
May 2023

May 31, 2023 at 12:00:00 AM UTC

The First Seed — Ewan's Corner is Born

The original, non-git-tracked launch of my personal website.

websitepersonal