Projects

Things I've built. The first one runs live, right on this page.

Live demo

Application journey

The flow chart from my job tracker, running on sample data. Hover or tab to a stage to see how many applications reached it.

  • Stage still in progress
  • Ended without an offer
  • Band width shows how many applications took that path.
View as a table
Sample application journey: applications moving between stages
FromToApplications
AppliedRecruiter screen18
AppliedRejected22
Recruiter screenInterview10
Recruiter screenRejected8
InterviewFinal interview5
InterviewRejected5
Final interviewOffer3
Final interviewRejected2

A full-stack job-search platform: a public portfolio site and a private, login-gated application tracker, built from one React/TypeScript codebase on an async FastAPI and PostgreSQL API. It uses Claude to tailor resumes, write cover letters and generate interview prep, and includes a dashboard and a Sankey view of each application's journey. Backend and frontend test suites run in CI on every pull request, and the two sites deploy separately to Vercel and Railway.

Visit project(opens in a new tab)
  • Python
  • TypeScript
  • React
  • FastAPI
  • PostgreSQL
  • Tailwind CSS
  • Docker
  • GitHub Actions
  • Anthropic API
  • SQLAlchemy

A Python service that polls the TVmaze API for recently aired episodes of a configured show list, compiles them into a digest, and sends alerts through ntfy.sh or Gmail. It caches show IDs and previously notified episodes to avoid duplicates, and runs once or daily via a scheduler or cron.

Visit project(opens in a new tab)
  • Python
  • REST APIs
  • TVmaze API
  • SMTP
  • YAML
  • Cron

A Go command-line tool for managing S3. It creates, lists, and deletes buckets, and uploads, downloads, lists, and deletes objects, streaming files to and from disk. Inputs are validated and AWS credentials come from the SDK's default configuration chain.

Visit project(opens in a new tab)
  • Go
  • Cobra
  • AWS S3
  • AWS SDK
  • CLI

A serverless REST API for creating, listing, updating, completing, and deleting todos, running on AWS Lambda and API Gateway with IAM-signed authorization on data endpoints. The infrastructure, including an on-demand DynamoDB table, is defined as code with SAM/CloudFormation. It ships with a dependency-free browser client that signs requests in the browser.

Visit project(opens in a new tab)
  • Go
  • AWS Lambda
  • API Gateway
  • DynamoDB
  • IAM
  • SAM
  • CloudFormation
  • REST APIs
  • JavaScript
  • Serverless

A self-hosted n8n workflow automation platform deployed on AWS EC2, containerized with Docker Compose and configured per environment for reproducible builds. It includes custom HTTP nodes for external APIs and AI agents that enrich data and carry out tasks.

  • n8n
  • AWS EC2
  • Docker
  • Docker Compose
  • AI Agents
  • Workflow Automation

A Slack bot built during a two-week innovation sprint to surface recurring team information and improve productivity. It is an object-oriented Python Bolt server running on AWS Fargate and deployed with CloudFormation. It integrates PagerDuty and ServiceNow through a shared library.

  • Python
  • Slack Bolt
  • AWS Fargate
  • CloudFormation
  • PagerDuty
  • ServiceNow
  • REST APIs