// full-stack python developer

Building tools that
actually work
for real people.

Niles McCrystal  ·  SystemCoder99

I build CLI tools, APIs, and backend systems with a focus on clarity, accessibility, and getting things right the first time.

Python FastAPI Typer Textual PostgreSQL UV
↓ Download CV

// about me

Who I am

I'm Niles McCrystal, a mid-level full-stack developer with a focus on Python — building everything from terminal applications and REST APIs to full cross-platform desktop apps. I specialise in tools that are clean to use, well-documented, and built to last.

One of the things I care most about is accessibility. I'm dyslexic and have auditory processing difficulties, which means I think carefully about how information is communicated — both in the software I build and in how I work with teams. I've developed tools specifically to improve accessibility in the workplace, and that perspective shapes everything I make.

Because of my auditory processing difficulties, I adopted spec-driven development as a core part of how I work. Rather than relying on back-and-forth verbal clarification, I make sure requirements are fully defined upfront — which means less rework, clearer pull requests, and better outcomes for everyone involved.

Approach

Spec-first, accessibility-minded, and pragmatic. I'd rather spend time getting requirements right than revisiting finished work.

Experience

Mid-level full-stack developer. Comfortable across the whole stack, with a strong preference for Python backends and CLI tooling.

What I Build

APIs, terminal apps, automation tools, and real-world software that solves genuine problems — often starting from personal need.

Working Style

I work best with clear written specs and async communication. I'm thorough, considered, and tend to think about edge cases early.

// things i've built

My Projects

A mix of professional work and personal tools — some finished, some growing.

// professional work

🏗️ Monorepo Build & Deploy Layer professional

A tool built on top of our internal build and deploy framework to add full monorepo support. Started as a solo project over 8 months before growing into a team effort as adoption expanded — a sign of how much it came to be relied upon.

PythonMonorepoBuild ToolingCI/CDParallelisationDependency Resolution

What It Does

  • Automatic change detection — only projects with changes are built and deployed
  • Dependency map — if a changed project is depended on by others, those are automatically rebuilt too
  • Correct build ordering — dependencies are always built before the projects that rely on them
  • Parallelised builds — independent projects build simultaneously to minimise pipeline time
  • Configurable build and deploy steps per project within the monorepo
  • Designed and built entirely from first principles — architecture, dependency resolution, and build ordering all self-designed before AI coding tools were part of my workflow
📦 UV Company Onboarding professional

Laid the groundwork to onboard UV as the company-wide standard for Python development — configuring the developer environment so that UV is automatically set up on first use, pointing to the internal package index rather than public PyPI.

UVPythonInternal ToolingPlatform EngineeringPackage Management

What I Did

  • Built the configuration groundwork to automatically set up UV for new and existing developers
  • Configured UV to use the internal package index by default, keeping dependencies off public PyPI
  • Opened a feature request upstream with the UV project for mTLS support to meet internal security requirements
  • UV is now the recommended Python tooling standard across the company
📋 Spec-Kit AI Skill & Jira Integration professional

Built a custom AI skill that bridges Spec-Kit (a spec-driven development tool by GitHub) with Jira — automatically transforming short ticket descriptions into fully-scoped feature request specs. I also advocate for spec-driven development as an accessibility practice, for both humans and AI agents alike.

AI SkillJira IntegrationSpec-Driven DevWorkflow Design

What I Built & Why

  • Built the AI skill that reads short ticket descriptions and outputs fully-detailed specs into Jira
  • Requestors write tickets the same way they always have — the skill does the heavy lifting
  • Advocates for spec-driven development as an accessibility practice — born from personal need, as auditory processing difficulties make verbal-only clarification unreliable
  • Benefits developers picking up tickets, AI coding agents acting on them, and reduces PR back-and-forth for everyone
🎨 Colour Screen Overlay professional

A workplace accessibility tool that applies coloured screen tints for users who benefit from them — particularly those with dyslexia or visual stress. Built after recognising that existing solutions were either expensive, clunky, or unavailable on managed systems.

PythonAccessibilityWorkplace Tool

// personal projects — the applaud suite

Outside of work, my personal projects live under one umbrella: Applaud — ten privacy-first, neurodivergent-focused apps that share a common violet-and-gold visual identity and the tagline "Because all effort deserves applause." Below is the full line-up with current status. Patchwork, SpellBreak, and PanTry are covered in detail further down; the rest are summarised here.

🧩 Patchworkflagship — live

The suite's flagship product. Fully migrated to self-hosted infrastructure (Raspberry Pi 5, Postgres, Caddy, Cloudflare Tunnel) as of mid-2026, and now in active real-world use. Full write-up below.

↗ View on Applaud
🏷️ Unstickerin development

A sticker-pack opening app with a leather-journal aesthetic and a mascot, Bobbin. Core loop is feature-complete: pack opening, tear animation, rarity reveals, onboarding, profile/settings, and dark mode.

↗ View on Applaud
⏳ Whileearly development

Shares Unsticker's visual identity with an orange accent. Early-stage, following on from Unsticker's build.

↗ View on Applaud
🥘 Thymerin development

A one-step recipe app with a self-contained TypeScript parsing pipeline that extracts structured recipe data directly from a page's JSON-LD.

↗ View on Applaud
💬 Clearlybranding complete

A communication access card — a quick, low-friction way to signal communication needs and preferences to others.

↗ View on Applaud
🔥 Hestiain development

A burnout-prediction app built natively on React Native/Expo, using a hearth-and-fire metaphor. Nine weighted dials — including pollen, UV index, moon phase, and air quality — feed a lag-aware model that predicts burnout risk ahead of time.

↗ View on Applaud
🌫️ Wispin development

A journaling and venting PWA with a deliberately strong privacy architecture: user identity is decoupled from Discord via HMAC-keyed lookups, keeping moderation blind to identity. Being built in three phases.

