Inspiration
Mobile ad teams spend a lot of time and budget answering one deceptively simple question: which creative should we run? In a real campaign, the answer usually comes after an A/B test has already spent money, burned impressions, and exposed users to weak variants who experience fatigue from the ads they see.
We built Purple Pages (based off of Yellow Pages - Paginas Amarillas) because we wanted to make creative testing feel faster, more explainable, and more collaborative. Instead of asking one model for one opinion, we imagined a room full of AI reviewers: performance analysts, creative directors, risk reviewers, localization experts, and simulated user personas. Each “personality” looks at an ad from a different angle, then the system combines their feedback into a ranked recommendation.
Our goal was to help teams enter an A/B test with better hypotheses, better creative edits, and fewer obvious mistakes.
What it does
Purple Pages is an AI creative intelligence dashboard for mobile ads.
Users can create or open a campaign, attach multiple ad creatives, and run an AI personality swarm across 2–6 variants. The app then produces a ranked recommendation, agent-by-agent feedback, predicted user behavior, fatigue risk, and a practical A/B test plan.
Purple Pages supports two analysis modes:
- Dataset mode, where agents use historical creative metadata, benchmark metrics, similar ads, and campaign context.
- Image-only mode, where agents judge only the uploaded creative image and the campaign brief.
The system evaluates each creative across signals like visual hierarchy, CTA clarity, trust, attention, conversion intent, creative fatigue, and likely user response. It also converts simulated persona behavior into projected actions, so a marketer can think in terms of expected skips, clicks, conversions, and exits instead of just abstract scores.
At the product level, Purple Pages includes:
- A polished campaign dashboard.
- Campaign detail and comparison pages.
- Instant campaign creation.
- Drag-and-drop creative upload.
- Dataset-backed creative cards.
- AI personality comments.
- Swarm ranking.
- Fatigue forecasting.
- Recommended next actions such as scale, test, edit, pivot, or pause.
How we built it
We built Purple Pages as a TypeScript monorepo with a Next.js App Router web app and a small optional FastAPI computer-vision helper.
The frontend is built with React, Next.js, Tailwind-style utility classes, Framer Motion, lucide-react icons, MongoDB database and Recharts. The main Purple Pages UI includes a splash page, dashboard, campaign detail pages, campaign comparison screens, local campaign creation, creative cards, charts, status pills, and agent feedback panels.
The data layer starts from the bundled Smadex creative intelligence dataset. We parse CSV files for campaigns, creative metadata, daily performance stats, and summary metrics. From that, we build creative documents containing:
- Campaign and advertiser context.
- Asset URLs.
- Format, language, OS, and region.
- CTA and headline text.
- Visual features such as clutter, novelty, readability, brand visibility, motion, rewards, gameplay, and text density.
- Performance metrics such as impressions, clicks, conversions, CTR, CVR, ROAS proxy, performance score, creative status, and fatigue signals.
For retrieval, we generate lightweight creative embeddings from metadata and visual features. If MongoDB Atlas is configured, the app can use vector search. If not, it falls back to local CSV data and cosine similarity, which made the project demo-friendly without requiring cloud infrastructure.
The AI layer uses Gemini through @google/genai. We defined strict Zod schemas for every major object: campaign briefs, creative docs, evidence packs, agent reviews, behavior simulations, variant rankings, fatigue profiles, persona forecasts, and final reports. Gemini is prompted to return JSON, and the app validates the response against the schema. If the JSON fails validation, the app asks Gemini to repair it before accepting the result.
The swarm pipeline works like this:
- The user selects or uploads 2–6 creatives.
- The app creates an experiment.
- For each creative, Purple Pages builds an evidence pack using historical metrics, benchmark data, similar creatives, and visual features.
- Multiple AI agents review each variant from different perspectives.
- The system streams status updates, evidence packs, and agent reviews back to the UI as newline-delimited JSON.
- A final aggregator ranks the variants and writes an A/B test recommendation.
- Deterministic post-processing adds calibrated behavior probabilities, persona action forecasts, and creative fatigue profiles.
We also built an uploaded-image pipeline. The app can accept image uploads, extract metadata with Sharp, ask Gemini Vision to identify visible creative features, and generate embeddings for uploaded creatives so they can be compared against historical dataset examples.
Challenges we ran into
One of the hardest challenges was keeping the AI output grounded. It is easy for an LLM to sound confident while inventing KPI values or overestimating click rates. To avoid that, we built evidence packs and made the prompts explicitly tell agents to use only the provided facts. We also constrained behavior probabilities so simulated clicks and conversions stayed near realistic impression-level rates.
Another challenge was coordinating many AI calls. A single analysis can involve several creatives multiplied by many agents, followed by a final aggregator call. We added request scheduling, streamed progress updates, and an event-based UI so the user can watch the swarm work instead of waiting on a blank loading state.
We also had to balance two modes of analysis. Dataset mode is richer and more grounded, but image-only mode is useful when a user only has screenshots or early mockups. Designing both modes forced us to separate what comes from historical evidence from what comes from visual interpretation.
A final challenge was making the demo robust. We wanted the app to work even without MongoDB Atlas or a production database. That meant building local CSV parsing, in-memory experiment storage, local cosine retrieval, and localStorage-based campaign workflows while still leaving a path toward a real backend.
Accomplishments that we're proud of
We are proud that Purple Pages feels like a real creative intelligence product rather than just a model demo. It has a dashboard, campaign pages, upload flows, comparison screens, charts, agent comments, rankings, and actionable recommendations.
We are also proud of the swarm architecture. Instead of returning a single generic answer, Purple Pages breaks creative analysis into multiple perspectives: performance, design, fatigue, localization, risk, low-attention users, skeptical users, reward seekers, practical converters, trend-sensitive users, and category-matched users.
Another accomplishment was making the AI system more trustworthy. The app uses structured schemas, validation, JSON repair, dataset-grounded prompts, benchmark retrieval, behavior calibration, and deterministic fatigue scoring. That made the output feel more like a decision-support system and less like a black box.
We are especially proud of the fatigue forecasting. Creative fatigue is a real problem in mobile advertising, and our system looks at historical decay, creative status, novelty, motion, clutter, reward framing, and similar creatives to recommend whether a variant should be watched, refreshed, paused, or scaled.
What we learned
We learned that creative evaluation is not just about asking “is this ad good?” A useful answer needs to combine visual quality, historical evidence, audience context, risk, localization, fatigue, and business objectives.
We also learned that LLMs become much more useful when they are surrounded by structure. Prompting helped, but schemas, validation, retrieval, calibration, and deterministic post-processing were what made the system reliable enough for a dashboard.
Another big lesson was that simulated personas need realistic constraints. A persona might “like” an ad, but that does not mean 10% of impressions should become clicks. We had to treat clicks and conversions as rare impression-level events and anchor them to dataset-scale behavior.
Finally, we learned that product polish matters in a hackathon. Streaming agent updates, showing evidence, ranking variants visually, and giving concrete next steps made the project easier to understand and demo.
What's next for Purple Pages
Next, we want to connect Purple Pages to real ad platforms so teams can import live campaigns, creatives, and performance data automatically. We also want to close the loop after real A/B tests, using actual outcomes to improve future recommendations.
We would like to expand the persona system with richer audience segmentation by region, language, age group, device, category, and user intent. We also want deeper localization checks so the same creative can be evaluated differently for Spain, LATAM, the US, Japan, or other markets.
On the technical side, we want to make MongoDB Atlas Vector Search the default retrieval layer, add persistent user accounts, store experiment history, and support team collaboration. We also want to add creative generation and editing suggestions, so Purple Pages can not only say which ad is strongest, but also generate the next variant to test.
Long term, Purple Pages could become a creative pre-testing workspace where growth teams can upload ideas, simulate audience response, forecast fatigue, generate improvements, and launch better A/B tests with more confidence.
Log in or sign up for Devpost to join the conversation.