Projects

End-to-end builds — the problem, what I built and how it works

Deployed · GCP Cloud RunVoice AILLM

BrewHub — AI Voice Receptionist

Problem: Small businesses miss bookings when nobody can answer the phone, and taking reservations by hand is slow and error-prone.

What I built: A voice-first receptionist for a café. Customers just talk, and the assistant understands what they want, remembers context across turns, checks availability, confirms the booking out loud and emails a confirmation.

  • Reliable dialogue: GPT-4o-mini handles language and a custom finite-state machine handles slot filling, so the LLM can't skip a required booking detail or confirm something invalid.
  • Full voice loop: in-browser recording → Whisper speech-to-text → LLM → ElevenLabs text-to-speech (gTTS fallback).
  • Business logic: booking validation, availability checks, per-session memory and branded HTML confirmation emails over SMTP.
  • Shipped: FastAPI backend on Google Cloud Run, React + Vite + Tailwind frontend.

Mic → Whisper STT → GPT-4o-mini + FSM memory → TTS → Booking validation → HTML email

Python · FastAPI · OpenAI (Whisper, GPT-4o-mini) · ElevenLabs · React · Vite · GCP Cloud Run · SMTP

Data EngineeringAPIs

Compliant Contact-Data Pipeline (Apollo.io)

Problem: Sales teams need enriched contact data at scale, but scraping breaks platform terms and privacy rules (GDPR/CCPA), and API access differs from plan to plan.

What I built: A Python pipeline that uses only official Apollo.io APIs. It starts from LinkedIn-based targets and puts mobile numbers first.

  • Graceful degradation: tries paid person enrichment first and automatically falls back to search-based discovery on free or trial plans. The same code runs unchanged with full API access.
  • Cost awareness: tracks and optimises mobile-credit usage.
  • Compliant by design: read-only, with no scraping, browser automation or reverse engineering.
  • Clean output: structured, de-duplicated CSV ready for a CRM.

Targets → Enrichment API → (fallback) Search API → Credit tracking → Normalise → CSV

Python · REST APIs · requests · pandas · Data validation

Machine LearningNLP

Skill-Fit Job & Project Recommender

Problem: Job seekers struggle to see which roles fit their current skills, and which skills or projects would open up better ones.

What I built: A recommender that parses a resume, matches it against real job postings and returns best-fit roles, missing skills and project ideas to close the gap.

  • Data engineering: merged three job datasets (Dice.com US, Sri Lanka IT, Morocco) into one schema, with de-duplication and audit files.
  • Skill extraction: an extensible skills taxonomy with aliases maps messy wording (e.g. "sklearn" → scikit-learn) to canonical skills.
  • Matching: TF-IDF vectors and cosine similarity rank roles. Gap analysis then suggests projects when a resume lacks key skills.
  • Usable: interactive Streamlit app.

Resume → Parsing & skill extraction → TF-IDF vectors → Cosine similarity → Roles + skill gaps + project ideas

Python · pandas · NumPy · SciPy · scikit-learn · Streamlit

Earlier Work

House Price Predictor

Regression pipeline (Ridge/Lasso) with feature engineering, model comparison and a Streamlit front end.

Code