Digital Projects · Self-Taught Builder
8 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.
8
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.

01
GHCountdown app icon

GHCountdown

Local-First Deadline Workspace

GitHub
TypeScript React 19 Electron 41 Tailwind v4 IndexedDB

Six weeks before an FTC submission deadline, I had Google Calendar, Notion, and Apple Reminders open at once — and still missed one. Not because I forgot, but because the one number that mattered was buried inside seventeen other features. I wanted one screen, one number: open laptop, know immediately. No existing tool did that, so I wrote one in a weekend — and then used it every day for six months, which is when it started to grow.

Each later choice was a constraint I chose to defend. Electron kept every byte of data on my machine — true local-first, no account, no outage that makes me miss a deadline. A hand-rolled IndexedDB layer, written from the spec with migration logic by hand, meant I could debug any data issue without reading someone else's abstraction. And a strict 60fps Framer Motion target, because I open this app every single morning, and every slightly-off transition compounds.

What I learned
"Writing a changelog and a PRD for your own tool means being honest about what it actually is versus what you want it to be. No grade is on the line. Ownership is the sharpest feedback loop I've ever encountered."
ghcountdown — live deadline counter
Loading demo…
New deadline
Add a deadline above to start
Urgency tiers: > 14 days gold · 3–14 days amber · < 3 days red. The real app stores everything locally — no server ever sees your data.
02

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
03

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
04
Flight Network app icon

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…
05

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…
06
GH Utils app icon

GHutils

7-Tool Utility Toolbox

Live Site
TypeScript Static Web

Seven browser-based utilities in one glass-morphism interface — built because opening six different websites to convert units, generate a password, and encode a string felt absurd. The tools: Base64 encoder/decoder, Unit Converter (100+ categories), Text Stats, Password Generator, Color Picker, Hash Generator, AES-256-GCM Encryption. Everything runs client-side. No data leaves the browser, ever.

The stack is deliberate: React 19 + Framer Motion for smooth micro-interactions between tools, strict TypeScript for every utility's I/O shape, Vite for instant iteration. The encryption tool was the hardest — AES-256-GCM with proper IV randomization and base64 output means the implementation is auditable. I read the Web Crypto API spec. That's not a shortcut you take.

What I learned
"Seven tools should feel like one. The glass-morphism isn't decoration — it's the visual argument that everything belongs together."
ghutils — 7-tool utility toolbox
Loading demo…
← click a button to run a utility
07

DailyCLI

Terminal Morning Briefing

GitHub
Python 3 CLI argparse click

One command every morning: real-time weather from Open-Meteo (no API key, no rate limits), RSS news feeds filtered by topic, location profiles for switching between cities, and custom color themes — all rendered in a Rich terminal layout. No paid APIs. No browser required. The question it answers: what do I need to know before I start today?

Built because opening five browser tabs before 8am felt like friction I should be able to eliminate. Python + Rich was the right choice: the library makes terminal UI feel like a real design medium rather than an afterthought. What I learned building it: working with live weather APIs, parsing RSS cleanly across inconsistent feeds, and the difference between "it works on my machine" and "it works every morning."

What I learned
"The best morning dashboard is the one you actually open. One command, zero loading spinners, nothing between you and the information."
dailycli — terminal morning briefing
Loading demo…
george@dailycli:~
george@dailycli:~$ 
08

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

Early-exit routing on real BERT-base weights. ~37% less measured energy, no significant accuracy loss.

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