Cloud Projects

PantryPlanner

I built a serverless web app that takes user preferences like meal goals, budget, and available ingredients, then generates a personalized meal plan with recipes and an organized grocery list. The application uses AI generation behind the scenes and ships through an automated CI/CD pipeline with secure deployment controls.

Stack AWS Lambda · S3 · CloudFront · API Gateway · GitHub Actions CI/CD · Claude AI

Inputs Meal preferences, budget targets, and on-hand ingredients

Output Personalized meal plan + recipe suggestions + organized grocery list

Key engineering decisions

  • Fully serverless — zero infrastructure to manage, scales to zero cost when idle
  • Structured prompt engineering to produce consistent, parseable AI output
  • GitHub Actions pipeline with environment-gated secrets for secure deployments
  • End-to-end product ownership: UX design, AI integration, and deployment

Sports Odds Data Pipeline

I built an end-to-end, serverless AWS pipeline that ingests sportsbook odds, normalizes and validates records, stores both raw + curated datasets, and serves low-latency API responses for a live UI. The site auto-deploys via GitHub Actions to S3/CloudFront, and the data API is backed by API Gateway + Lambda + DynamoDB.

Stack AWS (S3, CloudFront, API Gateway, Lambda, DynamoDB, EventBridge, Glue) · Python · Terraform · GitHub Actions

Pipeline Odds API → EventBridge schedule → Lambda ingest → S3 raw zone → Glue normalize → DynamoDB → API Gateway → live UI

Deploy Git push → GitHub Actions → S3 sync → CloudFront cache invalidation (fully automated)

Key engineering decisions

  • DynamoDB key design (sport_date + game_id) optimized for single-query reads by date and sport
  • Separated raw and curated S3 zones for reprocessability without data loss
  • IAM least-privilege roles scoped per Lambda function — no shared credentials
  • CORS and CloudFront caching tuned to balance freshness with API cost

    Architecture Diagram: High-Level

    Odds API/Feeds
    EventBridge
    schedule trigger
    Lambda
    ingest / validate
    S3 Raw Zone
    CloudFront + S3
    projects.html table
    API Gateway
    /games
    Lambda
    calculate today's games + odds
    DynamoDB
    sport_date + game_id

    Live Demo: Today's Games & Moneyline Odds

    This table is generated dynamically from my API (API Gateway + Lambda) querying DynamoDB for today's slate.

    All times are in your local timezone. If no games appear, try a different sport — data depends on the active season.

    Loading live demo data...

    Last updated: --

    Loading games...