Inspiration

Over 20 years ago, I made a mildly successful indie movie. It got some genuine popularity in a very niche Italian subculture, and I joined a few indie film festivals. That gave me firsthand exposure to just how extractive some of these festivals can be.

Fast-forward to this hackathon: I started testing the Parallel SDK and was honestly blown away by how good it is at factual verification and extracting verbatim evidence. That sparked the idea. I decided to build Screened as an agent mostly because I imagine it can load multiple tools in future, and solve other headaches filmmakers have to deal with all in the same interface. I have also built MCP for it so you can control it from your usual Gemini or Antigravity chat.


What It Does

  • Conversational Research Desk: You give it a festival name, a link, or upload an invitation email. It extracts the claims and investigates them in seconds.
  • Fact-Checking Against Real Data: Dispatches agents to check official company registers (like UK Companies House), physical cinema leases, and community feedback. I use parallel search, task and extraction to get loads of data that is tamper-proof and always trackable to a source.
  • Spotting Contradictions: Catches discrepancies side-by-side, like an event promising "screenings in iconic venues" when official filings show an unlisted mailbox. Also launch more advanced audits.
  • 4 Simple Views: Toggle between a 10-second verdict, a visual D2 graph of connections between companies, key people and Jury, full evidence with exact quotes, or raw data for your agent.
  • Model Context Protocol (MCP) & WebMCP: In addition to the built-in Agent tab (and experimental in-browser WebMCP support), Screened exposes an official MCP server. Power users and external agents (Gemini, Antigravity) can connect directly to bypass pre-interpreted dossiers and run custom audit logic against the raw, verbatim data extracted by the Parallel SDK. (Type /mcp in the Screened chat for connection details).

How I Built It

  • Google Agent Development Kit (ADK): Used ADK's LlmAgent, SequentialAgent, and ParallelAgent to run research tasks in a reliable, predictable order.
  • Gemini 2.5 (Vertex AI): Gemini 2.5 Pro handles conversational tool calling and contradiction checks; Gemini 2.5 Flash handles fast entity lookups.
  • Parallel Search API: The factual backbone. Gemini is strictly prohibited from guessing facts—it only reasons over what Parallel finds and quotes verbatim.
  • Backend & Cloud: FastAPI with Server-Sent Events (SSE) hosted on Google Cloud Run, backed by Cloud Firestore for logs and Cloud Tasks for queueing.
  • Frontend: React 19, TypeScript, Tailwind CSS, and @xyflow/react for the interactive entity graph.

Challenges & What I Learned

  • Zero Tolerance for Hallucinations: In due diligence, a made-up claim could unfairly hurt an honest festival or let a scam pass through. I separated reasoning from evidence: every claim must have a verbatim quote extracted by the Parallel API, or it gets thrown out.
  • Keeping Multi-Agent Systems in Line: Google ADK made state management and agent handoffs much more predictable than stitching together loose LLM prompt chains.

What's Next

My goal is to turn Screened into a more complete product. Next up:

  • Tri-Agent Consensus Architecture: Dispatch three independent agents in parallel to cross-verify findings, requiring a 2-of-3 majority consensus before any venue or fee contradiction is formally flagged as a risk.
  • Better connecting Parallel’s Monitor API so filmmakers can set alerts for when festivals change their fees, venues, or terms.
  • Turning the Opportunity Scout for real customers from a chat-based fake door test into a full grant and festival deadline tracker.
  • Find a way to pay for the servers so they keep running while I polish the product.

Built With

  • fastapi
  • gemini-2.5-flash
  • gemini-2.5-pro
  • google-adk
  • google-cloud-firestore
  • google-cloud-run
  • google-cloud-secret-manager
  • google-cloud-tasks
  • lucide-react
  • opentelemetry
  • parallel-search-api
  • pydantic
  • pytest
  • python
  • react-19
  • server-sent-events
  • sha-256
  • tailwind-css
  • typescript
  • vertex-ai
  • vite
  • vitest
  • web-audio-api
  • xyflow-react
Share this project:

Updates

Submission history