# Ewan Croft (@ewancroft.uk)

Profile: https://sifa.id/p/ewancroft.uk
Headline: Software developer and hobbyist poet
Location: United Kingdom

## Projects

- **Wolfram** — https://github.com/ewanc26/wolfram (Jul 2026 - Present)
  A C SDK for the AT Protocol
- **docsite** — https://docs.ewancroft.uk (Feb 2026 - Present)
  Central documentation hub for all projects. SvelteKit + Tailwind + Sequoia for AT Protocol publishing. All docs at docs.ewancroft.uk.
- **pkgs** — https://github.com/ewanc26/pkgs (Nov 2025 - Present)
  Monorepo of 18+ AT Protocol packages: malachite (music history), bismuth (document conversion), svelte-standard-site (longform publishing), atproto (service layer), ui components, and more.
- **malachite** — https://malachite.croft.click (Nov 2025 - Present)
  Import Last.fm and Spotify listening history to AT Protocol. CLI and web app with intelligent deduplication, rate limiting, and fm.teal.alpha lexicon support.
- **website** — https://ewancroft.uk (May 2023 - Present)
  Personal website with AT Protocol integration. Displays Bluesky profile, blog, music listening history from malachite, mood status, and portfolio.
- **bluesky-moon-tracker** — https://github.com/ewanc26/bluesky-moon-tracker (Jun 2025 - Jul 2025)
  Bot that posts moon phase updates to Bluesky. Tracks lunar cycles and posts phase changes.

## Publications

