The Tools

I found inefficiencies in my own workflow. So I built tools to eliminate them.

HTML Content Extractor

JavaScript · DOM Parsing · Apps Script

Reads live Google Support article HTML via browser inspect. Extracts all structured text and populates a Google Doc automatically, eliminating manual copy-paste entirely from the content update workflow.

Content updates used to begin with a writer opening a live support article, selecting text section by section, and pasting it into a working document, losing structure along the way and introducing copy errors under deadline pressure.

The extractor reads the article's live HTML directly, walks the DOM to preserve heading hierarchy, lists, and links, and writes a clean structured copy into a Google Doc ready for editing. What was a 20-minute error-prone chore per article became a few seconds of automation, and the working copy is now guaranteed to match the live source.

Impact

Manual copy-paste eliminated from content update workflow

Edit Doc Reviewer

Google Apps Script · Docs Add-on · Sidebar UI

A Google Docs sidebar extension that scans documents against editorial style guidelines in real time. Flags violations such as "see", "look", and context-dependent phrases, and suggests alternatives inline. Encodes professional editorial judgment into a tool that scales without the editor.

Editorial review does not scale: one editor's judgment, applied one document at a time. This tool encodes that judgment into a Google Docs sidebar that reviews as you write.

It scans the document against editorial style guidelines in real time, flagging vague directional words, context-dependent phrasing, and style-guide violations, and suggests concrete alternatives inline. The writer sees the correction while the sentence is still warm, which teaches the guideline instead of just enforcing it. The editor's standards are now present in every document, whether the editor is or not.

Impact

Professional editorial judgment scaled without the editor present

Country Selector Content Crawler

Python · Web Crawling · Apps Script

Python script that crawls through country selector articles systematically, extracts structured content from each, and delivers it directly into an edit-ready Google Doc. Eliminated an entire manual content-gathering phase.

Country selector work meant gathering content from hundreds of market-specific article variants before any writing could begin: a full manual phase of opening, reading, and copying, multiplied by every market in scope.

The crawler walks the country selector systematically, requests each market's article, extracts the structured content, and assembles everything into a single edit-ready Google Doc organized by market. The gathering phase disappeared from the schedule entirely, and the coverage is exhaustive by construction: the script cannot skip a market the way a tired human can.

Impact

Full content extraction automated. Zero manual gathering

Culvert

Apps Script · JavaScript · Buganizer API · Google Sheets

Bi-directional sync engine between Google Sheets and Buganizer, deployed across a 25+ member team spanning the US and Manila. Built independently, on the observation that the job needed doing rather than on a ticket asking for it.

Work arrived in Buganizer, allocation lived in Google Sheets, and a person kept them in sync by hand every day. Culvert is a bi-directional sync engine between the two, written in JavaScript and Google Apps Script against the Buganizer API, which removed the transcription step rather than speeding it up.

Impact

2 hours reclaimed daily per writer, across 60+ writers

Case studyCulvert

XML-to-Markdown Migration Pipeline

Git · Markdown · Markdownlint · CSpell · XML

A Docs-as-Code pipeline that moved 150+ legacy XML manuals into Markdown under Git, with automated lint and spell gates that a formatting defect cannot pass.

150+ legacy manuals moved from an XML workflow into Markdown in a Git repository, with Markdownlint and CSpell running as automated gates before merge. Markdownlint and CSpell do not get bored on page 4,000, which is the entire argument for the gate.

Impact

0 formatting defects across 5,000+ pages · 40% faster deployment

Case studyLegacy XML to Markdown migration

These tools came from real problems in my own work.

← Back to Portfolio