← All work

Internal automation · 2023 to 2025

Four hours a day of the CEO's email, turned into a CSV upload.

The same firm's CEO spent about four hours a day preparing outreach emails by hand, copying details into a template one message at a time. I built an internal app that does the repetitive part.

Role
Sole developer, design to maintenance
Engagement
Contract work through WDD4 Services
Status
Ran daily for 2+ years

The problem

Personal outreach mattered to the business, and it was being done by the most expensive person in it, by hand, every day.

What I did

  1. Turned the process into a CSV-driven workflow: upload the recipients, start the campaign, watch it run.
  2. Sent through the CEO's own Microsoft mailbox using Microsoft Graph with delegated sign-in, instead of a bulk email provider, so messages go out from his own mailbox.
  3. Designed it so one failed recipient never stops the rest of the campaign.

What I built

  1. Personalized messages from CSV data, with templates and presets.
  2. Attachments, including Microsoft's upload sessions for large files.
  3. Retry handling for throttling and temporary service or network failures.
  4. Live progress in the browser over WebSockets.
  5. An Excel report at the end of every run with the successful and failed sends.

Where it stands

~4 hof daily manual work removed
~400emails a day, at the pace the business chose
2+ yrsin operation

The app was in use for at least two years and was still running when my engagement with the firm ended in December 2025. A campaign can still take hours to send; the difference is that nobody has to sit through it.

The 400 a day was the business's chosen pace, not a technical limit.

Stack

  • React
  • TypeScript
  • Node.js
  • Express
  • Microsoft Graph
  • MSAL and Entra ID
  • WebSockets
  • Azure Blob Storage
  • Azure Table Storage
  • ExcelJS
  • Vercel
  • AWS EC2
  • GitHub Actions

Tell me what's still being done by hand.

A 30-minute call. No pitch deck. Bring the spreadsheet, and we'll start with why.

Book a call