"Unveiling the Stars" โ NASA Astronauts Hackathon, HiCounselor, 2023
๐งฉ Selected Projects
Architecture-led projects spanning cloud data pipelines, analytics engineering, AI automation, streaming, and data modeling.
๐ง Mindify
AI-powered mental wellness companion โ Backend Developer, Team DataGrains
An empathetic chatbot that takes a user's text or voice input, detects the underlying emotion,
retrieves grounded CBT/psychology insights from a vector database, and uses Gemini 2.0 Flash to
craft a caring, practical response โ complete with coping tips, next steps, and a cited book insight.
End-to-end data engineering project โ Kafka, S3, Snowflake, fully dockerized
A real-time pipeline that scrapes live crypto prices, streams them through a Kafka
producer/consumer pair, cleans and lands them as JSON in an S3 bucket, then auto-ingests
into Snowflake via Snowpipe the moment new files land โ no manual loading step. Every
service (Zookeeper, Kafka broker, producer, consumer) runs as its own Docker container.
End-to-end analytics engineering โ BigQuery star schema, SCD2, LLM commentary
Pulls live coin data from the CoinGecko API into BigQuery, models it into a proper star
schema with a SCD Type 2 table that tracks each coin's market-cap rank history over time,
then feeds a daily summary view into two places at once: an LLM that writes newsletter-style
market commentary, and a Streamlit dashboard that shows both the charts and that commentary
side by side.
PythonCoinGecko APIGoogle BigQuerySQL (window functions)SCD Type 2OpenAI GPT-4o-miniStreamlit + PlotlyLooker Studio
A daily-scheduled Airflow DAG that downloads a public NYC taxi dataset, converts it from CSV
to Parquet for efficient storage and querying, uploads it to Google Cloud Storage, then loads
it straight into BigQuery โ each step a separate, retry-able task chained by dependencies.
Airflow itself (webserver, scheduler, Postgres metadata DB) runs entirely through Docker.
Real-time streaming pipeline with dual query layers
Streams historical stock index data row-by-row through Kafka to simulate a live feed, lands
it as JSON in S3, then makes it queryable two different ways: an AWS Glue crawler builds a
schema catalog so Athena can query S3 directly with no load step, while Snowflake ingests the
same files automatically through Snowpipe for warehouse-side analysis โ comparing a
serverless query path against a managed warehouse path on the same data.
No-code AI automation โ Gemini agent orchestrating 6 Google/web tools
An AI agent built as an n8n workflow: a webhook receives a request, hands it to a Gemini-powered
agent that keeps conversational memory across turns, and the agent decides which of six
connected tool groups to call โ Gmail, web search, Calendar, Docs, Tasks, or Sheets โ before
the result is sent back through the same webhook.
๐ต Nealytics โ Multi-Source Revenue Data Pipeline
Cloud Function orchestrating 4 payment platforms into one warehouse
A Google Cloud Function that pulls revenue data from ThriveCart, Stripe (across multiple
accounts, fetched in parallel), Shopify, and PayPal, and loads it all into BigQuery โ with
incremental loading for ThriveCart (only new rows past the last synced date) and parallel
fetching for Stripe to keep runtime down. Every run posts a pass/fail summary to Slack, so
failures get flagged immediately instead of going unnoticed.
Azure-native CRM data export โ Functions, Logic Apps, Microsoft Graph
A scheduled Azure Logic App triggers five separate Azure Functions, each responsible for a
slice of Insightly CRM data โ quotes, organisations, opportunities, equipment/invoices/users,
tasks, and opportunity stages. Every function pulls its entity via the Insightly API, exports
it to CSV, then authenticates with Microsoft Graph (MSAL client-credentials flow) to upload
the file straight into a shared OneDrive/SharePoint folder โ splitting the work across
functions keeps each run well under Azure's execution time limits.
Google Cloud Function โ self-healing analytics sync with retry logic
A scheduled Cloud Function that pulls the last 10 days of sessions, events, and key events
from a Google Analytics 4 property (by landing page and date), then reconciles it into
BigQuery using a delete-then-append pattern โ deleting the overlapping date range first so
re-runs never create duplicates. Every GA4 call and BigQuery write retries with exponential
backoff, and a Slack alert fires the moment a step exhausts its retries.
Google Cloud Function โ dual-path GSC sync (by query & by page)
A single Cloud Function that runs two independent sync paths against the same Search
Console property: one pulls performance grouped by search query, the other by landing page.
The query-level path uses the same delete-then-append pattern as the GA4 pipeline to stay
idempotent on re-runs; the page-level path currently appends only. Both land in their own
BigQuery table, validated afterwards with clicks/impressions/position roll-up queries.
Google Cloud FunctionsPythonSearch Console APIBigQuerySlack Webhooksfunctions-framework
๐ CallRail โ BigQuery Pipeline
Incremental sync with parallel fetch and ID-level deduplication
Syncs call tracking data from CallRail into BigQuery without ever re-processing what's
already there: it reads the latest timestamp already in BigQuery as a watermark, splits the
gap up to today into monthly chunks, fetches all of them in parallel (7 threads via joblib),
then diffs the fetched IDs against what's already in BigQuery before uploading โ so only
genuinely new calls, users, and form submissions ever get written.
Google Cloud FunctionsPythonCallRail APIBigQueryjoblib (parallel fetch)Pandas
๐ Google Business Profile โ BigQuery Pipeline
Multi-location metrics sync โ daily + monthly, fetched in parallel
Pulls performance metrics for six Google Business Profile store locations at once, running
two sub-pipelines in the same function call: daily metrics for the last 8 days, and monthly
search-keyword data for the last month. Each pipeline fetches all six locations in parallel
(7 workers), then reconciles into BigQuery with the same delete-then-append pattern used
across the other Google-data pipelines, so re-runs stay duplicate-free.
Google Cloud FunctionsPythonGoogle Business Profile APIBigQueryjoblib (parallel fetch)Pandas
Tracks keyword rankings, keyword groups, and competitor positions from Wincher for over a
dozen client sites (Michigan Auto Law, IHOP, Outback, Qdoba, Ferguson Roofing, and more),
each run as its own scheduled Cloud Function built on one shared Wincher client module. Every
run covers a rolling 3-month window split into single-day intervals, fetched in parallel (5
threads) with automatic retry on transient API errors, then truncates and reloads that date
range in BigQuery so the numbers stay accurate as Wincher's own data gets revised.
Google Cloud FunctionsPythonWincher APIBigQueryThreadPoolExecutorSlack Webhooks
๐ฑ Facebook & Instagram Ads Data Pipeline
Meta Marketing API โ BigQuery, multi-endpoint social data sync
Pulls marketing and organic data from Meta's platform through five independent modules โ
Page insights, post performance, ad performance, ad creative details, and Instagram user
insights โ each loading into its own BigQuery table. A same-day-run guard checks whether a
table already has today's data before pulling again, avoiding wasted API calls when the
function gets triggered more than once in a day.
Google Cloud FunctionsPythonMeta Marketing APIInstagram Graph APIBigQuery
Recursive multi-state API scrape โ Google Sheets โ live dashboard
A daily Airflow DAG recurses through every U.S. state to pull consumer financial complaint
data from the CFPB's public API, transforms it, and pushes it into Google Sheets โ which a
Streamlit dashboard then reads directly to give stakeholders a state-by-state, always-current
view of complaint trends without anyone touching a spreadsheet by hand.
Apache AirflowPythonCFPB Public APIGoogle Sheets APIStreamlit
๐ Scraping 1M+ GitHub Repositories on GCP
Large-scale API harvesting with multithreading + EDA
Paginates through GitHub's public repository listing and fetches over a million repos,
enriching each with follower counts, languages, and stargazers through concurrent worker
threads with automatic retry on failed requests. The resulting dataset then feeds an
exploratory analysis notebook that surfaces trends across languages, audiences, and user
attributes โ turning raw API output into a dataset someone can actually draw conclusions from.
โญ Northwind OLTP โ OLAP Star Schema (PySpark SCD2)
Data warehouse modeling + Slowly Changing Dimension implementation
Redesigns the classic Northwind OLTP database into a proper star schema: a fact table
grained at order/order-detail level with foreign keys to denormalized Employee, Customer,
and Product dimensions, plus a Date dimension. MySQL procedures migrate the data from OLTP to
OLAP, and PySpark implements a working Slowly Changing Dimension (Type 2) on the Employee
dimension โ validated against both an insert case and an update case to prove history is
tracked correctly.
PySparkMySQLStar Schema ModelingSCD Type 2SQLAlchemy
๐ข Nested JSON Streaming โ Kafka + PySpark
Exam solution โ structured streaming, schema flattening, data quality rules
Reads nested Titanic-dataset JSON messages off a Dockerized Kafka topic, applies an explicit
schema to work with the nested fields through PySpark's API, then flattens everything to a
single level. From there it drops duplicate rows, enforces that key columns are never null,
removes fields that aren't needed downstream, fixes numeric types, and writes the cleaned
result out as line-delimited JSON.