Skip to content
joey_pang
Joey Pang smiling, in a black shirt
London or remote

Joey Pang

Small, measured increments. I don't cut corners.

Full-stack engineer, ready for a graduate role that ships to real users.

BSc Computer Science · First Class Honours · Brunel University London, 2026

1,188
automated tests · SticksNBoulders
5
active client engagements · WebSprint
About

I build systems other people rely on, because the work gets interesting once someone else's day depends on it running correctly.

Most of what I've shipped has had a real user on the other end: a powerlifting coach and his athletes logging training, small-business owners whose sites I run, students building flashcards from their own lectures. That has shaped how I work. Tests come before features, infrastructure stays boring enough that I understand it end to end, and AI tooling is treated as a collaborator whose output gets checked rather than trusted.

Outside of code I compete in powerlifting, a sport of small, measured increments logged over months. It's roughly how I think about engineering progress too.

Degree
BSc Computer Science, First Class Honours
University
Brunel University London, 2026
Based
London, UK
Looking for
Graduate / junior software engineer roles
Portrait of Joey Pang wearing glasses and a black bomber jacket
Joey Pang on the podium at Summer Slam, British Powerlifting, July 2026
On the podium at Summer Slam, British Powerlifting, July 2026.

Three case studies

Each one covers the problem, how AI tooling was used and checked, the architectural decision and what it replaced, and a measured result.

C ContextA AI workflowS System architectureE Evidence
01 · Client delivery · self-hosted AI infra

WebSprint

My studio: full-stack sites and AI assistants for owner-operated small businesses. Sites run on Vercel; the AI runs on hardware I maintain.

Next.jsSanityVercelProxmoxOllamaCloudflare Tunnel
5
active client engagements
C Context

Founded early 2024 for early-stage founders who needed a technical partner instead of managing freelancers or hiring a CTO. The focus moved from MVP builds, to fixed-fee Sanity sites on a monthly retainer for small businesses and trades, to a 2026 productised offering for course sellers and photo/video studios that bundles an AI assistant in place of the separate subscriptions they'd otherwise pay for.

The through-line: owner-operators with no in-house technical capacity who need someone else to fully own the technical side.

A AI workflow

A design mockup gets turned into a developer feature spec by an AI agent, which I then review.

