Inspiration

Pro-bono consulting is one of the most high-leverage forms of social impact, but the people who need it most are often the hardest to serve. A Somali refugee navigating a housing subsidy appeal, a Palestinian entrepreneur dealing with 15% international wire fees and a currency they don't control, a Lagos clinic watching their dollar-denominated grant lose half its purchasing power as the naira collapses, these clients don't just need advice, they need advice that accounts for the specific legal, financial, and social reality they're living in.

We built Risus because the tools consultants use today, video calls, notes, generic document templates, weren't built for this. They don't speak the client's language, they don't know the Bank of Palestine's withdrawal limits, and they don't turn a 45-minute conversation into a structured deliverable automatically. We wanted to change that.


What it does

Risus is a multilingual consultation platform for pro-bono advisory work. A consultant opens a session, joins a WebRTC video call with their client, and Risus handles everything else:

  • Live translation — the consultant speaks in English, the client hears it in Arabic, Somali, Ukrainian, or any of 99 supported languages, powered by ElevenLabs Scribe (STT) → Gemini Flash (translation) → ElevenLabs TTS
  • AI projections — after the call, Gemini reads the transcript and generates only the analytical sections relevant to that specific conversation: financial forecasts, risk radars, market opportunity charts, team capacity gaps, community impact metrics
  • Country-aware analysis — the AI automatically surfaces legal, banking, and social constraints specific to the client's country: wire transfer fees, local tax obligations, currency exposure, purchasing power relative to proposed pricing, geopolitical risk
  • PDF reports — one click generates a formatted, printable AI projection report saved locally for later reference
  • Case repository — a searchable, filterable database of anonymised case studies from across the platform, with a points-based incentive system for publishing

How I built it

  • Frontend: Next.js 16 (App Router) + React 19, Tailwind CSS, Recharts for data visualisation
  • Video calls: WebRTC peer-to-peer with a Node.js + Socket.IO signalling server handling offer/answer exchange, ICE relay, and media state sync
  • Translation pipeline: Three Next.js API routes in sequence — /api/translation/stt (ElevenLabs Scribe), /api/translation/translate (Gemini 2.5 Flash), /api/translation/tts (ElevenLabs Turbo v2.5). All API keys stay server-side.
  • AI projections: A single Gemini 2.5 Flash call with a carefully engineered system prompt that selects only relevant analytical sections, outputs structured JSON, and folds in country-specific financial and legal context when present in the transcript
  • PDF generation: Browser-native print API — a formatted HTML document is written to a new window and window.print() is triggered, no dependencies needed
  • Persistence: Session storage for projection caching, localStorage for saved document history

Challenges I ran into

  • ElevenLabs STT field naming — the API requires the audio blob under the field name file, not audio. A silent 422 validation error cost significant debugging time.
  • WebRTC + MediaRecorder corrupted segments — piping a live WebRTC remote stream directly into MediaRecorder produces corrupted audio if the video track is included, the init segment is missed, or recording starts before ICE is fully connected. Each failure mode produces the same unhelpful error from the STT API.
  • Chart label overflow — Recharts horizontal bar charts with a fixed Y-axis width silently truncate long labels. Required dynamic width calculation from actual data.
  • Gemini JSON reliability — getting Gemini to return clean, parseable JSON every time required explicit output constraints in the system prompt and stripping logic on the response.
  • Country context without hallucination — prompting the AI to include geopolitical and legal factors without fabricating details not present in the transcript required precise instruction: surface only what is "supported or strongly implied," not general world knowledge.

Accomplishments that I'm proud of

  • A translation pipeline with per-step latency visibility (STT / LLM / TTS ms shown separately) so bottlenecks are immediately identifiable
  • An AI analysis layer that adapts its output shape to the conversation — it doesn't force a financial chart onto a housing intake call
  • Country-aware consulting intelligence: the first time a consultant runs the Lagos clinic scenario and sees naira devaluation, generator diesel costs, and FIRS NGO audit risk surface automatically, it genuinely feels like having a country expert in the room
  • A clean, accessible UI that a non-technical consultant can operate without training
  • 99-language support with a searchable picker — including Javanese, Lingala, and Occitan

What I learned

  • The biggest latency gains in a STT → LLM → TTS pipeline come from model selection, not architecture. Switching to Gemini Flash cut translation time by ~60% with no quality loss for short utterances.
  • WebRTC audio recording requires stripping video tracks, wiring ondataavailable before .start(), and waiting for iceConnectionState === "connected" — miss any one of these and the resulting blob is silently corrupt.
  • Country-specific prompting is a surprisingly high-value addition to consulting AI. The same transcript with and without geopolitical context produces meaningfully different and more actionable outputs.
  • Browser-native window.print() is a completely viable PDF generation strategy — no jsPDF, no html2canvas, no bundle cost.

What's next for Risus

  • Streaming translation — move from request/response to WebSocket streaming for both STT and TTS, reducing perceived latency to under 500ms
  • Persistent backend — move from localStorage to a real database so reports, cases, and session history survive across devices
  • In-call overlay — surface translated captions and AI flags directly on the video call screen in real time
  • Document generation — turn AI projections into properly formatted bilingual Word/PDF deliverables clients can take away
  • Organisation dashboard — aggregate impact metrics across all sessions: clients served, languages used, outcomes tracked, points earned
Share this project:

Updates