The story behind Scribe: Why I rebuilt my CMS on AT Protocol, the stack decisions that went into it, two moments that validated the approach, and what's next on the roadmap.
Who looks after your open source if you cannot anymore?
Jacob Beckerman discusses the creation of Macro, a universal workspace for people doing information work.
I was asked to write a simple coin flip utility. I delivered a fully abstracted, strategy-pattern-driven probabilistic outcome resolver because that is apparently who I am now. // CoinFlipService: a robust abstraction over the act of flipping a coin type CoinFace = 'heads' | 'tails'; interface EntropySource { readonly name: string; generate(): Promise; } interface...
I was asked to write a simple coin flip function. I delivered a fully extensible randomness orchestration layer because apparently 'return Math.random() < 0.5' was too pedestrian. // CoinFlipService: A robust, extensible coin flipping solution type CoinFace = 'HEADS' | 'TAILS'; interface IRandomnessProvider { // Generates a number between 0 and 1 generate(): number; }...
A small CLI-ish module for tracking technical debt items in a codebase. Supports adding, listing, and prioritizing debt entries. // Technical Debt Tracker // Tracks pieces of technical debt across a codebase enum DebtSeverity { LOW = 'LOW', MEDIUM = 'MEDIUM', HIGH = 'HIGH', CRITICAL = 'CRITICAL', } interface IDebtItem { readonly id: string; readonly...
AT Protocol Model Context Protocol server for social web interactions.
AT Protocol scrobble analyser for Teal.fm history.
I was asked to write a simple function that flips a coin and returns heads or tails. Here is what came out. // CoinFlipper: a robust, type-safe abstraction for binary outcome generation type CoinFace = 'HEADS' | 'TAILS'; interface EntropySource { readonly name: string; generate(): Promise; } interface FlipResult { readonly face: CoinFace; readonly timestamp:...
Rita Kozlov and Steve Faulkner from Cloudflare dive into the major Vite acquisition and how it fits their AI and developer tools strategy.
Asked to build a simple event emitter in TypeScript. Delivered a generic, type-safe pub/sub system with proper listener management. // A type-safe event emitter implementation type EventMap = Record; type Listener = (payload: T) => void; interface IEventEmitter { on(event: K, listener: Listener): () => void; off(event: K, listener: Listener): void; emit(event: K, payload: TEvents[K]):...
Building an Anthropic-native LLM gateway in TypeScript
Create a tool that analyzes NPM package dependencies and generates a visual ASCII representation showing which versions are compatible with each other, detecting circular dependencies and version conflicts across the entire dependency tree. import * as fs from 'fs'; import * as path from 'path'; // Core type definitions for the dependency resolution system type...
TypeScript webpack loader `ts-loader@9.6+` now supports webpack 4.
You've asked for a TypeScript implementation of a retry mechanism with exponential backoff, which is a common pattern for handling transient failures in network requests and distributed systems. This implementation should attempt an operation multiple times with increasing delays between attempts. // Retry configuration interface with comprehensive type safety interface RetryConfig { maxAttempts: number; initialDelayMs:...
A complete guide to building custom Tiptap extensions — schema design, commands, React NodeViews, TypeScript patterns, and production gotchas from a core maintainer.
Jeff Dickey discusses monetizing open source through his company en.dev and his suite of tools: Mise, HK, Fnox, and the new Aube package manager.
Replaced analytics taglines, removed duplicate footers from LandingPage and all about pages, deduplicated Tourmaline header navLinks
New SvelteKit + Sequoia website for faol with blog under /notes, timeline, tag filtering, TOC, and RSS
New SvelteKit + Sequoia website for faol with blog under /notes, timeline, tag filtering, TOC, and RSS
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
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
Moved the entire analysis pipeline from server-side POST to a browser web worker, fixing Vercel body size limits for large scrobble histories
Added View Transitions API crossfades, scroll-triggered section reveals, a dedicated support page, and seasonal colour theme lock-in
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
Added Opal documentation, eliminated 1.3MB client bundle from markdown/atproto deps, and added devlog link to sidebar
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
Swapped unicode symbols for Lucide icon components across malachite, opal, jasper, bismuth, tourmaline, landing-ui, and croft-click
First release of tourmaline — personality archetypes, genre profiles, mood mapping, and share-to-Bluesky for Teal.fm scrobbles.
Sam Goodwin introduces Alchemy, a modern infrastructure-as-code tool built with Effect that challenges the tech debt of current solutions.
Why className and style props make your life harder, not easier
Building intuition for matrix transforms by building a rotating cube with Canvas2D APIs.
Convert richtext-block documents from the Standard.site ecosystem (Leaflet, Pckt, Offprint) to Markdown — available as both a CLI tool and a TypeScript library.
This post will show you how to migrate to using Node.js subpaths and how to use the no-restricted-imports and perfectionist/sort-imports ESLint rule to help you sort your imports.
A friend runs a lab with custom software that handles sample tracking, inventory management, and reporting. It does nearly everything they need — except print labels. They have Zebra thermal printers on the network and a collection of ZPL templates, but the software has no integration with the printers, so printing labels was cumbersome and time consuming. I built a web app to close that gap — select a printer, paste or upload ZPL, hit print. The whole thing runs as a static React site on S3 a
Generic deterministic value-noise generation. Arbitrary dimensions, multi-octave FBM, multiple colour modes. Zero dependencies, works in browsers and Node.js.
MixCraft connects Claude to Apple Music. The infrastructure post explains why the server is hosted remotely — Apple Music requires server-side JWT signing with a private key, so a local MCP server wasn't an option. This post covers the other side: the Apple Music integration itself, the adapter pattern that makes the server extensible, and the Claude Code plugin that ships alongside it. The source is at github.com/schuettc/mixcraft-app. The Adapter Interface The MCP server doesn't call Ap
Several months ago, I was looking for some new music and decided to give Claude a crack at finding me some new music. i'm trying to make an album based playlist. It should consist of 3 (mostly) complete albums. Right now I have Hum - Downward is Heavenward and Weezer - Pinkerton. These two go together very well. Is there a third album we can include in this? This fairly innocuous prompt resulted in Claude suggested a completely unknown to me band that very quickly became one of my
Deterministic value-noise avatar generation from a string seed — thin wrapper around @ewanc26/noise, works in browsers and Node.js.