-
-
"Coverage report: real recommendation ('Pass'), synopsis, strengths, pressure points, and comparable titles — generated by Gemini."
-
"Agent Trace: every analysis step shown live, including key art — all six complete, nothing hidden."
-
"Key art rendered algorithmically from genre and tone — no AI image call, no quota dependency, works every time."
-
"The full pipeline: upload → analysis → coverage ready → human approves or rejects. Nothing ships automatically."
Inspiration
Every studio and indie production company drowns in script submissions, and a human producer has to read each one before anything gets greenlit. We wanted to see if an agent could handle the first pass — drafting the coverage report — while keeping the actual greenlight decision where it belongs: with a person.
What it does
Greenlight Desk takes an uploaded screenplay (PDF or plain text), reads it, maps its story world, and drafts a full coverage report with Gemini: a logline, synopsis, strengths, pressure points, comparable titles, and a Pass/Consider/Recommend call — plus generated key art. Every stage of the analysis is shown as a live trace, so nothing about how the recommendation was reached is hidden. The API refuses to let a decision happen until coverage is actually ready, and Approve/Reject are explicit producer actions. Nothing moves to development automatically.
How we built it
React + Vite for the producer workspace, FastAPI + Uvicorn for the screenplay and decision API, Google Gemini via the google-genai SDK for structured coverage generation, and SQLite for metadata, traces, coverage, and decisions. OpenAPI + Orval keep the client and server in sync with typed React hooks. Analysis runs as an asynchronous job so the trace updates progressively while the client polls, and the whole thing is scaffolded and deployed on Replit Agent.
Challenges we ran into
Gemini's image-generation models require a billing-linked project — the free-tier key we started with returned a hard quota error on every key-art request, and even switching to a billing-linked key didn't guarantee access to that specific model. Rather than keep chasing account configuration, we replaced AI image generation with a deterministic local renderer: genre selects a fixed SVG composition, tone selects a color palette, and a hash of the report gives stable per-report variation. Same report, same art, every time — no quota, no external call, no flakiness. Separately, before publishing publicly, a security review flagged that the app had no rate limiting or upload bounds, meaning a public visitor could exhaust our Gemini quota or storage. We added request-body/file/page limits, rate limiting, concurrency controls, duplicate-job prevention, and production CORS restrictions before launch.
Accomplishments that we're proud of
23 automated tests passing, 0 critical or high findings across dependency, static-code, and privacy scans, and a key-art pipeline that ended up more reliable than the AI-generated version it replaced — while staying honest about the one thing we deferred: authentication, so the public demo uses non-sensitive scripts only.
What we learned
That a visible failure handled honestly (and then engineered around) is worth more than a hidden one — the non-blocking design meant the core coverage pipeline never went down even while key art was broken, and replacing it with something deterministic turned a limitation into a more dependable feature than the original plan.
What's next for Greenlight Desk
Per-user authentication and screenplay ownership, a longer-term storage/retention policy for uploaded scripts, and support for full multi-page scripts beyond the current page limits.
Built With
- agentic-ai
- fastapi
- generative-ai
- google-gemini
- human-in-the-loop
- llm
- openapi
- producer-tools
- python
- rate-limiting
- replit
- replit-agent
- screenwriting
- sqlite
- svg
- typescript
- uilt-with-(tags):-react
- uvicorn
- vite

Log in or sign up for Devpost to join the conversation.