Inspiration
A subtitle delivery can look finished and still be unsafe to release. A timing overlap is easy to miss. Reading speed can be too high. A required term can drift. Worse, a revised source line can leave the translation saying the opposite of what the director intended.
We built LocaleLock to make the final release decision explicit: HELD or READY, with evidence.
What it does
LocaleLock checks the localized subtitle file that will actually ship against its source revision and release rules.
In our demo, The Last Tram arrives in Spanish (Latin America), version 7. The gate finds four blockers: a cue overlap, excessive reading speed, glossary drift, and a meaning reversal caused by a changed source line.
For every blocker, the producer can see the affected cue, severity, evidence, source context, and proposed repair. Nothing is changed automatically. After the producer approves the repairs, LocaleLock writes a corrected SRT, stores its SHA-256 hash, ingests it as version 8, and runs the gate again. The result is READY TO RELEASE — 0 blockers.
How we built it
The release-gate agent uses Google ADK for TypeScript with Gemini 2.5 Flash. It follows a fixed query plan through the official mcp-clickhouse server against ClickHouse Cloud.
ClickHouse stores the synthetic localization catalog, subtitle cues, source revisions, glossary data, findings, approvals, and run evidence. Deterministic checks stay in SQL: overlap detection, reading-speed calculation, and glossary drift. Gemini handles the part SQL cannot: comparing a changed source line with its translation to determine whether the meaning still matches.
The MCP connection is read-only. The agent cannot write to ClickHouse. Application writes happen separately through the backend and only after producer approval.
The frontend is React and Vite on S3 and CloudFront. The backend runs on AWS Lambda behind API Gateway.
Challenges
The hard part was building a real workflow rather than a convincing status screen. We had to connect a persisted asynchronous run, ClickHouse query traces, deterministic checks, Gemini review, human approval, SRT patching and hashing, version ingestion, and a second verification run.
We also needed to show enough evidence for a producer to make a decision without sending the entire subtitle file to the semantic reviewer.
Accomplishments
- A complete live HELD/4 → approvals → corrected SRT v8 → READY/0 workflow
- Evidence and a proposed repair for every blocker
- A clear boundary between SQL checks and Gemini semantic review
- Read-only ClickHouse/MCP access with producer-controlled writes
- A reproducible release result tied to the corrected file hash
- Public source under the MIT license
What we learned
Agents work best inside constrained workflows with explicit tools, permissions, and human approval. The model should not guess arithmetic that SQL can calculate exactly. Semantic drift, however, needs model reasoning. Splitting those responsibilities made the system easier to explain and trust.
What's next
More subtitle formats and languages, configurable studio policies, reviewer roles, vendor scorecards, and integrations with localization and media asset systems.
Built With
- amazon-web-services
- clickhouse
- github
- react
- tailwind
Log in or sign up for Devpost to join the conversation.