What changed, when, and why.

June 2026

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 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

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 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