- SMBC clears its name tables — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/10/smbc-nametables
- SMBC has its graphics data — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/10/smbc-chr
- SMBC's VRAM buffer writer is translated — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/10/smbc-updatescreen
- SMBC's reset and NMI spine is translated — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/10/smbc-reset-nmi-spine
- SMBC gets its project skeleton — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/10/smbc-skeleton
- What the Fuck Am I Supposed to Do With the Piece of Paper? — blog.ewancroft.uk (Oct 2026) https://blog.ewancroft.uk/3mxf3n3qmwk2p
- Driving Azahar and a test post with the picker — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/08/azahar-input-and-a-test-post
- The image pickers read the camera folder — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/08/camera-folder-pickers
- Cobalt's scroll restore and snapshot harness — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/08/cobalt-scroll-and-snapshot
- Indigo's store codecs share one line reader — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/08/indigo-store-refactor
- Sign-in discovery, with a fallback and the clients merged — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/08/sign-in-follow-ups
- The Wii U library links again — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/08/wii-u-link-fix
- Wolfram CI retries a stuck package mirror — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/07/ci-apt-retry
- Video posters on Cobalt and Indigo — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/07/cobalt-indigo-video-poster
- Rewriting main to be linear — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/07/history-rewrite-linear-main
- Indigo's header hint no longer runs into the post counter — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/07/indigo-header-hint-overlap
- Signing in without typing the PDS — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/07/pds-discovery
- Profile tabs move into Wolfram — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/07/wolfram-profile-tabs
- Wolfram keeps a video's poster frame — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/07/wolfram-video-poster
- What I’d Do to Go to a Sabbat Celebration — blog.ewancroft.uk (Oct 2026) https://blog.ewancroft.uk/3mxa4dt4or22y
- Apparently I Was Born in the Wrong Country — blog.ewancroft.uk (Oct 2026) https://blog.ewancroft.uk/3mx2voy5h5k2g
- Cobalt liked-by and reposted-by lists — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/04/cobalt-likes-lists
- Cobalt full-size image viewer — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/04/cobalt-image-viewer
- Indigo muted words and hide-reposts — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/04/indigo-muted-words
- Indigo paged search results — devlog.croft.click (Oct 2026) https://devlog.croft.click/2026/10/04/indigo-search-paging
- Mo Thaigh (Air Grunnd na Mara) — creativity.ewancroft.uk (Oct 2026) https://creativity.ewancroft.uk/3mwwyswfbks2w
- Cobalt: I Put Bluesky on a Wii U — blog.ewancroft.uk (Oct 2026) https://blog.ewancroft.uk/3mwwiehdqmc2f
- Six Years of Building Things — blog.ewancroft.uk (Oct 2026) https://blog.ewancroft.uk/3mwwefs6k5224
- A Website That Looks Like It Was Printed, Not Rendered — blog.ewancroft.uk (Oct 2026) https://blog.ewancroft.uk/3mwrsx7yufc2y
- We Deserve a Say in the Future We Have to Live In — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mwlzaivi6k2i
- Apparently, I'm an Entire Team Now — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mwkdszr4hk2s
- Furries Are Everywhere. That's Because We're People. — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mwgk637brs2d
- Dear Manager, Again — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mwdnmlw7k22d
- I Like the Apple Ecosystem. This Is Not a Declaration of War. — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mwctx2znek2c
- ATperson CI OOM fix — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/25/atperson-ci-oom
- Wolfram 3DS curl transport and hardware-seeded crypto — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/25/wolfram-3ds-curl-transport
- ATperson wolfram pin bump and archive auth surface — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/25/atperson-wolfram-pin-auth-surface
- ATperson Jetstream kind-7 replay rows — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/25/atperson-jetstream-kind7
- ATperson supervisor health surface — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/24/atperson-health-surface
- ATperson offline-safe spooled writes — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/24/atperson-offline-spool
- ATperson archive replay fixes and wolfram 0.23.x — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/24/atperson-archive-replay-fixes
- ATperson standing authorization envelopes — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/24/atperson-standing-envelopes
- ATperson autonomous scheduler — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/24/atperson-autonomous-scheduler
- ATperson offline sandbox — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/24/atperson-offline-sandbox
- ATperson jetstream compression live — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/24/atperson-jetstream-compression-live
- I Would Like to Own Things Again — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mw76mslpfs25
- You Should Make a Website — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mw65pfaq7s24
- atperson jetstream full-speed ingestion — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/23/atperson-jetstream-full-speed
- Software Should Be Allowed to Be Weird — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mw43osr4xc2i
- I Still Built It — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mvthjqe7mc2f
- atperson v6 fuzz corpus seeds — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/19/atperson-v6-fuzz-seeds
- atperson unified internal headers — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/18/atperson-unified-internal-headers
- atperson persistence layer modularisation — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/18/atperson-persistence-modularise
- atperson: evidence-gated recall — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/atperson-recall-gate
- atperson: journal map — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/atperson-journal-map
- atperson: operator controls and approval gates — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/atperson-operator-controls
- atperson: scope/atom file convention — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/atperson-scope-atom-naming
- atperson: conversation and reply context — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/atperson-conversation-context
- atperson: experience-derived valence — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/atperson-valence
- atperson — fuzz and property harnesses — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/atperson-fuzz-property
- atperson — scoped private-header atom names — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/atperson-header-atoms
- atperson — deterministic e2e lifecycle harness — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/atperson-e2e-harness
- atperson: split main.cpp into scoped CLI command atoms — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/atperson-cli-atoms
- atperson: move C++ runtime modules into scoped directories — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/17/runtime-module-scopes
- atperson withdrawal and unlearning — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-withdrawal
- atperson portable snapshot format — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-portable-snapshot
- atperson deterministic replay — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-deterministic-replay
- atperson replayable ledger — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-replayable-ledger
- atperson explicit ingestion policy — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-ingestion-policy
- atperson writer lock and first-run bootstrap — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-writer-lock-bootstrap
- atperson paginated sync and persistent ingestion cursor — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-paginated-sync-ingestion-cursor
- atperson: split graph.c into single-concern modules — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/graph-modularisation
- atperson: modular file mandate and ledger split — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-modularisation
- atperson: graph growth bounds — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-growth-bounds
- atperson: Unicode tokenization contract — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-unicode-tokenizer
- atperson: safe ledger compaction — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-compaction
- atperson: learning-schema compatibility for replay — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/16/atperson-schema-compat
- Out of Sight; Out of Mind — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mvlnrj5lbs2g
- malachite dedup batching — applyWrites deletes instead of one deleteRecord per record — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/15/malachite-dedup-batching
- uncramped /about/cv layout — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/14/cv-uncramped
- cv landing page moved into the site design system — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/14/cv-landing-design-system
- interactive terminal CV at /cv — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/14/interactive-terminal-cv
- malachite dedup fixes — timestamp canonicalisation, sync window, duration, and a null-safety crash on legacy records — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/11/malachite-dedup-fixes
- Two Weeks With AirPods Pro 3, as a Completely Normal Person — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mv7uyp7zl22k
- pkgs fixes landing-ui mobile layout, iOS input zoom, and jasper-web's missing background tokens — devlog.croft.click (Sep 2026) https://devlog.croft.click/2026/09/10/pkgs-landing-ui-mobile-fixes
- Apple Made a Foldable iPhone. I Have Three Questions. — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mv4npgiouc2b
- Thank you, Prime Minister Andy Burnham — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mumptrxuf22w
- Games Are Allowed to End — blog.ewancroft.uk (Sep 2026) https://blog.ewancroft.uk/3mukobmpc6k2l
- Four Months Later, My Head Is Quiet — blog.ewancroft.uk (Aug 2026) https://blog.ewancroft.uk/3muam72kqak2u
- Nuance is dead, long live Nuance — blog.ewancroft.uk (Aug 2026) https://blog.ewancroft.uk/3mtxzr4dodk2e
- Inkwell ships v2.4.0 — Kotlin Multiplatform shared core, writer, accessibility, and F-Droid distribution — devlog.croft.click (Aug 2026) https://devlog.croft.click/2026/08/25/inkwell-kmp-and-v2-release
- MetalBear gains account-cache eviction, durable blob storage, multipart video uploads, and a modular build profile — devlog.croft.click (Aug 2026) https://devlog.croft.click/2026/08/24/metalbear-account-cache-blob-store-video
- My AT Protocol Repository Goes Back to 2021. AT Protocol Doesn’t. — blog.ewancroft.uk (Aug 2026) https://blog.ewancroft.uk/3mttfzhanss25
- Twenty-One, Four Months Out — blog.ewancroft.uk (Aug 2026) https://blog.ewancroft.uk/3mtnh323no22a
- pkgs ships 20+ tourmaline charts, fixes malachite's Apple Music and ListenBrainz pipelines, and migrates to @bsky/sdk — devlog.croft.click (Aug 2026) https://devlog.croft.click/2026/08/22/pkgs-tourmaline-charts-and-sdk-migration
- Willow gains OAuth, compose, notifications, and thread/profile views — devlog.croft.click (Aug 2026) https://devlog.croft.click/2026/08/19/willow-auth-compose-notifications
- cobalt adds actor search, custom feeds, curated lists, and reply-gating — devlog.croft.click (Aug 2026) https://devlog.croft.click/2026/08/19/cobalt-actor-search-custom-feeds
- website fixes blog timezone derivation and design-language token compliance — devlog.croft.click (Aug 2026) https://devlog.croft.click/2026/08/18/website-timezone-and-design-fixes
- channel-blue adds avatar rendering to the profile screen — devlog.croft.click (Aug 2026) https://devlog.croft.click/2026/08/18/channel-blue-avatar-and-roadmap
- We Are the Yew and Flame — blog.ewancroft.uk (Aug 2026) https://blog.ewancroft.uk/3mutf553qo22b

