Software Engineer building production platforms, AI tools, ML retrieval systems, and full-stack products
Portfolio • GitHub • LinkedIn • Email
Doppel — Machine Learning Music Recommendation Engine
A hybrid music recommendation system that finds songs with a similar feel by combining cultural retrieval, metadata matching, audio embeddings, vector search, and LLM-generated explanations.
- Architecture: Pulls candidates from Last.fm/ListenBrainz, matches tracks against MusicBrainz, and reranks by audio similarity using LAION-CLAP embeddings with PostgreSQL + pgvector.
- Performance: Designed a lazy, self-growing vector corpus that embeds only candidates surfaced by real queries, reducing repeat-run latency by roughly 60×.
- Evaluation: Built a 19-seed evaluation harness across 8 genres to compare CLAP audio reranking against cultural-retrieval baselines and HNSW nearest-neighbor search.
- Product: Shipped a Next.js console for visualizing pipeline telemetry and explaining why recommendations were returned.
Stack: FastAPI, Python, PostgreSQL, pgvector/HNSW, Next.js, TypeScript, Docker, LAION-CLAP, Anthropic Claude
Millennium — Self-Hosted Trading Card Portfolio Tracker
A full-stack Yu-Gi-Oh collection and pricing system that treats a trading card collection like an investment portfolio: cost basis, market value, reconciliation confidence, pricing coverage, and unrealized gain/loss.
- Data engine: Built a confidence-scored CSV import and reconciliation pipeline that matches collection exports against a 43,000+ printing catalog while preventing cross-edition pricing errors.
- Portfolio logic: Tracks per-lot cost basis, market value, and unrealized gain/loss instead of flattening ownership into a single average price.
- Infrastructure: Self-hosted on a Hetzner Linux VPS behind Caddy TLS with containerized services, pull-based deployment, nightly systemd ETL jobs, and off-box PostgreSQL backups to Cloudflare R2.
- Quality: Shipped a Next.js product UI with interactive valuation views, OpenAPI-generated TypeScript clients, 873 automated pytest/Vitest/Playwright tests, and a live ops dashboard for pipeline health.
Stack: Django 5.2, Django REST Framework, PostgreSQL, Next.js, React, TypeScript, Playwright, Docker, Caddy, Cloudflare R2
I currently work as a Software Engineer at CelLink, where I build and maintain internal production software used across multi-site manufacturing operations.
Selected work includes:
- LLM agent: Built a production Microsoft Teams assistant using FastAPI, the Anthropic SDK, and the M365 Agents SDK, enabling 500+ users to query live SQL Server data in natural language and cutting ad-hoc data requests by 80% at roughly $115/month.
- RAG system: Built an internal developer Q&A system over 170+ Confluence pages using semantic vector search, locally hosted LLMs, and the Atlassian REST API, reducing recurring software-team support requests by 20%.
- Internal platforms: Architected and maintained 15+ production ASP.NET MVC applications on SQL Server serving 500+ employees across California and Texas sites with 99.9% uptime.
- Performance: Reworked critical SQL Server procedures with cursor elimination, set-based CTE/CROSS APPLY rewrites, and composite indexing, reducing p95 execution time from 11s to 500ms.
- Data infrastructure: Designed 20+ event-driven ETL pipelines processing 50,000+ manufacturing records daily, then migrated them to a K3s Kubernetes cluster with multi-node failover.
| Area | Tools |
|---|---|
| Languages | Python, TypeScript/JavaScript, SQL, C# |
| Backend | FastAPI, Django + DRF, Node.js/Express, ASP.NET MVC |
| Frontend | React, Next.js, TanStack Query, Tailwind CSS, Vitest, Playwright |
| Databases | PostgreSQL, pgvector/HNSW, Redis, SQL Server |
| AI/ML | RAG, hybrid retrieve-rerank, LLM tool-calling, vector search, text/audio embeddings, local LLM deployment |
| DevOps | Docker, Kubernetes/K3s, GitHub Actions, GitLab CI, Caddy, systemd, AWS S3, Cloudflare R2, Grafana, Vercel |
I like building pragmatic systems that survive contact with real users: clean data models, observable pipelines, boring deployment paths, fast feedback loops, and UIs that make messy operational data easier to trust.
- Software Engineer at CelLink
- B.S. Computer Science, University of Minnesota — Twin Cities
- Minors in Information Technology and Digital Media Studies
- Experience across AI tooling, internal platforms, manufacturing software, ETL, full-stack applications, and self-hosted deployment

