programmer, poet, and pagan from the UK.
i build things around AT Protocol, compilers for esoteric languages, and self-hosted infrastructure.
AT Protocol ecosystem — tools, bots, and infrastructure for the decentralised web:
| project | what it does |
|---|---|
| malachite · 🧶 | import Last.fm & Spotify history to AT Protocol (OAuth, CLI + web) |
| opal | migrate Twitter, Mastodon, Threads, Nostr → Bluesky (OAuth, CLI + web) |
| jasper | import Instagram posts to AT Protocol as Grain/Spark (OAuth, CLI + web) |
| bismuth | convert site.standard.document records → Markdown (CLI + web) |
| website · 🧶 | ewancroft.uk — personal site powered by AT Protocol records |
| azurite · 🧶 | experimental Bluesky client (keychain auth, timeline, compose) |
| moonstone · 🧶 | experimental PDS in Rust (WIP) |
| socialsync · 🧶 | Minecraft mod — sync stats & achievements to AT Protocol |
| atproto-snake · 🧶 | snake game with AT Protocol OAuth and score submission |
| atproto-shortlink · 🧶 | shortlink service for AT Protocol handles and DIDs |
| linkat-directory · 🧶 | Linkat-powered user directory |
| pds-backup · 🧶 | back up your AT Protocol PDS data |
Bots:
| project | what it does |
|---|---|
| bluesky-moon-tracker · 🧶 | daily moon phase posts (Rust, atrium-rs) |
| bluesky-awoo-bot · 🧶 | wolf sounds on Bluesky |
| bluesky-markov · 🧶 | markov chain bot for Bluesky |
| bluesky-gradient · 🧶 | gradient profile banner generator |
| bluesky-avatar-updater · 🧶 | scheduled avatar updates |
| bluesky-ollama · 🧶 | LLM-generated posts via Ollama |
| mastodon-markov · 🧶 | markov chain bot for Mastodon |
Compilers & esoteric languages:
| project | what it does |
|---|---|
| selenium · 🧶 | lunar/poetic syntax, strong typing, compiles to C |
| numlang · 🧶 | stack-based, numbers + punctuation only, compiles to C |
| sigi · 🧶 | pure symbolic stack language, all punctuation, compiles to C |
NixOS & infrastructure:
| project | what it does |
|---|---|
| nix-starter · 🧶 | NixOS config for 3 hosts (PDS, Caddy, Tailscale) |
| docsite · 🧶 | Sequoia-powered documentation site |
| devlog | automated changelog published to AT Protocol |
| pkgs · 🧶 | monorepo — 16+ TypeScript packages, 1 Rust, 1 Python |
Other:
| project | what it does |
|---|---|
| tangled-sync · 🧶 | sync repos to Tangled knotwork |
| mc-server · 🧶 | NixOS Minecraft server config |
| platformer-collab · 🧶 | collaborative 3D platformer (Godot) |
| website-comm-template · 🧶 | SvelteKit template with Resend contact form |
Full docs at docs.ewancroft.uk. Devlog at devlog.croft.click.
- AT Protocol:
did:plc:ofrbh253gwicbkc5nktqepol· handle:ewancroft.uk· PDS:eurosky.social - Code hosting: GitHub · Tangled
- Location: England, United Kingdom
- Heritage: Anglo-Scottish
- Learning: Scottish Gaelic (Gàidhlig na h-Alba) — "Tha mi Pàgannach" (I am Pagan)
- Music: Powerwolf Top 0.03% globally
- Crypto: XMR
44yH2LpkSsrSmWQC3SVmrABw2MUhNjNCE365hG7Rr7veJYNPBD1f6dNgXNr2nc6ZcP3jEyj9vXnqmg7VBBPeS8uwMhJ4yXW· BTCbc1qp3l6e9pjc5jan7ulpd58av8wfdtyhrchj84clh· ETH0x4B8c9d62ff89bc7199a197C55dac2abef1808B77
Stack:
Also work with: C (compiler targets), AT Protocol lexicons, Godot (GDScript)
I believe in owning your data. AT Protocol lets me host my own PDS, control my identity, and take my content anywhere. My site runs on AT Protocol records. Last.fm and Spotify data flows through malachite into the same ecosystem. Instagram exports go through jasper. Twitter and Mastodon history through opal. All roads lead back to the same PDS.
moon phases • AT Protocol • compilers • wolves


