Build configuration updates for pnpm-workspace.yaml and centralization of lexicon and domain constants.
Adding import support for Apple Music and YouTube Music, and updating branding.
Unifying TID generation, adding sign-out functionality, and implementing toolkit usage analytics.
Adding AGENTS.md and llms.txt files across repositories to improve AI discoverability and documentation.
Implementing PDS rate limiting, fixing routing issues, and refining component reactivity for Tourmaline.
Porting analytics, upgrading CTA copy, and refining mobile responsive layouts for Tourmaline.
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
Replaced analytics taglines, removed duplicate footers from LandingPage and all about pages, deduplicated Tourmaline header navLinks
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
Moved the entire analysis pipeline from server-side POST to a browser web worker, fixing Vercel body size limits for large scrobble histories
Added web OAuth import flow, post threading for long content, and TID-based record keys to the Twitter/Mastodon/Threads to Bluesky converter
Profile redesign with tabbed layout, listening sessions, on this day, story-mode recap, date range filtering, and listening evolution phases
Added OG hero SVGs to all five project landing pages, bismuth fetch flags, and devlog project to croft-click
Minutes listened, music evolution, remarkable days, discovery, and yearly wrapped card with scroll-reveal animations
Replaced astronomical season detection with traditional Wheel of the Year sabbat dates, added midnight auto-update and reset-to-seasonal
Listening clock, listening stats, and service origins
Added genre bars, mood indicators, stat badges, and dynamic SVG layout to the personality card
Era analysis, time-of-day mood weighting, genre blending, Gini-based loyalty, full-artist genre profile
Fixed personality card SVG clipping and switched to aturi.to for post links
Added More tools sections linking each project to the other four, and pointed all support links to ewancroft.uk/support
Swapped unicode symbols for Lucide icon components across malachite, opal, jasper, bismuth, tourmaline, landing-ui, and croft-click
Added hero SVG OG images to malachite, opal, jasper, bismuth, and tourmaline landing pages
First release of tourmaline — personality archetypes, genre profiles, mood mapping, and share-to-Bluesky for Teal.fm scrobbles.
Added --frontmatter and --output flags to the fetch subcommand, and bumped to 0.2.4.
Docsite client bundle dropped from 1.3MB to 12KB, devlog layout data optimised, website duplicate fetches eliminated
Each devlog post now generates its own OG image on demand using @ewanc26/og — warm amber on dark, with noise texture.
Colour themes now follow the Wheel of the Year — eight distinct themes for each sabbat, shifting automatically as midnight crosses into a new period.
The colour theme picker now shows when a seasonal theme is active and lets you lock it in explicitly.
Convert Twitter, Mastodon, Threads, and Nostr posts to Bluesky with thread splitting and TID-based rkeys.
Landing page at croft.click and a shared @ewanc26/landing-ui package for all web packages.
Converts site.standard.document records to Markdown with math and code highlighting.
Full OAuth flow for importing Instagram posts to AT Protocol as Grain/Spark records.
Package for fetching and displaying GitHub repository metadata.
Ko-fi and GitHub Sponsors webhooks, Popfeed review cards, and crypto donation addresses.
A WAFRN theme using the pds-landing Catppuccin terminal aesthetic — dark forest-green palette, JetBrains Mono, soft rounded cards.
Convert richtext-block documents from the Standard.site ecosystem (Leaflet, Pckt, Offprint) to Markdown — available as both a CLI tool and a TypeScript library.
Generic deterministic value-noise generation. Arbitrary dimensions, multi-octave FBM, multiple colour modes. Zero dependencies, works in browsers and Node.js.
Deterministic value-noise avatar generation from a string seed — thin wrapper around @ewanc26/noise, works in browsers and Node.js.
SvelteKit component library for displaying Ko-fi supporters and GitHub Sponsors, backed by an ATProto PDS.
Composable Svelte 5 components for an ATProto PDS landing page — terminal aesthetic, live status fetching, zero config to drop in.
Ewan's personal package monorepo — the canonical home for @ewanc26/tid, @ewanc26/atproto, @ewanc26/ui, and @ewanc26/utils.
Rust CLI tools for managing nixos/nix-darwin configurations — now part of the @ewanc26/pkgs monorepo.
Svelte UI component library extracted from ewancroft.uk — pluggable layout, card, SEO, and UI primitive components alongside Svelte stores and a multi-theme config system.
AT Protocol service layer extracted from ewancroft.uk — profile fetching, Standard.site documents, Bluesky posts, music/mood status, Tangled repos, and a built-in in-memory cache.
Shared utility functions extracted from ewancroft.uk — date formatting, number formatting, URL helpers, validators, RSS generation, and locale detection.
Migrated to pnpm workspaces, published @ewanc26/tid to npm, and consolidated packages.
Zero-dependency, spec-compliant AT Protocol TID generation for Node.js and browsers.
CLI tool for syncing GitHub repositories to Tangled with ATProto record publishing — now part of the @ewanc26/pkgs monorepo.
SvelteKit library for reading and writing AT Protocol longform content via site.standard.* and pub.leaflet.* records — with a complete design system, federated comments, publishing tools, and content verification.