Digital Projects · Self-Taught Builder
7 Projects · Shipped · Deployed · Iterated from Real Use

Smaller
Builds.

Not every project starts with a research question. Some start with annoyance, curiosity, or wanting to understand how something works at the level where you could break it.
7
Projects shipped
5
Live deployments
4
Languages used
2024
Mostly built

Each of these started from the same place: I needed something, I couldn't find it, so I built it. The pattern repeats across languages, frameworks, and problem domains.

Some are technically ambitious. Some are embarrassingly simple. All of them taught me something I couldn't have learned any other way.

Builds Playground

Try Live Mini Versions

Same logic, scaled for the browser. Every build below has an interactive demo you can run right now — no install, no setup.

04

ApexType

Competitive Typing & CPS Speed Test

Live Site
JavaScript WebSockets Node.js Express.js

Wanted to understand WebSocket architecture from first principles — so I built something where latency visibly matters. Competitive typing test with real-time leaderboards, custom text sets, and WPM analytics. Every keystroke triggers a server round-trip; the challenge was designing state sync that felt instant at 200ms.

The naive approach (broadcast all state on every keypress) saturates the connection immediately. The actual implementation batches delta updates at 30fps and only syncs leaderboard positions every 250ms, which lets the server handle 10+ concurrent users before noticeable lag. Launched 2024.

What I learned
"The difference between 'real-time' and 'feels real-time' is entirely in what you decide not to send."
apextype — live typing speed demo
Loading demo…
Click Start, then type the passage above
WPM
Accuracy
30
Seconds
#1You
#2CodeBot
#3NightOwl
05

Nova SMP

Minecraft Server + Plugin Ecosystem

Modrinth
Java Plugins Server Admin Video Production Perf Tuning

Started 2023 as a private Minecraft server. Ended up learning server administration (JVM tuning, world management, backup automation), plugin configuration (Paper API, custom event listeners), concurrent-player performance tuning (entity tick rates, chunk loading strategies), and how to produce video content that actually brings people in.

The hardest part wasn't the technical setup — it was figuring out why a technically correct server stays empty. Made original video ads, posted to Modrinth, iterated the content based on what got views. The lesson: a technical product without distribution stays empty. Still running.

What I learned
"A technically perfect product that no one knows about is the same as no product."
nova smp — live server dashboard
Loading demo…
Server Stats
Players online
TPS (tick/s)
Uptime
Memory
Active Plugins — toggle to enable/disable
06

Flight Network

Airline Miles Redemption Calculator

GitHub
JavaScript HTML/CSS Static Web

Spent too long manually comparing airline mileage redemption values across different carriers and routes, so I built a static web calculator that does it automatically. The calculator takes your origin, destination, and miles balance and computes redemption value across multiple airline programs — cents-per-mile comparisons for each combination.

Completely client-side (no server, no API calls), which means it loads instantly and works offline. Built 2024. Others started using it and gave feedback — two users specifically asked for premium vs economy cabin comparisons, which I added. Small tool, real users, iterated from feedback.

What I learned
"Static sites are underrated — no server means no downtime, no latency, no maintenance overhead."
flight network — miles redemption calculator
Loading demo…
07

DepoWhiteboard

Real-Time Collaborative Canvas

Live Site
JavaScript Socket.io Express.js Canvas API

Built to understand Socket.io and event-driven state sync under concurrent writes — specifically the hard part, where two users draw on the same canvas simultaneously and neither sees a flash or jump. The implementation uses operational transformation (OT) to reconcile concurrent stroke operations: each stroke is assigned a monotonic sequence number, and conflicts are resolved deterministically server-side.

Tools: pen, brush, marker, shapes, fill — with live cursor tracking, room-based sessions via shareable links, and full undo/redo stack. The hardest bug: undo across users — when you undo a stroke that another user has drawn on top of, what happens? Solved by treating undo as a new operation in the sequence rather than a rollback.

What I learned
"Collaborative state is not hard because of networking. It's hard because of the semantics of 'what happened in what order.'"
depowhiteboard — collaborative canvas
Loading demo…
08

GHutils

GitHub Workflow Utilities

Live Site
TypeScript Static Web

GitHub workflow utilities in TypeScript — built because I kept repeating the same manual steps when managing repositories (checking branch status, formatting commit messages, generating changelogs from conventional commits). The first version was a shell script. The second version was a web interface because copy-pasting from a terminal was tedious.

Iterated from real use: every feature on the current version was added because I needed it, not because it seemed useful in the abstract. A tool is only finished when you stop having to think about it. Strict TypeScript throughout — built partly as a practice ground for the type system.

What I learned
"Strict TypeScript forces you to be precise about what 'none' means — null, undefined, empty string, and zero are all different answers."
ghutils — github workflow helper
Loading demo…
← click a button to run a utility
09

DailyCLI

Python Task Automation CLI

GitHub
Python 3 CLI argparse click

Python CLI for personal task automation — built to close the gap between "knowing Python" and "actually using Python for daily work." The distinction matters: doing exercises and shipping something you rely on are completely different. DailyCLI automates: morning task list generation from a plaintext config, quick timer/pomodoro management, and clipboard-to-formatted-markdown pipeline for note-taking.

The code is clean but not over-engineered — the point was to build something useful, not to demonstrate every Python feature. Built 2024. The kind of project that teaches you a language faster than any tutorial, because bugs have real consequences.

What I learned
"The fastest way to actually learn a language is to build something you use every day, where bugs have real consequences."
dailycli — python task automation terminal
Loading demo…
george@dailycli:~
george@dailycli:~$ 
10

Velora

JavaScript Interactive UI

Live Site
JavaScript CSS Custom Props Animations HTML

Started as a CSS exercise — wanted to push visual layering further than typical tutorials go. Velora became a testbed for advanced animation timing functions (cubic-bezier chaining, staggered keyframes), CSS custom property cascades (parent-to-child variable inheritance for theme switching), and DOM-driven interaction patterns (event delegation, intersection observer for scroll-triggered reveals).

The codebase is messier than I'd like — the kind of mess that happens when you're exploring rather than building to spec. But the effects are cleaner than I expected: the intersection-observer reveal system in particular is something I've since adapted for other projects, including this portfolio. Shipped 2024.

What I learned
"CSS custom properties aren't just variables — they're a cascade-aware scoping mechanism that makes theming at scale actually tractable."
velora — animation playground
Loading demo…
Velora

Also Explore

Full Portfolio
Back to Portfolio

All disciplines, all work, one page.

Explore →
Research · AI/ML · Paper
JouleRoute-LM

LLM-powered EV route optimization. The big project.

Explore →
Full-Stack · FTC · Live Data
ScoutSelect

OPR, Monte Carlo, synergy scoring — and an interactive simulator you can run right now.

Try Interactive Demo
Explore →
Ready to go back?
Return to Portfolio