Projects
Things I built to take the busywork out of data.
Automation tools and dashboards I designed and built. Most started as one tedious task and grew into something used every day, and two are open source and still in progress. The CRM tools go by generic names, and the dashboards show sample data with sample names. Side projects made for fun are at the bottom.
-
From a VBA Workbook to a Python Tool Suite
Eight Tools and One Launcher, Built One Bottleneck at a Time
- status shipped
- version v21
- built Sep 2026
- suite 8 tools
- 8 purpose-built tools in one launcher
- 300K+ CRM records processed by the pipelines
How a handful of small automations grew, one bottleneck at a time, into a desktop suite of eight tools that search, convert, reconcile, and report on CRM data.
Built with Python·pandas·PySide6·RapidFuzz·openpyxl·PyInstaller
-
PowerFill
Scan a Form Once, Fill It in One Click
- status ongoing
- version v1.2.0
- built Oct 2026
- Chrome Manifest V3
- dependencies none
- license MIT
- 1 click to fill a form after scanning it once
- 140+ checks in an end-to-end test suite run in headless Chrome
A Chrome extension that reads the fields on any web form, saves the values you set as a profile, and fills the form again in one click, or row by row from a spreadsheet.
Built with JavaScript·Chrome Extensions API·Manifest V3·Puppeteer
-
VoIP Call Tracking Dashboard
Two Phone Systems, One Hourly Feed
- status shipped
- refresh hourly
- platform Google Sheets
- data sample
- 2 VoIP providers merged into one 19-column schema
- Hourly automatic refresh through the providers' APIs
Calls lived in two VoIP systems with two report formats. I connected both to one Google Sheets workbook through their APIs, so call activity sits in one place and refreshes itself every hour.
Data flow VoIP provider APIs→Google Apps Script→Google Sheets
-
Search & Filter Engine
From Hours of Excel Filtering to Seconds
- status shipped
- version v14
- built Sep 2026
- demo runs in the browser
- <10 s per search, down from 1–3 hours by hand
- 100K+ rows searched without lag
- 90–95% match accuracy, up from about 70%
A desktop search engine for 100K+ row lead exports that understands company names and job titles, so filtering a 200-company target list takes seconds instead of hours.
Built with Python·pandas·PySide6·Regex
-
Database Management Dashboard
A Weekly Health Check for the CRM
- status shipped
- refresh weekly
- platform Zoho Analytics
- data sample
- Weekly refresh, read at a monthly level
- 6 data-gap counters, from missing email to unreachable contacts
A Zoho Analytics dashboard that shows on one screen how complete and how usable a contact database is: what's missing, who can't be reached, and where the records came from.
Data flow Zoho CRM→Zoho Analytics
-
CRM Conversion Engine
Turning Any Lead File Into a Clean Import
- status shipped
- version v27
- built Sep 2026
- ~18 s to convert 40K+ records, down from 4–8 hours
- 80–90% fewer import errors
- <1 min to set up a new file, down from about 10
A Python ETL tool that converts exports from CRMs and lead-data providers into each system's import format, with identity matching built in, so a clean import file takes seconds instead of 4 to 8 hours.
Built with Python·pandas·RapidFuzz·PySide6·openpyxl
-
TI Champions Bot
Fixing Dota 2 Bots One Match Log at a Time
- status ongoing
- version v0.7.9
- built Oct 2026
- language Lua
- base Open Hyper AI
- 16 versions logged in the changelog, 0.6.4 to 0.7.9
- 127 heroes scored for each of the five positions in the draft
A customized Dota 2 bot script in Lua, built on the open-source Open Hyper AI. I play a local match against the bots, read the console log, find the root cause of what went wrong, and ship the fix as the next version.
Built with Lua·Dota 2 bot scripting API·Git
-
Website Analytics Dashboards
One Template, Three Sites
- status shipped
- source Google Analytics 4
- platform Zoho Analytics
- data sample
- 3 websites on one report template
- 1 Google Analytics 4 property behind each site
One report layout applied to three websites, each fed by its own Google Analytics 4 property, so traffic, search, and content numbers read the same way for every site.
Data flow Website→Google Analytics 4→Zoho Analytics
-
CRM Reconciliation Tool
Syncing Updates Back Without Breaking the Master Data
- status shipped
- version v11
- built Sep 2026
- 1 run builds the whole import package
- 0 existing values erased by blank fields
- Ordered import files, one category at a time
A tool that compares records updated during calling against the full master database and turns them into separate, ordered import files, so only safe, intended changes reach the main CRM.
Built with Python·pandas·PySide6·openpyxl
-
Email Marketing Dashboards
Campaigns and Mailing Lists at a Glance
- status shipped
- source Zoho Marketing Automation
- platform Zoho Analytics
- data sample
- 2 dashboards on one marketing data source
- Funnel from emails sent down to clicks
Two Zoho Analytics dashboards built on Zoho Marketing Automation data: one follows email campaigns from sends to clicks, the other shows which mailing lists produce leads.
Data flow Zoho Marketing Automation→Zoho Analytics
-
Call Analytics Tool
Matching Call Logs to CRM Records in Seconds
- status shipped
- version v9
- built Sep 2026
- <15 s per dataset, down from about 60 minutes
- 98% less time spent per run
- 3-layer phone matching: full number, last 8, last 7 digits
A desktop tool that cleans raw call logs and CRM exports, matches calls to contacts, and produces conversion metrics, monthly call imports, and a weekly operations report, in seconds instead of an hour.
Built with Python·pandas·PySide6·openpyxl
-
Monthly CRM and Calls Report
Activity and Outcomes, Month Over Month
- status shipped
- refresh monthly
- platform Zoho Analytics
- data sample
- 2 parts on one page: CRM activity and call performance
- 12 months of history in each trend chart
A monthly report that puts CRM activity and call performance from two VoIP systems on one page, with every headline number shown against the month before.
Data flow CRM and VoIP call logs→Zoho Analytics
-
Pivot Report Tool
From Repetitive Pivot Work to One-Click Reports
- status shipped
- type desktop app
- stack Python + pandas
- <20 s per report, down from 20–30 minutes
- 95% less time on recurring reports
- Saved sessions rerun a full setup in one click
A lightweight desktop tool that turns a CSV export into a filtered, pivot-style report in one pass, with saved sessions for recurring reports.
Built with Python·pandas
-
Turning Excel Into a CRM
Six Sources, One Workbook, and Formulas Doing the Cleanup
- status superseded
- stack Excel formulas
- figures illustrative
- download sample workbook
- 30,000+ lead records in one workbook
- 160+ fields tracked per record
- 6 sources merged into one structure
Before any of the Python tools existed, the lead database lived in one Excel workbook: six sources, 160+ fields, formula-driven cleanup, and a live dashboard. This is that system.
Built with Excel·Array formulas·SUMIFS
Small automations
Smaller tools in the Python suite. Each one removes a single repetitive step, which adds up across a week.
-
Email Validation Importer
Turns email validation results into one CRM update file. When an address appears twice, the most severe status wins.
-
Campaign Report Formatter
Turns a raw CRM export into each campaign's report table. Formats are saved and edited in the tool, not in code.
-
Contact Request Builder
Takes a free-text request, pulls out the email addresses, and builds one clean import, flagging contacts with risky history.
-
Email Campaign Consolidator
Combines email campaign reports into CRM-ready imports and a password-protected summary workbook.
Just for fun
Side projects I make to play with data and learn. I plan them and write the prompts, and AI writes the code, so they show ideas and data work, not my programming.
-
Side project · AI-built
Globe Trivia
Spin the Planet, Click a Country, Get Its Tech Facts
- status shipped
- built Oct 2026
- code written by AI
- facts 853 sourced
- stack HTML · CSS · JS
A cartoon 3D globe with 853 sourced tech and data facts for 245 countries and territories. I planned it and wrote the prompts: Claude's deep research found and sourced the facts, and Claude Code wrote all of the code. A fun side project to see how far prompting can go, not a showcase of my coding.
Want the details behind any of these? Get in touch