Jamie Software Lab
Home / About
Developer UK-based Full Stack

About Me

I'm Jamie, a software developer based in the UK who builds real things that actually run. Every project on this site is live, deployed, and doing something useful. No templated demos, no copy-paste tutorials.

The Short Version

I got into programming because I wanted to automate things that annoyed me. The first real project was a script to scrape rental listings. I was tired of manually checking property sites every morning. That script became GlobeScraper, and the process of building it taught me more than any course could.

Since then, I've built tools across the full stack: backend APIs with Flask and FastAPI, data pipelines with Python, real-time applications with WebSockets, and this portfolio site itself: a static HTML/CSS site that scores 97+ on every Lighthouse metric without a single framework dependency.

I care about software that works. Not software that looks impressive on a slide deck, but software you can clone, run, and actually use. Every project here has a live demo, source code, and deployment documentation.

14+ Live projects
Python Primary language
Hetzner Self-hosted
99.5% Uptime target

Technology Stack

Backend & APIs

Python Flask FastAPI SQLite PostgreSQL Redis

Python is my primary language for backend services, data processing, and automation. I use Flask for established projects and FastAPI for new services where async and auto-generated docs add value.

Frontend & Web

HTML CSS JavaScript Jinja2 WebSockets

I build with semantic HTML and vanilla CSS. No frameworks unless they solve a real problem. This site itself is the proof: zero JS dependencies, system fonts, dark theme via CSS custom properties, sub-second load times.

DevOps & Infrastructure

Docker Nginx Linux GitHub Actions Gunicorn systemd

Everything runs on a single Hetzner VPS (CX23, Debian). I manage deployment with Docker, reverse proxy with Nginx, process management with systemd, and TLS with Let's Encrypt. CI/CD via GitHub Actions.

Data & Tooling

Pydantic Prisma BeautifulSoup pandas scikit-learn pytest

Data validation with Pydantic, ORM with Prisma, web scraping with BeautifulSoup, ML experiments with scikit-learn, and testing with pytest. Every tool chosen because it solves a specific problem, not because it's trendy.

Engineering Approach

Ship Real Things

Every project starts as a working prototype. I deploy early, test with real data, and iterate based on what breaks. Perfection is the enemy of done.

Simplicity First

I reach for the simplest tool that solves the problem. SQLite before Postgres. Vanilla CSS before Tailwind. Flask before Django. Complexity is earned, not assumed.

Own the Stack

I deploy to my own server, manage my own infrastructure, and debug my own production issues. No hidden Vercel magic. I understand every layer from DNS to database.

These principles aren't abstract ideals. They're reflected in every project:

  • GlobeScraper: started as a 50-line script, grew to a full app based on real usage
  • Server Pulse: built when I needed uptime monitoring and existing tools were overkill
  • Market Snapshot: real-time crypto prices because I wanted to understand WebSockets
  • This portfolio: static HTML because a React SPA for 14 project cards is absurd

Current Learning

Exploring Now

  • Distributed systems: understanding consensus, replication, and failure modes
  • Advanced SQL: window functions, CTEs, query planning, and optimisation
  • Rust fundamentals: memory safety, ownership, and systems-level thinking
  • Observability: structured logging, metrics, tracing, and incident response

Reading List

  • Designing Data-Intensive Applications by Martin Kleppmann
  • The Pragmatic Programmer by Hunt & Thomas
  • System Design Interview by Alex Xu
  • Clean Architecture by Robert C. Martin
Learning Roadmap - 2025
Python Mastery
System Design
Distributed Systems
Rust / Go
Cloud Architecture

Beyond the Code

When I'm not building software, I'm usually reading about it, or doing something entirely unrelated to keep perspective. Good engineering comes from understanding people and problems, not just languages and frameworks.

I believe the best software is built by people who are curious about the world, not just about technology. The problems worth solving exist outside the terminal.