FULL-STACK ENGINEER
+ APPLIED AI

I ship production web apps with local AI baked in — from a searchable IGCSE question bank to a real-time voice engine. I design the data model, write the backend and the frontend, run the servers, and keep it live for the people using it. Mostly solo, mostly self-hosted._
this header runs on the same real-time game loop I teach in my pygame course. WASD or tap to move.
SELECTED WORK APPLIED AI
20+
apps shipped & running in production
solo
product, backend, frontend, ops
local
AI on my own hardware, no paid APIs
real
users: students, teachers, schools

Selected work

Software with real users behind it. Screenshots are from the live apps.
Honeybee: a searchable bank of 1,663 IGCSE Maths past-paper questions with a random-question practice tool Raccoon: the digitalized coursebook, searchable by meaning, split into chapters and sections
Education platform · design + build + host

Honeybee & Raccoon

Two IGCSE revision platforms built on one engine. Years of past papers and entire coursebooks are digitalized into a structured database: 1,663 questions each linked to its mark scheme, and a coursebook split into hundreds of sections.

Students search by meaning (vector search, not keywords), jump from any question to similar ones, and revise straight from the book. A local LLM pre-generates exam-style practice per section, which the teacher approves before students ever see it — so the question supply never runs dry, and nothing ships unreviewed.
FlaskSQLite semantic searchlocal embeddings (nomic) Ollama / local LLMcontent pipeline
Source Analyser: IGCSE History Paper 2 source-analysis practice with marking-scheme feedback
Client delivery · built for another teacher

Source Analyser

An IGCSE History Paper 2 trainer built for a history teacher and delivered on her own domain. It models the three real Paper 2 question types and gives students structured, marking-scheme-based feedback before they submit.

Separate teacher and per-student logins; a source library of text and image sources; a question bank that links questions to sources; and a teacher dashboard that tracks who is engaging and who needs support. She adds content year on year and every student sees it instantly.
FlaskSQLite multi-role authimage uploads shipped for a client
Timetable Maker: managing subjects across upper and lower secondary before generating a schedule
Custom school software · scheduling

Timetable Maker

A timetabling tool built around one school's actual option-block structure, instead of forcing the school onto generic software that doesn't fit.

Admins define subjects, teachers, rooms and student groups; a local-search scheduler then produces clash-free timetables and minimises the soft constraints the school cares about. Students can self-serve and download their own timetable as a PDF.
FlaskSQLite constraint solvingoptimisation PDF export
Calendar: a full school academic-year calendar with colour-coded day types and month notes
Custom school software · collaboration

School Calendar

A school academic-year calendar builder, rebuilt from a one-shot PDF script into a shareable, editable, reusable tool used across different school phases and years.

Every calendar is a shareable edit link that autosaves as you work. A one-toggle parents' view hides internal categories and keeps a separate set of parent notes, so families see exactly the right thing. Exports a clean, word-wrapped PDF; full undo/redo; data-driven, editable categories.
FlaskSQLite share links + autosaverole-based views reportlab PDF

Applied AI & R&D

Local models wired into real products. Everything here runs on my own GPU box, reachable from my phone over a private tunnel — no third-party AI APIs.

Creative Studio

A phone-first AI workspace. A GPU box at home does the compute; a WireGuard tunnel exposes it to my phone through a fully mobile UI. It streams chat from local LLMs (with a model picker and vision), takes voice input via local speech-to-text, generates images and music locally, and keeps a persistent vector memory that recalls relevant past context. It sends web push notifications, uses tools, and loads and unloads models on demand so a 16 GB card can juggle far more than it should fit.

WireGuardFlaskstreaming LLMvector memory (RAG)web pushtool useVRAM orchestrationmobile-responsive

Duplex Cortex

real-time voice engine

A full-duplex local voice engine: it listens while it speaks and you can cut in. Faster-whisper + VAD for the ears, a local LLM for the brain, and a streaming cloned voice for the mouth, overlapped to hit ~0.8s response latency entirely on-GPU.

faster-whisperSilero VADstreaming XTTSasync pipelines

Parliament Archive

transcribe · search · Q&A

Long parliamentary sessions matter but nobody has hours to watch them. This transcribes, diarizes and summarizes them, makes them semantically searchable, and answers questions with a local LLM and clickable citations back to the exact moment.