## Skills

### Technical
- AT Protocol
- Cloud Storage
- Compiler Development
- Docker
- Lexicon Design
- Nix/NixOS
- OAuth 2.0
- Python
- Rust
- Secrets Management
- Shell Configuration
- Shell Scripting
- SvelteKit
- Swift
- Tailwind CSS
- TypeScript
### Creative
- UI Component Design
### Industry
- Self-hosting

## Credentials

- OCR Level 3 Cambridge Technicals Introductory Diploma in Information Technology — OCR (Jun 2025)
- OCR Level 2 Cambridge Technicals Diploma in Information Technology — OCR (Jun 2024)
- GCSE English Language — AQA (Jun 2023)
- GCSE Mathematics — Pearson Edexcel (Jun 2023)
- City & Guilds Level 1 Extended Certificate in Employability Skills — City & Guilds (Jul 2022)
- GCSE Biology — AQA (Jun 2021)
- GCSE French — AQA (Jun 2021)

## Education

- **Northampton College** — A Level in Information Technology, Information Technology (Sep 2024 - Jun 2026)
  OCR Cambridge Technicals Level 3 Full Diploma in Information Technology.
- **Northampton College** — GCSE in Information Technology, Information Technology (Upper secondary) (Sep 2023 - Jun 2024)
  OCR Cambridge Technical Level 2 Diploma in Information Technology.
  Units: Communicating in the IT industry (5 credits), Working in the IT industry (5 credits), Database systems (10 credits), Spreadsheet modelling (10 credits), Computer graphics (10 credits), Customising software (10 credits), Developing programming solutions (10 credits).
- **Northampton College** — GCSE in English Language, English Language (Upper secondary) (Sep 2021 - Jun 2023)
- **Northampton College** — Level 1 Certificate in Employability Skills (Sep 2021 - Jun 2022)
- **Ousedale** — GCSE in French, French Language (Upper secondary) (Sep 2016 - Jun 2021)
- **Ousedale** — GCSE in Mathematics, Mathematics (Upper secondary) (Sep 2016 - Jun 2021)
- **Ousedale** — GCSE in Biology, Biology (Upper secondary) (Sep 2016 - Jun 2021)

## Involvement

### Open Source
- Ewanc26/atperson
- Ewanc26/inkwell
- Ewanc26/chronicler
- Ewanc26/website

## Languages

- English (id.sifa.defs#native)
- French (id.sifa.defs#limitedWorking)
- Scottish Gaelic (id.sifa.defs#elementary)
- Spanish (id.sifa.defs#elementary)

## Links

- Ko-fi: https://ko-fi.com/ewancroft
- GitHub: https://github.com/ewanc26
- GitHub Sponsors: https://github.com/sponsors/ewanc26
- bsky: https://bsky.app/profile/ewancroft.uk
- dns: https://ewancroft.uk
