AI Ads Platform
Self-serve Meta ads generation, optimisation and lead follow-up for martial-arts schools. The platform makes the ad creative from the school's own photos, publishes the campaign to Meta, pulls in every lead, and starts an AI conversation with them before they go cold.
The problem
Most schools either pay an agency to run their Facebook ads or don't run them at all. And even when the ads work, leads land in a form inbox and wait hours for a callback — by which point they've booked somewhere else. The creative, the campaign and the follow-up are three separate jobs, usually done by three different people.
What I built
One platform that covers the whole loop, from the image in the ad to the first conversation with the lead.
- AI ad creatives — schools upload references — logo, school photo, uniform, instructor — select up to eight, write a brief, and a worker generates the ad image.
- Publish to Meta — campaign drafts attach a generated image, budget, copy, call to action and targeting, then publish straight to the connected ad account and Facebook Page over OAuth.
- Lead import — Facebook lead-form submissions are pulled in automatically, with conversions shared back to Meta.
- AI lead conversations — every new lead gets an AI welcome and follow-up grounded in the school's business facts; contact details are stored for the school but never sent to the model.
- SMS & staff alerts — Twilio SMS with delivery checks and opt-out handling, plus email and Slack alerts so staff know when to step in.
- Built-in test flows — lead-flow and conversation previews let a school try the AI end to end without sending a single SMS.
Under the hood
A single background worker runs seven independent queues — creative generation, lead import, conversion sharing, automatic intake, staff alerts, SMS sending and delivery checks — so a slow provider call never blocks the others. Meta tokens are encrypted at rest and shared between the API and the worker.
Conversations are protected against double-sends: a database revision check, a 90-second generation lease, and request IDs mean a dropped response or a retry can't duplicate a turn. Layered Express API, Supabase with private storage buckets, React 18 front end, all deployed on Render from one blueprint.
Outcome
The full loop works end to end — creative, campaign, lead, conversation — and is being hardened for rollout to schools. The aim is simple: a school owner launches an ad in minutes and never lets a lead sit unanswered again.