Inspiration

Agentic Cinema's Parallel track asks for a tool that solves a real bottleneck for "filmmakers, screenwriters, studio crews, or fans." I picked the least obvious of those four: the international marketing and distribution crew inside a studio — the team that has to find local marketing and partnership opportunities in every release market, on a budget, against KPIs that differ by country. Today that's someone manually scanning trends country by country and guessing at relative value. It doesn't scale past a handful of markets, and it's reactive instead of prioritized. That's the gap Marquee fills.

What it does

Given a film's marketing briefing — themes, target audience, target locales, a per-locale KPI, and a budget/effort constraint — Marquee scans each locale with Parallel Search and Extract, grounds every judgment in real extracted page text, and returns a ranked list of four opportunity types: content ideas, partnership opportunities, production/premiere-logistics opportunities, and content-creator collaborations.

Nothing gets labeled a partnership or a creator opportunity on an LLM's say-so — a structural evidence check has to find a real sponsorship CTA, an event date, or a public contact path in the extracted text first. If that evidence isn't there, the candidate stays a plain content idea or gets dropped entirely.

Every opportunity carries a composite score, weighted by the locale's declared KPI:

$$ \text{composite_score} = w_1 \cdot \text{fit} + w_2 \cdot \text{urgency} + w_3 \cdot \text{effort} + w_4 \cdot \text{partnership_bonus} $$

fit and urgency are either computed directly from the extracted text or a bounded Gemini judgment (Low/Medium/High only, never an open numeric guess) — the whole formula, with real numbers plugged in, is visible on screen for every card. Change a locale's KPI and the ranking visibly re-sorts, live, in the browser.

Content-creator candidates additionally get a deterministic reach tier (nano/micro/macro/mega, from a real stated follower count — never guessed) and a Gemini-drafted first-contact outreach message, ready for a human to review and personalize. Parallel Monitor backs a "check for new signals" pass that demonstrates genuine watch-and-alert behavior, not just a re-fetch.

How I built it

Python/FastAPI backend, React/Vite/TypeScript frontend, Gemini via google-genai, Parallel Search/Extract/Monitor via the parallel-web SDK, Firestore for accounts and saved briefs, and Cloud Run + Terraform + GitHub Actions for a free-tier-scoped deploy with real CI/CD.

I followed the build order the scoping doc laid out deliberately: prove the Parallel Search call works end-to-end first, then Extract for grounding, then the deterministic scoring inputs (mention-frequency, the fixed effort-tier lookup) before touching an LLM at all, then the bounded Gemini judgment, then the composite formula, then — before any frontend polish — the evidence-gated partnership classifier, since that was the differentiator most likely to get cut under time pressure if I left it for last. The KPI-reweight interaction and the production-logistics and content-creator opportunity types came after the core pipeline was solid.

Challenges I ran into

Keeping the "no fabricated numbers" rule genuinely enforced was harder than it sounds once there were four opportunity types instead of one — every new field (reach tier, budget-tier penalties, creator evidence) had to go through the same discipline: real arithmetic over real API data, or a small bounded LLM judgment, never an open-ended score.

The evidence gate also means the app sometimes returns nothing — one locale's creator search came back empty two runs in a row because no real contact evidence was found. I decided that's correct behavior, not a bug: showing zero results is more honest than fabricating a plausible-looking one, even though it's a less satisfying demo moment.

Closer to submission, I found two real production bugs during a final testing pass: a stale CI workflow missing an env var the auth feature had introduced, and a registration endpoint that crashed with an unhandled 500 whenever the email provider failed (Resend's sandbox mode only delivers to the account owner's own address). Rather than just patch around the second one, I used it as a signal to cut scope — email verification wasn't part of the judged pipeline at all, so I removed it entirely and replaced it with a plain register-and-log-in flow, which also deleted a whole class of external-dependency risk right before the deadline. I backed that change with a 102-test pytest suite covering the scoring math, the evidence gates, and the full auth flow, so I could make that cut with actual confidence instead of a guess.

Accomplishments that I'm proud of

Both of the scoping doc's stretch goals shipped, not just the required core: the Monitor-based watch-and-alert pass, and the live KPI-reweight interaction. All four opportunity types work end-to-end against real Parallel and Gemini calls, every score is auditable on screen, and the whole thing is live on a public Cloud Run URL with CI/CD and a real test suite behind it.

What I learned

The biggest lesson was that an auditable score is a design constraint, not a UI feature — bolting "show your work" onto scores after the fact doesn't work, it has to shape how you compute every field from the start, which is why the deterministic-first, LLM-bounded-second build order mattered more than I expected going in. The second was trusting an empty result: it's tempting to make a demo always show something, but the evidence gate returning zero creator matches for a locale was more convincing proof the system wasn't fabricating data than any single good result would have been. And cutting email verification this close to the deadline taught me that a feature's development cost isn't the number that matters late in a project — its ongoing failure surface is, and a 102-test suite is what let me make that cut with confidence instead of a guess.

What's next for Marquee

Real ad-spend/ROI backtesting against actual campaign performance data once it's available; scheduled/continuous Monitor-based alerting in production beyond the on-demand check; and expanding creator-platform coverage and reach-tier accuracy as more locale-specific platforms are added.

Built With

Share this project:

Updates