All case studies
Sport · Fan engagement

Memórias do Jamor

An AI-moderated fan memory wall for a football club.

How we built Memórias do Jamor for Sport Clube União Torreense: a permanent, public wall where fans submit and browse photos, videos, and written memories of the club’s 2025/26 Taça de Portugal win, with every submission machine-triaged in seconds and no account required.

IndustrySport · Fan engagement
Timeline~2 weeks to production
TypeReal-time UGC platform
RegionPortugal · EU residency
~3sAI moderation per image
3Content types: photo · video · text
100%EU data residency

A club, a cup win, and a moment worth keeping.

Sport Clube União Torreense is a Portuguese football club. In the 2025/26 season the club won the Taça de Portugal. The win produced a lot of fan-made media: photos from the stands, videos of the celebration, written notes, all of it sitting wherever fans happened to post it.

Memórias do Jamor (“Memories of Jamor”) is the club-owned answer to that scattering: a permanent, public wall, live at jamor.torreense.com, where anyone can add a memory and everyone can browse the archive. The brief was a durable record the club owns, not a launch-week microsite. It had to stay safe and online, and cheap to run, long after the celebration.

A public wall has to be open, safe, always-on, and GDPR-clean at once.

Displaying photos is the easy part. The hard part is that four requirements pull against each other: the wall has to be open enough that a non-technical fan can post in seconds, safe enough to survive open public uploads, resilient enough to stay up through a one-day traffic spike without runaway cost, and compliant enough to collect images of people under GDPR. Optimise any one of those naively and you break another.

Memories scattered, not owned

Fans' photos and videos of the win lived on personal Instagram and TikTok feeds. There was no single, club-owned place to gather them, so the moment stayed fragmented across private accounts, and faded as feeds moved on.

Open uploads are a moderation liability

A public wall of open fan uploads invites offensive content, rival-club abuse, and other people's personal data. Hand-moderating that, especially during a one-day surge, isn't realistic for a club's small team.

A spike day threatens cost and uptime

A single celebration drives a sharp burst of traffic and large video uploads. Left uncontrolled, transcoding and AI usage can run costs up fast, and an under-provisioned host can take the wall down at exactly the wrong moment.

GDPR vs. an effortless experience

Collecting photos of people and contributor details under GDPR, while keeping participation effortless for a less tech-savvy audience (no app, no account, no friction), pull in opposite directions.

Survive the spike safely first, bring the cost down second.

The platform is fully stateless (all state lives in managed Postgres, object storage, and a dedicated video service) and runs on a runtime that scales in isolation, so it absorbs the launch surge without endangering other workloads. Because nothing is held on the box, the same system can later move to cheaper self-hosting with no downtime. The order of priorities was deliberate: survive the big day first, bring the running cost down second.

Every submission is machine-triaged before anything goes public. Only content the model is highly confident is safe auto-publishes; everything else routes to a human queue. The cost failsafe is the part most teams get backwards: as usage climbs through 70%, 90%, and 100% of the ceiling, the system degrades the automation, handing more to human review, rather than degrading the service. The wall is never taken offline and uploads are never blocked, even at the cap. A public wall has to be safe and online at the same time.

Submission is the lowest-friction the security model allows: a bot challenge plus explicit consent (a name and email, no account and no email round-trip), chosen for an older audience, with verified-email sign-in fully built but disabled behind a flag in case abuse appears. Privacy sits in the data model: the public only ever reads through a PII-safe projection that hides the author when anonymous and never exposes contact details, photos are EXIF-stripped on the server, and all data sits in EU regions behind an explicit consent gate. The product splits into four surfaces that mirror how a memory travels from a fan’s phone to the big screen: the public wall, the submission flow, a fullscreen “museum” kiosk for in-venue screens, and a moderation backoffice.

A real-time wall, a queued multimodal moderation pipeline, and a failsafe that protects availability.

Memórias do Jamor runs as a stateless full-stack application backed by managed services. New, approved memories appear on the wall in real time; submissions flow through an asynchronous moderation pipeline that judges image and caption together; and a near-real-time cost failsafe keeps the wall available no matter the load.

  • A permanent, real-time public wall that pushes newly-approved memories live without a refresh, and muted-autoplays only the videos currently on screen, so it stays light even as the archive grows.
  • A low-friction submission flow for up to ten photos, videos, or texts per session, gated by a bot challenge and explicit GDPR consent, with no account and no app.
  • An asynchronous, queued, multimodal AI moderation pipeline that judges image and caption together, auto-approving only high-confidence-safe content and routing everything else to a human review queue.
  • A server-side media pipeline: large videos upload directly to a streaming service, transcode, and keep only the compressed renditions (originals discarded); photos land in object storage with server-side EXIF stripping.
  • A protected backoffice for approve, disable (with a 30-day scheduled purge), and delete, plus accent-insensitive Portuguese full-text search, the moderation queue, and the cost failsafe that keeps the wall always available.

Around that core sits a fullscreen “museum” kiosk, an infinite brick-grid of the whole archive for in-venue screens, plus structured data and a sitemap for search visibility, hardened security headers with login rate-limiting, daily backups, and a documented operations runbook.

The Memórias do Jamor landing screen, with options to share a memory, browse the wall, or open Modo Museu.
The public entry: fans choose to share a memory, browse the wall, or open the fullscreen “Modo Museu”. Live at jamor.torreense.com.
Next.jsTypeScriptTailwind CSSSupabasePostgres + RLSGoogle Gemini 2.5Bunny StreamCloudflare R2Cloudflare TurnstileVercelSentryBetter Stacksharp · ffmpeg

From scattered feeds to a permanent, club-owned archive.

Shipped for the moment that mattered

The platform went live for the club's celebration window in June 2026 and is in active use by fans, built and in production in about two weeks.

From scattered to a permanent archive

Fan photos, videos, and written testimonials are now gathered into one club-owned, permanent, searchable wall, instead of fragmented across private social feeds.

A safe public wall at spike scale

Every submission is machine-triaged in seconds; only high-confidence-safe content auto-publishes and the rest hits a human queue, so moderation holds up on a surge day without a manual bottleneck.

Availability protected by design

The cost failsafe degrades the automation, never the service. The wall stays visible and uploads stay open even at the cost ceiling; the worst case is more human review, not an outage.

Privacy-by-design, GDPR throughout

The public surface exposes zero personal data, anonymity is honoured end-to-end, photos are EXIF-stripped server-side, and all data stays in EU regions behind an explicit consent gate.

Zero-downtime operations on a live product

A stateless architecture and atomic deploys let changes ship to an in-use platform with no pause; content was edited live while submissions were actively arriving.