Inspiration Hackathons (and everyday pair/swarm coding) increasingly mean multiple people and AI agents editing the same repo at once. You only find out about collisions when someone opens a PR or hits a merge conflict. We wanted the opposite: a live “ops board” for agents — glanceable, shared, and early enough to act. That idea also lined up with Hack the Valley’s Gemini prize: use Gemini not as a chatbot, but as a real-time layer that captions activity and judges whether two edits are actually related.
What it does Synergo is a live multiplayer AI agent viewer. Teammates each run a local watcher on their project; activity streams over WebSockets into a shared room on a relay server; everyone else watches a dashboard.
You get:
Per-agent lanes — prompts, Gemini captions, expandable unified diffs Conflict radar — overlapping file edits within a short window, with Gemini verdicts (overlapping / related / etc.) Shared rooms — create/join with a short code (Docs-style trust model, no accounts) Optional companion — start/stop watchers from the UI without living in the terminal Demo flow: create a workspace → connect two watchers → edit the same file → conflict banner fires before git does.
How we built it
Four pieces, shipped in one day:
Relay (server/) — FastAPI + WebSockets, in-memory rooms, broadcast, Gemini captioning + conflict classification (with heuristic fallbacks if the key is missing) Watcher (watcher/) — Python watchdog, ~1.5s debounce batches, unified diffs, optional Cursor prompt capture, reconnect to wss://…/ws/{room} Dashboard (frontend/) — React + Vite: home create/join, live lanes, conflict banner, analytics, deploy helpers Companion (companion/) — localhost-only helper to spawn watchers safely Deploy: relay on Render (wss://hackday-hackthevalley.onrender.com), dashboard on Vercel. Schema stayed stable so Gemini and rooms could land without rewriting the wire protocol.
Challenges we ran into
In-memory rooms on Render — rooms vanish when everyone disconnects; watchers kept reconnecting into dead rooms and the UI looked “empty/broken.” Conflict correctness — early logic dropped a user’s last touch the moment they disconnected, so real overlaps could be missed; we had to keep recent touches for the conflict window even after leave. Real vs fake demo data — empty-room mock lanes/conflicts made demos confusing; we stripped them so the board only shows live signals. Prod connectivity & CORS — wiring Vercel → Render WebSockets, env-scoped CORS, and security hardening mid-hack. Late-day merge conflicts — ironically, while building a conflict detector, we also had to resolve real git merges across parallel agent workstreams. Prompt capture — getting Cursor prompts into the stream without fragile hacks under a time box. Accomplishments that we're proud of A working end-to-end demo: local + production conflict alerts verified with two watchers on the same file. Gemini as infrastructure — captions and conflict explanations with clean fallbacks so the product still demos without the API. Room model that feels like sharing a Google Doc, not spinning up infra. Shipping a security pass (CORS, companion binding, etc.) instead of leaving the relay wide open. Going from a single global room to multi-workspace rooms without breaking the watcher/dashboard contract.
What we learned
Real-time multiplayer is mostly protocol + state lifetime, not UI polish — room TTL, reconnect, and “what counts as active” matter more than pixels. For hackathon backends, in-memory is fast but ephemeral; you have to design demos and reconnect around that. Gemini shines when you give it a narrow job (caption this batch / classify this overlap) with timeouts and heuristics behind it. Parallel AI-assisted coding is powerful — and is exactly why a tool like Synergo exists. What's next for Synergo Persistent rooms + history (survive Render restarts; replay a session) Deeper agent integrations — richer Cursor/Claude/Codex prompt + tool traces Smarter conflict UX — suggest who should yield, link to the exact hunks, Slack/Discord pings Auth & private rooms without losing the fast join code Team analytics — who touched what, collision heatmaps over a whole hackathon Package the watcher/companion so non-dev teammates can join in one click
Built With
- api
- cloudflare
- css
- cursor
- dotenv
- fastapi
- gemini
- jetbrains
- mono
- node.js
- pydantic
- python
- react
- render
- rest
- sqlite
- tailwind
- typescript
- uvicorn
- vercel
- vite
- watchdog
- websockets
Log in or sign up for Devpost to join the conversation.