Whisper STTdiarizationsemantic searchgrounded Q&A

12,000 Years of Invention

3D + generated text

An interactive timeline of human inventions where each artifact is a 3D model pre-generated with Hunyuan3D and a local LLM writes its description. History you can rotate in your hand.

Hunyuan3Dmodel-viewerlocal LLMNode

Deck

local-AI → real .pptx

Type a topic and a local LLM builds a full slide deck as typed, editable JSON, which you tweak inline before exporting a real PowerPoint. Multiple visual styles, self-generated imagery via FLUX, and an automated QA pass that reviews its own output.

local LLMstructured outputFLUX imagespython-pptx

Digital Avatar

talking-head pipeline

A generative-media assembly line for a talking avatar: concept art with SDXL, a 3D character via Hunyuan3D, a cloned voice with XTTS, and lip-synced face animation with MuseTalk.

SDXLMuseTalkXTTS clonemedia pipeline

Muzeji Srbije

museum database

A curated, editable library of Serbian museums worth visiting — seeded from open data and designed to be corrected and extended as new information turns up.

ReactExpressSQLiteJWT auth

Relay

phone controls the PC

A mobile remote that starts/stops recording and drives my desktop from anywhere over a Tailscale mesh — a small websocket bridge between phone and PC.

Tailscalewebsocketsremote control
A pattern across these builds: most ship in two halves — a private app that uses the GPU to pre-generate the heavy content (questions, 3D models, descriptions, decks), and a lean public app that serves the finished result. Expensive compute stays on my hardware; only the output goes online.
models I've built with: Qwen 3.5 LLM Qwen3-VL vision faster-whisper STT VOSK offline STT XTTS v2 voice clone SDXL image FLUX image ACE-Step music Hunyuan3D-2 3D MuseTalk lip-sync nomic-embed embeddings

More things I've shipped

Games, tooling, and the infrastructure that keeps everything else alive.

Escape Room (co-op)

online multiplayer, from a single-player engine

Two pygame clients with a rented VPS in the middle as an authoritative 30 Hz relay — which turns a local Python game into online multiplayer. Cooperative puzzles (pressure plates, split codes, a teleport-and-cross room) that only resolve if both players work together in real time. A cheap, clever use of infrastructure most people wouldn't reach for.

pygameauthoritative serversocketsnetcode

Pygame Course

The pygame course idea generator: four cards that deal a game concept nobody has built

A narrative course on making original games, plus a companion site whose landing page is a playable game and whose idea generator deals shareable game concepts.

Flaskcanvasteaching

Guess the Wheel

Guess the Wheel: create or join a game room

A multiplayer party guessing game with generated room codes and full session management.

Noderooms / sessions

Minecraft Server

moderated & whitelisted

A PaperMC server run as a safe, moderated, whitelisted creative space for kids — a place parents are happy to let children build in.

PaperMCmoderationcommunity

Whiteboard

A collaborative classroom whiteboard: accounts, shared boards, invites and live multi-user drawing over websockets.

Nodesocket.iorealtime

Kiguel Math

A tutoring platform with automatic grading, a Telegram bot integration, and image/PDF upload so problems and worked solutions live together.

Node / Expressauto-gradingTelegram bot

The teacher's cockpit: tracking student homework, assignments and lessons over time — who has done what, what's due, and where each student is.

Nodeassignment tracking

A team project tracker built as a custom tool for coordinating work on a shared project.

Nodeproject tracking

VPS Dashboard

the ops layer

A control panel that deploys, monitors, rolls back and health-checks every app across the fleet over SSH — systemd, pm2 and static sites in one place — and reaches back to control the local GPU apps too. It's how all of the above stays alive.

FlaskSSH automationdeploy + rollbackmonitoring

How I work

I take a real problem — a school's timetable, a student's revision, an hour of footage nobody has time to watch — and turn it into a live product that the people involved actually use. I own the whole path: data model, backend, frontend, deployment and the servers it runs on.

I default to self-hosted and local. The AI in these projects runs on my own hardware, which keeps data private, costs near zero, and forces me to actually understand the models — speech, language, image, music and 3D — rather than call an API and hope.

I ship small, decoupled apps that don't take each other down, I keep them running, and I care about the details on the far side of the screen: shareable links, a parents' view, a space that's safe for kids. Everything on this page is something I built and still maintain.