// 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
// 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
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
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
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
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
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. The backend is a self-hosted FastAPI server running on a Raspberry Pi 5, with a Neon PostgreSQL database and a cloudflared tunnel. Built with genuine care for the community it serves.
PythonFastAPIPostgreSQLPWAIndexedDBWeb PushAES-GCMLogto OIDCRaspberry Pi
Technical Highlights
- AES-GCM end-to-end encryption — the server stores and routes encrypted blobs it cannot read
- Self-hosted FastAPI backend on a Raspberry Pi 5 with Caddy reverse proxy, cloudflared tunnel, and GitHub Actions CD runners
- Per-device Web Push notifications via VAPID — because your phone and your laptop are different devices
- Local-first with IndexedDB — sensitive data lives on the user's device; the server is an encrypted relay
- SimplyPlural import support for existing community users
↗ patchwork.work
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 ActionsNeon PostgreSQLSelf-Hosting
What I Built
- Migrated Patchwork from Railway PaaS to a self-hosted Raspberry Pi 5 — full infrastructure ownership
- Caddy reverse proxy for HTTPS termination and routing
- Cloudflared 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
- Neon PostgreSQL as the managed database layer — serverless, scales to zero
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
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
- FastAPI backend on Oracle Cloud free tier for lightweight sync
- Tracks both groceries and medications with configurable expiry alerts
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.13SQLBash
Backend & APIs
FastAPIPydantic v2PostgreSQLSQLite
CLI & Terminal
TyperTextualRich
Frontend & PWA
PWAIndexedDBWeb Push (VAPID)Web Crypto API
Auth & Security
Logto OIDCDiscord OAuthAES-GCMVAPID / Web Push
Infrastructure
Raspberry PiCaddycloudflaredGitHub ActionsNeon PostgreSQL
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.