Projects
A centralised hub for all my projects' documentation
docs.ewancroft.uk- Opal Convert microblog posts from Twitter, Mastodon, Threads, and Nostr to AT Protocol Bluesky posts.
- Jasper Convert Instagram data exports into posts, stories, and videos on Grain or Spark while preserving original timestamps.
- Azurite A basic Bluesky client for macOS built with Swift — experimental and for fun.
- Moonstone Personal ATProto PDS implementation optimised for NixOS/Caddy, with no Bluesky infrastructure defaults.
- Nix Starter Beginner-friendly, self-contained NixOS configurations with no personal infrastructure or shared abstractions.
- Website Commission Template A SvelteKit + Tailwind CSS starter template for Ko-fi website commissions, with CC BY-SA 4.0 licensing.
- atproto-shortlink A server-side AT Protocol link shortener powered by your Linkat board. No database required.
- atproto-snake Classic Snake with AT Protocol OAuth login and high score saving to your PDS.
- bean-dumper An early Python experiment — unmaintained and kept for historical interest.
- bluesky-avatar-updater Automatically update your Bluesky avatar (and banner) every hour based on the time of day.
- bluesky-awoo-bot A simple Bluesky bot that posts random wolf noises at random intervals. Unmaintained.
- bluesky-gradient Generate 24 sky-gradient images (one per hour) for use as Bluesky avatars or banners.
- bluesky-markov A Bluesky bot that generates and posts Markov chain text based on a source account's posts. Unmaintained.
- bluesky-moon-tracker A Bluesky bot that posts daily moon phase updates with a lycanthropic twist. Optional Ollama LLM generation.
- bluesky-ollama An AI-powered Bluesky bot that uses a local Ollama model to generate posts in the style of a source account.
- college-practice-lycanquiz A VB.NET Windows Forms quiz about werewolf mythology, made as a college practice project.
- college-practice-trafficlights A VB.NET Windows Forms UK traffic light simulator, made as a college practice project.
- knotted-docker A Dockerised Tangled knot server with optional Cloudflare Tunnel routing.
- linkat-directory An alternate SvelteKit frontend for Linkat showing a curated directory of AT Protocol user profiles. Unmaintained.
- mastodon-markov A Mastodon bot that generates and posts Markov chain text based on a source account. Unmaintained.
- mc-server A personal PaperMC Minecraft server in Docker Compose with DuckDNS dynamic DNS and management scripts.
- pds-backup A Bash script for automated, resumable PDS backups via rsync over SSH with change detection and cron scheduling.
- platformer-collab A simple Godot 4 C# platformer made collaboratively.
- @ewanc26/tangled-sync CLI tool for syncing GitHub repositories to Tangled with ATProto record publishing — now part of the @ewanc26/pkgs monorepo.
- text-to-pixel-image A Python script that converts a string of text into a pixel art image with per-character colours. Unmaintained.
- website Source code for ewancroft.uk — a personal site powered by AT Protocol, built with SvelteKit 5 and Tailwind CSS 4.
- Sigi A pure symbolic stack language — all syntax is punctuation, no alphanumeric keywords.
- Numlang An esoteric stack-based language that compiles to C via a Python compiler, using only numbers and punctuation.
- Selenium Compiler An esoteric language with lunar/poetic syntax that compiles to C, featuring strong typing and imperative programming constructs.
- @ewanc26/wafrn-theme A WAFRN theme using the pds-landing Catppuccin terminal aesthetic — dark forest-green palette, JetBrains Mono, soft rounded cards.
- @ewanc26/bismuth Convert richtext-block documents from the Standard.site ecosystem (Leaflet, Pckt, Offprint) to Markdown — available as both a CLI tool and a TypeScript library.
- @ewanc26/pkgs Ewan's personal package monorepo — language-agnostic workspace with TypeScript, Rust, and Python packages.
- docsite Source code for docs.ewancroft.uk — a documentation site for ewan's projects, built with SvelteKit and published via Sequoia.
- Malachite Import your Last.fm and Spotify listening history to the AT Protocol network using the fm.teal.alpha.feed.play lexicon.
- @ewanc26/noise Generic deterministic value-noise generation. Arbitrary dimensions, multi-octave FBM, multiple colour modes. Zero dependencies, works in browsers and Node.js.
- @ewanc26/noise-avatar Deterministic value-noise avatar generation from a string seed — thin wrapper around @ewanc26/noise, works in browsers and Node.js.
- @ewanc26/supporters SvelteKit component library for displaying Ko-fi supporters and GitHub Sponsors, backed by an ATProto PDS.
- @ewanc26/pds-landing Composable Svelte 5 components for an ATProto PDS landing page — terminal aesthetic, live status fetching, zero config to drop in.
- nix-config-tools Rust CLI tools for managing nixos/nix-darwin configurations — now part of the @ewanc26/pkgs monorepo.
- @ewanc26/pkgs Ewan's personal package monorepo — the canonical home for @ewanc26/tid, @ewanc26/atproto, @ewanc26/ui, and @ewanc26/utils.
- @ewanc26/atproto 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.
- @ewanc26/ui 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.
- @ewanc26/utils Shared utility functions extracted from ewancroft.uk — date formatting, number formatting, URL helpers, validators, RSS generation, and locale detection.
- @ewanc26/tid Zero-dependency, spec-compliant AT Protocol TID generation for Node.js and browsers.
- llm-analyser Python tool for analysing .docx files and generating essays using a local Ollama model — now part of the @ewanc26/pkgs monorepo.
- @ewanc26/svelte-standard-site 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.