On a recent storefront build, that review caught a privacy error (the maker's private legal name used across the site instead of her public one), a brand misspelling carried into the domain and metadata, a missing product page, and a feature cut because it didn't serve the client's actual goal. For outreach, AI drafts every message but a human sends each one by hand.

S Architecture

Client sites deploy on Vercel with Sanity as the CMS. Self-hosted infrastructure exists separately, purely for AI inference: a Proxmox homelab with one VM dedicated to a local LLM behind a passed-through GPU, reached via a Cloudflare Tunnel.

One shared model serves every client, told apart by system prompt and client knowledge base. Self-hosting removes per-token API costs, which is what makes a low monthly retainer with a bundled AI assistant profitable. I picked a used RTX 3060 12GB over an RTX 4060 8GB for VRAM and memory bandwidth, the actual generation-speed bottleneck.

E Evidence
3 / 4
paying clients retained
14 mo
average retention · longest 23
~1.6 wks
average build time per site

The one client not retained closed their business about six months after launch.

02 · AI engineering · research project

MemoAI

A final-year research project testing whether LLMs can lower the barrier to spaced-repetition study tools.

PythonFastAPIMongoDBOllamaNext.js
C Context

Formally titled “Investigating How LLMs Can Reduce the Perceived Effort of Utilising Online Spaced-Repetition Tools to Lower the Barrier for Adoption Among University Students.”

Spaced repetition works, but adoption is low because of the perceived effort of making and maintaining flashcards, not disbelief in the method. Anki, Brainscape and Quizlet need manual creation or CSV import, which just relocates the effort, and their paywalled AI features refine existing cards rather than generate from raw lecture material.

A AI workflow

The backend mediates every LLM call. The frontend never talks to the model directly; only structured data crosses that boundary, which tightens prompting and shrinks the hallucination surface.

An explicit 80/20 rule: the model does about 80% of deck generation, and the remaining 20% is mandatory human verification before anything saves. Generated content lands in draft entities, never the saved decks, so a hallucination corrupts a draft, not real study material. Full automation was considered and rejected for exactly this reason.

S Architecture

A single consolidated backend service rather than microservices: a deliberate trade-off for a solo developer on a fixed academic deadline. Web-first frontend.

AI in education got framed as a cheating problem the moment it showed up in schools, and not enough people asked the opposite question: could it actually help people study? The same argument already settled in software engineering: AI didn't replace developers, it became a tool they use.
E Evidence

An ethics-approved study with a counterbalanced design: participants did both manual and AI-assisted flashcard creation, in alternating order, to cancel out fatigue and order effects.

12
recruited students
100%
survey completion
12 / 12
“strongly agree” AI generation would make them more likely to use spaced repetition regularly
3.72 /5
manual creation effort
4.54 /5
AI-assisted effort reduction
4.38 /5
review usability
4.71 /5
perceived effort & adoption

Limit: no usage beyond the study. The self-hosted inference stack (RTX 4060, 8GB VRAM) fell back to CPU past around four concurrent users, a real capacity ceiling.

03 · Full-stack system · testing discipline

SticksNBoulders

A powerlifting coaching platform replacing RTS, the industry-standard tool most coaches use and most hate.

Next.jsReactTypeScriptVitestAppwrite
E Evidence
1,188
automated tests
2
real users today · athlete + coach

Me and my actual coach. Near-term, his other five athletes; by end of year, hopefully three more coaches. Small number, but both current users are the real target user.

C Context

Most powerlifting coaches use RTS (Reactive Training Systems), priced for high-volume coaching businesses, so beginner coaches and athletes end up sharing accounts.

The athlete-side workflow was: get a program from RTS, log sets in Strong for its better mobile UI, send the coach videos and RPE notes over WhatsApp because RTS can't attach media to a set, then screenshot the workout into ChatGPT to estimate calories before logging it in Cronometer. Five tools for one session. Coaches retype custom exercise names in full every time because they break RTS's UI. My own coach was ready to go back to Excel.

A AI workflow

I don't vibe code. AI runs this like a real project: phasing features, separating concurrent work from trivial tweaks, and flagging what needs my coach's input before I build it.

For tests, I write the first edge-case example by hand, then an agent extends that pattern across the rest in Vitest. I trust the model more on low-stakes, easily checked changes; everything still goes through a PR on a dev→prod branch flow.

S Architecture

Self-hosted Appwrite on a repurposed gaming PC, not Firebase or Appwrite Cloud.

I don't know yet if this sees real scale, so a hard resource ceiling forces me to fix inefficient functions instead of paying for more compute. If it takes off, moving to Appwrite Cloud is a data migration, not a backend rewrite.

Homelab

Everything self-hosted behind MemoAI and WebSprint runs on hardware I built and maintain myself: a Proxmox hypervisor, a TrueNAS storage box, and a handful of VMs and containers. It's also where most of the systems instincts above actually came from.

01

Right-sizing compute

Started with a full Ubuntu VM just to give an AI agent shell access. It didn't need a desktop environment, just a shell, so I replaced it with two minimal Linux containers.

02

Diagnosing a GPU contention bug

A text-to-speech service was silently parking most of a shared GPU's memory, starving the LLM alongside it down to CPU at about 5 minutes per response. Moving TTS to CPU-only freed the GPU and dropped that to about 14 seconds.

~5 min →~14 sper response
03

One tool per access pattern, not one tool for everything

Single-writer file access, multi-writer live collaboration and headless automation aren't the same problem. Learned the hard way: file sync and git's rename semantics don't mix, and one popular network file-sharing protocol can't even run chmod.

topology · simplifiedGPU-boundCPU / storage
Consumers
WebSprint sites
Vercel · AI assistant
MemoAI
study backend
Me, remote
admin
Edge
Cloudflare Tunnel
public → inference
Tailscale
private mesh · SSH keys
Proxmox hypervisor
VM · local LLM
GPU passed through
LXC · agent shell
minimal Linux
LXC · agent shell
minimal Linux
TTS service
CPU-only
Storage
TrueNAS
storage box
Snapshots
scheduled
Replication
off-box copy
VM & container provisioningDocker & Docker ComposeSSH key-based authTailscale mesh networkingCloudflare TunnelsStorage snapshots & replication
Activity · from the GitHub API

On GitHub

Pinned work at github.com/kar-kit
Refreshed hourly

Get in touch

For roles, interviews or questions about any of the work above. I read every message myself and reply within two working days.

GitHub
kar-kit
No mailing list. Your details are only used to reply.