mail

What I've built.

9 projects across data, automation, apps, games and design.

client-workflow-generator cover
Automations

Client Workflow Generator

Setting up a new client meant copying n8n workflows, Google Sheets and registry rows by hand. I built a Next.js portal where one form provisions everything for four workflow types: it copies tokenized n8n master templates through the n8n REST API, creates the client sheet with the Google Sheets and Drive APIs, and records the client in a registry. Nothing goes live until an approver signs off, and the flow is covered by Vitest unit tests and an end-to-end test.

  • Next.js
  • TypeScript
  • n8n
  • Google Sheets API
  • Auth.js
  • Zod
  • Vitest
x-audience-activity-engine cover
Automations

X Audience Activity Engine

The team needed to know whether a client's X followers and LinkedIn-matched prospects were actually active on X. I built templated n8n workflows that scrape followers and recent tweets, count each profile's posts over the last 7 days, and fall back through cheaper lookups for inactive accounts before sending results to Clay. The LinkedIn-matched version uses an n8n Data Table as a queue, processing rows in batches and restarting itself for the next batch.

  • n8n
  • Apify
  • RapidAPI
  • Clay
  • JavaScript
linkedin-hiring-signal-scraper cover
Automations

LinkedIn Hiring Signal Scraper

Outbound teams use hiring activity as a buying signal, but finding it by hand doesn't scale. I built a scheduled n8n workflow that searches LinkedIn authors' posts in chunks, collects unique authors, enriches their profiles in rate-limited batches and pushes the merged records into Clay. It saves the last run time so each run only picks up new posts.

  • n8n
  • Apify
  • Clay
  • JavaScript
icp-content-engagement-engine cover
Automations

ICP Content-Engagement Engine

Clients posting on LinkedIn needed to know which of the people engaging with their content match their ideal customer profile. I built a daily pipeline: per-client n8n workflows collect post likers and commenters, deduplicate them against run history, and hand each new engager to Clay for enrichment and LLM classification. A Google Apps Script layer then rebuilds the report tabs, syncs an all-clients master sheet and serves an internal leaderboard, with error alerts and scheduled jobs chained to stay within execution limits.

  • n8n
  • Clay
  • Google Apps Script
  • Apify
  • Google Sheets
  • JavaScript
script-to-video cover
Automations

Script-to-Video Engine

Making narrated short-form or widescreen videos means juggling scripts, voiceover, background footage and subtitles across separate tools. Building on Faheem Alvi's open-source Reddit Video Engine, I adapted it into a script-first generator with Gemini-assisted scripts, multi-provider TTS, background clips trimmed to the audio length and word-level subtitle overlays, and I wrote its Asset Library UI and backend endpoints. It demonstrates extending an existing full-stack media pipeline across React, FastAPI and FFmpeg.

  • React
  • TypeScript
  • FastAPI
  • FFmpeg
  • MoviePy
  • Gemini
  • Docker
video-cutter cover
Automations

Video Cutter: Bulk Clip Splitter

Cutting a long video into many short clips by hand is tedious. I built a web app that takes an upload, probes its length and uses FFmpeg to split it into fixed-length segments with per-clip adjustments, reporting task progress and returning every clip as a single ZIP. It demonstrates async job handling and FFmpeg automation in a Node/Express + React app.

  • Node.js
  • Express
  • FFmpeg
  • React
  • Vite
  • Docker