Public API
Try it yourself
Everything on this site is served from the same API. It's public, needs no key, and speaks plain JSON. Paste this into a terminal:
curl http://app:8080/projectsEndpoints
GET
/projectsEvery project, newest first.
GET
/projects/currentOnly what's in progress right now.
Live response
fetched when this page loadedjson
[{"summary":"A portfolio spanning three Swift surfaces — a website built with Swift Elementary, a macOS app, and the REST API behind them, built with Hummingbird and PostgreSQL, self-hosted on an Oracle Cloud VM behind Caddy with automatic HTTPS. My favorite personal project: building it meant finally understanding the whole stack — TCP, DNS, TLS, Docker, reverse proxies, and firewall security — from a request's first byte to the SQL underneath.","techStack":"Swift, SwiftUI, Swift Elementary, Hummingbird, PostgreSQL, Docker, Caddy, Oracle Cloud, Cloudflare, macOS","projectType":"personal","logoSlug":"portfolio","projectDate":"Q3 2026","impact":"Every layer self-built and self-hosted — from DNS to database.","isCurrent":true,"name":"Portfolio Platform","hook":"My journey, served by infrastructure I built end to end.","id":"25AAF961-A79A-4EDB-ACDC-4F343EA95485"},{"summary":"Editing customer-communication templates meant hand-crafting XML payloads and re-calling a rendering API to see each variation — slow and error-prone. I built a Java CLI that statically analyzes Apache Velocity templates: it parses each template into an AST, walks it with a custom visitor to discover every XML field the template reads, infers types from usage, tracks conditional field dependencies, and emits a JSON schema. A companion macOS app consumes that schema to auto-generate native SwiftUI forms, builds the XML from user input, and renders the result in-app. The analyzer ships inside the Mac app with a minimal jlink-built JRE, invoked as a subprocess — templates never leave the machine, and users never install Java.","techStack":"Java, Apache Velocity, Swift, SwiftUI, WKWebView, jlink, macOS","projectType":"work","logoSlug":"velocity-analyzer","projectDate":"Q1 2026","impact":"Template variation testing went from hand-editing XML to filling out a form.","isCurrent":false,"name":"Velocity Template Analyzer + Journey Visualization","hook":"Turned hand-edited XML guesswork into auto-generated native forms.","id":"3699FEE6-7512-4DC3-B04E-8263A1C94AA2"},{"summary":"Built with a friend around a simple idea: you live your day, and 24 hours later the app reveals who you walked past who also has it. Devices advertise over Bluetooth LE and estimate proximity from RSSI signal strength. Early versions emitted a static identifier — until I realized anyone could sniff it and link it back to a user, so I redesigned it around hashed UUIDs that rotate on a schedule, making devices unlinkable to outside observers. Now expanding to watchOS with a Find My-style glanceable view.","techStack":"Swift, SwiftUI, CoreBluetooth, iOS, watchOS, Supabase, Oracle Cloud","projectType":"personal","logoSlug":"passerby","projectDate":"Q4 2025","impact":"Working cross-device proximity detection with rotating-token privacy.","isCurrent":true,"name":"Passerby","hook":"Find out who you crossed paths with today.","id":"EB50BB22-C935-4BB7-8539-6FA23921E9EB"},{"summary":"My friends and I had constantly conflicting schedules, and no mainstream calendar lets you check a friend's availability. So I built an app where we share calendars and it proposes times we're all free to hang out.","techStack":"Swift, SwiftUI, Firebase, iOS","projectType":"personal","logoSlug":"ai-calendar","projectDate":"Q4 2024","impact":"Used by my friend group to actually find hangout times.","isCurrent":false,"name":"AI Calendar","hook":"A calendar that finds when my friends and I are actually free.","id":"81242E94-2FDA-422F-A477-6A34A9B5F00A"},{"summary":"After a liability issue around customer disclosure at my mother's henna business, I built an internal app where customers sign a digital waiver covering their rights and possible allergic reactions — every signed copy archived via Resend, with Twilio SMS notifications. It also sends promotional emails to past customers to drive repeat revenue.","techStack":"Swift, SwiftUI, Resend API, Twilio SMS API, iOS, iPadOS, macOS","projectType":"personal","logoSlug":"henna-waiver","projectDate":"Q1 2024","impact":"In production — used daily by a real business; I maintain it with production fixes.","isCurrent":false,"name":"Henna Waiver App","hook":"A waiver app that protected my mother's henna business from legal risk.","id":"AEFCB77B-7297-4213-BAF7-C6BBF2244A80"},{"summary":"With AI advancing, I wanted to replicate the chat experience for myself — a native iOS ChatGPT client built in my senior year of high school, months after the API launched.","techStack":"Swift, SwiftUI, Firebase, OpenAI API, iOS","projectType":"personal","logoSlug":"ai-chat-app","projectDate":"Q2 2023","isCurrent":false,"name":"AI Chat App","hook":"The high school project that started my AI ambition.","id":"3EB6CFB6-8936-49A5-B717-EB49C7139757"}]