Skip to content

01Platform engineering

Overhauling a platform clients would not use

I took responsibility for a messaging product whose broadcasts failed outright and whose Meta quality ratings were being declined across portfolios, and rebuilt it into a compliant system enterprise clients work in daily.

Role
Sole developer
Period
2026 — present
contacts per broadcast, reliably
20k
contacts per import operation
100k

What it looked like

The platform did not work. Broadcasts failed outright. Templates fired concurrently with no rate limiting, producing mass delivery failures. Meta was declining quality ratings across the business accounts, and messages were being reported as spam — the two outcomes that end a WhatsApp deployment.

Underneath that: no retry logic, no scheduling, no concurrency handling, no failover. Contact import accepted no spreadsheets and assumed fixed column names. Campaigns reported no delivery, read or failure figures at all. Errors surfaced no message. Meta webhook payloads were discarded rather than stored. There was no backup or rollback path on the server.

Clients did not want to work in it.

Broadcasts failed outright, and Meta was declining quality ratings across the business accounts.

Making the send path compliant

Meta enforces per-second rate limits, daily conversation caps, opt-in rules and a quality rating that degrades a number until it is throttled or blocked. The send path had to respect all of it, not approximate it.

I rebuilt the broadcast engine around those constraints: rate limiting matched to Meta’s published limits, batching, scheduled sends, and retry logic tuned against real failures rather than assumed ones. It now runs 20,000-contact broadcasts at maximum sustainable delivery, and the campaign dashboard reports sent, delivered, read and failed per message.

The rest of the product

Contact import was rewritten to take real spreadsheets with arbitrary columns and custom fields, with retry and scheduling behind it, handling 100,000 contacts per operation.

Meta payloads are now captured in full and reconciled against each portfolio’s ad campaigns, which is what makes Click-to-WhatsApp attribution possible. Conversation labels sync additively instead of overwriting each other. Agents filter by campaign, template, agent and label. Templates are created and previewed in the platform, with dynamic variables resolved per client.

I also fixed the deployment itself — environment separation, Docker images and volumes — and I present the platform to clients directly.

Built with

  • Ruby on Rails
  • Java 21
  • Spring Boot
  • Meta WhatsApp Cloud API
  • PostgreSQL
  • Redis
  • Docker