// python dev & professional over-engineer

I build things.
They mostly work.
Eventually.

Hi, I'm Faen — a full-stack Python developer with a talent for solving problems nobody else noticed were problems yet, and an unhealthy relationship with terminal applications.

Python FastAPI Typer Textual PostgreSQL UV Excessive Ambition

// the lore

Who am I

I'm Faen, a mid-level full-stack developer who specialises in Python, has strong opinions about package managers, and will absolutely write a CLI tool to solve a problem that could have been a shell alias. I have no regrets.

I'm dyslexic and have auditory processing difficulties, which means I've inadvertently become very good at written communication and very bad at remembering what was said in a meeting. In a shocking plot twist, this has made me a better developer — I document things properly and think carefully about how software communicates with the people using it.

I care a lot about accessibility — probably because I need it myself. If software doesn't work for everyone, it doesn't really work, does it? That said I'll admit my Discord bots are primarily for my own convenience. We contain multitudes.

Speciality

Python, CLIs, APIs, and tools that do exactly one thing extremely well. Or five things moderately well. Depends on the day.

Superpower

Turning "I wish this existed" into "okay it exists now but I need to refactor it." The circle of developer life.

Kryptonite

Finishing projects. Meetings where the outcome could have been an email. JavaScript. (Kidding. Mostly.)

Currently

Shipping Patchwork to real users, building SpellBreak for Android, and pretending the Discord bots don't need maintenance.

// things i built instead of sleeping

My Projects

Mostly unfinished, entirely earnest, occasionally useful.

🧩 Patchwork in development

My biggest and most important project. Patchwork is a PWA for plural systems — groups of people who share a single body. It's private, local-first, and built with genuine care for the community it serves. The server literally cannot read your data. That's not a marketing claim, that's the architecture. Backed by a self-hosted FastAPI server running on a Raspberry Pi, because apparently I enjoy doing things the hard way.

PythonFastAPIPostgreSQLPWAIndexedDBWeb PushAES-GCMLogto OIDC

The Cool Bits

  • End-to-end encryption via AES-GCM — the server is effectively a very secure postbox that can't read its own mail
  • Self-hosted FastAPI backend on a Raspberry Pi 5 with Caddy reverse proxy and a cloudflared tunnel
  • Per-device Web Push notifications — because your phone and your laptop are different devices, apparently
  • Local-first with IndexedDB — your data lives on your device, the server is just a very encrypted middleman
  • SimplyPlural import — because migrating shouldn't be a nightmare
↗ patchwork.work — yes I bought a domain, I'm very serious about this
🔮 SpellBreak in development

An Android app that reminds you to take breaks from your screen — and actually means it. Built using Android's Accessibility Service API and a WindowManager overlay, SpellBreak interrupts whatever you're doing with a gentle but unavoidable reminder that your eyes exist and deserve rest. It's the app I built because I kept ignoring every other break reminder app.

AndroidJavaAccessibility ServiceWindowManager

Features (That I Needed Personally)

  • Accessibility Service API — it knows you're using your phone and will act accordingly
  • Full-screen overlay — dismissable, but present. You will acknowledge the break.
  • Configurable intervals — because "every 20 minutes" is aspirational for some of us
  • Works across all apps — no hiding in games or YouTube
🥫 PanTry in development

A local-first PWA for tracking grocery and medication expiry dates, because I am an adult who has definitely never found expired medication at the back of a drawer. PanTry keeps everything client-side with AES-256-GCM encryption, so the server never sees your data. It's cosy, it's practical, and it will tell you when your paracetamol has turned on you.

PythonFastAPIPWAAES-256-GCMWeb Crypto APIIndexedDB

The Sensible Bits

  • AES-256-GCM client-side encryption — the server backend exists purely for sync, not to read your shopping list
  • Local-first with IndexedDB — works offline, syncs when it can
  • Tracks both groceries and medications — because both can expire and both matter
  • FastAPI backend on Oracle Cloud — free tier, living dangerously
🤖 Discord Bots ongoing (they're never done)

Three Discord bots, each with a distinct personality and purpose. Started as "I'll just write a quick script." They have names now. They have lore.

PythonDiscord APIPostgreSQL

The Bots

  • LaceyBot — the responsible one. Handles medication reminders, water reminders, and any custom scheduled reminders you throw at him. Quietly keeps everything running. Very reliable. Does not judge you for needing a bot to remind you to drink water.
  • AngelBot — the chaotic one. Reports current front status, generates hex colour swatches, and tracks who last posted in any channel. Technically does four things, which absolutely counts as scope creep, and they have zero remorse about it.
  • Patches — the Patchwork support bot. Handles passphrase resets via /resetpassphrase and support ticket creation via /ticket, with log parsing to help diagnose issues. The one bot with actual responsibilities.

// things i actually know

Skills & Tools

Languages

Python 3.13SQLBash

Backend & APIs

FastAPIPydantic v2PostgreSQLSQLite

CLI & Terminal

TyperTextualRich

Frontend & Mobile

PWAIndexedDBAndroid (Java)

Auth & Security

Logto OIDCDiscord OAuthAES-GCMWeb Crypto API

Tooling

UVGitJira
Hot take: spec-driven development isn't just good practice, it's an accessibility tool. Writing things down properly so everyone — human or AI — can understand the requirements without a 45-minute meeting is genuinely a better way to work. I will die on this hill. The hill is very well documented.
Accessibility-first — I'm dyslexic, which means I have a vested interest in software that actually works for people who aren't neurotypical. This has made me annoyingly thorough about readable interfaces, clear error messages, and not assuming everyone processes information the same way.

// don't be shy

Say Hello

I'm open to interesting projects, collaborations, and people who want to talk about Python tooling at length. Writing works better for me than calls — I promise I'm much more coherent in text.

Genuinely — if you want to reach out, a short written message goes a long way. I'll always write back properly. It's kind of my thing.