| Nobody selects the language they speak |
Detected from the audio on every utterance. No control anywhere sets a source language.The only language control on the page is "translate anything into" |
Built |
| Two to four people, each on their own device |
Four stations plus an auto-placed lobby; the server hands out places under its own lock.Five rounds of four simultaneous joins → four distinct places every round; the fifth refused |
Built |
| Everyone hears everyone, each in their own language |
One pass per distinct language, dispatched concurrently.One Hindi utterance → three listeners, three languages, audio on each, at 2365 / 2813 / 2658 ms |
Built |
| Listeners sharing a language cost one pass |
Grouped by target language before translation.Two listeners reading English share one turn id and identical text; the third receives Tamil |
Built |
| Conversational latency, both directions |
A 3.5 s budget, measured on the deployment rather than a laptop.English → Indic ×4: 2186 / 2268 / 2761 / 2561 ms. Indic → English: 1639 ms |
Built |
| A long answer starts playing before it is finished |
Sentence-level pipelining; the pieces share one turn and read as one entry.Three pieces at +1820 / +3275 / +4925 ms — the opening arrived 3105 ms before the turn finished |
Built |
| No provider key reaches the browser |
Every credential server-side; the client assets are scanned each release.8 deployed chunks (532 KB) plus the station document → 0 matches |
Built |
| The browser knows nothing about which vendor is in use |
A capability catalogue from the server, not a vendor id the page recognises.0 provider endpoints and 0 vendor-id comparisons in the deployed bundle |
Built |
| Only the deployed pages may use the service |
Two mechanisms: the origin list on the REST routes, and the same list applied by the socket before accept().A foreign origin refused before accept(); a client sending no origin still served |
Built |
| A room holds only as many people as it was opened for |
Capacity fixed server-side at creation, reported to every page, and not negotiable by asking for a place.The fourth into a room of three and the third into a pair were both refused, with the size named |
Built |
| A hostile name cannot reach another screen |
Names sanitised on the server before they are broadcast.A 71-character name containing ESC, BEL and NUL stored as 32 characters, all printable |
Built |
| Invite someone without explaining the room code |
The room travels in the link; an invitation can be emailed from inside the room, address checked first.Sent through the live interface 16 Sep 2026; a browser holding a different room still landed in the inviter's |
Built |
| Survives a long silence mid-conversation |
A translation tunnel is idle by definition whenever nobody is talking.300 seconds of streamed silence, both sockets open, then a delivered translation |
Built |
| Synthesis reads the text rather than answering it |
Checked by round trip — the spoken audio is transcribed back and compared with the text it was given.Telugu, Hindi and Tamil each returned the text exactly |
Built |
| The opening word is never clipped |
An 800 ms pre-roll buffer runs behind the speaker, because the voice detector spends about 160 ms unsure before it commits.Not proven. A WAV streamed from its first sample gives the buffer nothing to hold — this needs two words spoken into a real microphone |
Partial |
| Translated audio plays without clicks or drift |
Chunks are scheduled rather than played on arrival.Not proven. A multi-chunk turn has to be judged by ear in a real browser |
Partial |
| One conversation on two real devices |
Fifteen browser checks drive Chromium against the deployed pages.Not proven. No script catches stale browser state, autoplay policy and echo together — that needs two people and two machines |
Partial |
| The first turn is as fast as the rest |
The server makes its first call to the translation provider at start-up instead of leaving it to the first speaker.Cut the opening turn from 5740 ms to 3063 ms — but measured after a fresh deploy, not after an instance had genuinely slept |
Partial |
| Accuracy figures you can quote |
A benchmark harness with error rates, detection accuracy and cost per utterance exists.Its corpus is synthesised speech and tone placeholders by its own README, so no accuracy number drawn from it means anything yet |
Roadmap |
| No cold start, ever |
The tunnel is a managed container with a hostname that survives a restart, kept awake by a ten-minute health ping.On the free tier an instance still sleeps after about 15 minutes idle and takes 30–60 s to wake. A paid instance removes this; it is not bought |
Roadmap |
| Accounts and authentication |
None. Anyone with a room code can join it.Deliberate for a beta with no stored history. It has to exist before this carries anything sensitive |
Roadmap |