
Bupa wanted to run a global competition around the Paralympics: ask people everywhere to upload a photo of what health means to them. Lovely idea. Terrifying brief.
Because here's the thing about letting the public upload images next to a healthcare brand's logo: most of what arrives is heartfelt and brilliant, and a small percentage absolutely is not. One inappropriate image on a Bupa campaign page is a headline. So the real job wasn't the gallery — it was making sure nothing harmful ever got published, at global scale, around the clock, without a human moderator awake in every timezone.
We built the platform with Next.js on the front and Laravel behind it. The interesting bit was the moderation pipeline: every uploaded image went through AI analysis that assessed both content and sentiment against Bupa's reputational criteria before it could appear anywhere. Not a profanity filter bolted on at the end — it was the heart of the build, designed in from the first wireframe alongside Bupa's own security team.
The campaign was global, so captions were automatically translated into six languages. We prototyped the upload flow until it was simple enough that someone's gran could enter from her phone, because that was rather the point of the campaign.
Then we tested it by trying to break it. Uploading the wrong things, the weird things, the edge cases. AI moderation is probabilistic, so we tuned thresholds conservatively — we'd rather wrongly hold back a borderline image for review than wrongly publish one.
The campaign launched in June 2024 and was picked up by every major UK broadcaster and newspaper. Thousands of images from around the world, and the moderation pipeline did its job: nothing harmful made it through. Nobody noticed the infrastructure working properly — which, for this kind of project, is exactly the result you want.