↗ View on Applaud
🔮 SpellBreakin development

An Android screen-break reminder built on the Accessibility Service API. Full write-up below.

↗ View on Applaud
🎯 Bounty Boardearly development

A relationship-graph based chore-and-reward game with an append-only ledger and multi-currency support.

↗ View on Applaud
🥫 PanTryin development

An encrypted grocery and medication expiry tracker with barcode and OCR scanning. Full write-up below.

↗ View on Applaud
🧩 Patchwork flagship — live

A Progressive Web App for plural systems — groups of people who share a single body. Patchwork gives systems a private, local-first space to document their members, track fronting history, and stay connected with trusted friends. Fully migrated from a PaaS-hosted backend to a self-hosted FastAPI server on a Raspberry Pi 5, with Caddy, a Cloudflare Tunnel, and Discord-direct OAuth. Built with genuine care for the community it serves.

PythonFastAPIPostgreSQLPWAIndexedDBWeb PushAES-GCMDiscord OAuthRaspberry Pi

Technical Highlights

  • RSA-2048 + AES-256-GCM hybrid encryption — the server stores and routes encrypted blobs it cannot read
  • Self-hosted FastAPI backend on a Raspberry Pi 5 with Caddy reverse proxy, Cloudflare Tunnel, and self-hosted GitHub Actions CD runners
  • Discord-direct OAuth, replacing a third-party auth provider after a tenant-deletion incident
  • Per-device Web Push notifications via VAPID — because your phone and your laptop are different devices
  • Local-first with IndexedDB via Dexie — sensitive data lives on the user's device; the server is an encrypted relay
  • SimplyPlural import support for existing community users
↗ patchwork.work
🖥️ Patchwork Server Infrastructure self-hosted

The backend infrastructure for Patchwork — a self-hosted FastAPI server on a Raspberry Pi 5, with automated deployments, a reverse proxy, and a persistent tunnel to the public internet. Built and maintained entirely independently, from hardware upward.

FastAPIRaspberry PiCaddycloudflaredGitHub ActionsPostgreSQLSelf-Hosting

What I Built

  • Migrated Patchwork from a managed PaaS to a self-hosted Raspberry Pi 5 — full infrastructure ownership
  • Caddy reverse proxy for HTTPS termination and routing
  • Cloudflare Tunnel to expose the Pi to the public internet without port-forwarding
  • GitHub Actions self-hosted CD runners on the Pi for automatic zero-downtime deployments on push
  • Migrated the database from a managed cloud provider to self-hosted PostgreSQL on the Pi
🔮 SpellBreak in development

An Android screen break reminder app built using the Accessibility Service API and WindowManager overlay. SpellBreak interrupts active screen use with a configurable full-screen overlay — designed to work across all apps, not just when the user thinks to check a timer.

AndroidJavaAccessibility Service APIWindowManager

Technical Highlights

  • Accessibility Service API for reliable cross-app screen usage detection
  • WindowManager overlay — appears above all apps including games and video
  • Configurable break intervals and overlay dismissal behaviour
  • Signed APK build — installable as a standalone app
🥫 PanTry in development

A local-first PWA for tracking grocery and medication expiry dates. All data is encrypted client-side with AES-256-GCM before leaving the device — the FastAPI backend handles sync only, and cannot read user data. Works offline via IndexedDB with sync on reconnect.

PythonFastAPIPWAAES-256-GCMWeb Crypto APIIndexedDB

Technical Highlights

  • AES-256-GCM client-side encryption via the Web Crypto API — server receives only ciphertext
  • Local-first with IndexedDB — fully functional offline, syncs when a connection is available
  • Barcode and OCR scanning for fast item entry
  • FastAPI backend on Oracle Cloud free tier for lightweight sync
  • Tracks both groceries and medications with configurable expiry alerts
🤖 Discord Bots ongoing

Three Discord bots, each built to solve a specific real-world problem. Each one does its job well and stays in its lane — mostly.

PythonDiscord APIPostgreSQL

What They Do

  • LaceyBot — medication reminders, water reminders, and fully custom scheduled reminders
  • AngelBot — generates hex colour swatch images, reports current front status, and tracks last activity in any channel
  • Patches — the Patchwork support bot. Handles passphrase resets and support ticket creation with log parsing, bridging Discord and the Patchwork platform

// what i work with

Skills & Tools

Languages

Python 3.13SQLBashGo

Backend & APIs

FastAPIPydantic v2PostgreSQLSQLite

CLI & Terminal

TyperTextualRich

Frontend & PWA

PWAIndexedDBWeb Push (VAPID)Web Crypto API

Mobile

Android (Java)Accessibility Service APIExpo / React Native

Auth & Security

Discord OAuthAES-GCMRSA-2048VAPID / Web Push

Tooling

UVGitJira

Infrastructure

Raspberry PiCaddycloudflaredGitHub ActionsPostgreSQL
Spec-Driven Development — I've built my workflow around writing clear, complete specifications before writing code. This came from personal necessity (auditory processing difficulties make verbal-only requirements unreliable), but the benefits are universal: fewer revisions, clearer PRs, and requirements that AI coding agents can actually act on.
Accessibility-First Thinking — As someone who is dyslexic, I've built accessibility features professionally (colour screen overlays, readable interfaces) and I bring that perspective to every project. Good software should work for the people using it, not just the people building it.

// get in touch

Let's Talk

I'm open to freelance work, contract roles, and interesting full-time opportunities — especially anything involving Python tooling, API development, or accessibility-focused software. Written communication works best for me.

A note: I work best with clear written briefs rather than calls or verbal-only discussions. If you're reaching out about a project, a short written summary of what you need goes a long way — and I'll always respond thoroughly in kind.