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.
Same logic, scaled for the browser. Every build below has an interactive demo you can run right now — no install, no setup.
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.
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.
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.
Airline Miles Redemption Calculator
GitHubSpent 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.
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.
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.
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."
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.
All disciplines, all work, one page.
Early-exit routing on real BERT-base weights. ~37% less measured energy, no significant accuracy loss.
OPR, Monte Carlo, synergy scoring — and an interactive simulator you can run right now.