Proof of work · In development

imvo

Imvo — isiXhosa and isiZulu for “opinion, a point of view.” A social news platform for a multilingual region: contributors submit, editors vet, and readers get local news in whatever language they choose. This is a fully-specified, pre-launch product — no live demo yet, shown here as designed, not as built.

View the spec on GitHub ↗

The problem it's built for

Trustworthy, locally-sourced news for under-served language communities, without paying to translate the same article for every reader separately. Contributors are citizen journalists and community reporters who have a story; editors are a newsroom that needs an audit trail before anything goes live; readers want local news, today, in their own language, with no paywall and no app install.

imvo

No screenshots here on purpose — there's no live product yet to show honestly. What follows is the design.

The core mechanism

A translation is produced once per (article version, language) and reused for every later reader — a Redis single-flight lock stops concurrent readers from triggering duplicate translation jobs, and no LLM or MT call ever sits on a reader's request path.

Block-level caching

Articles are stored as ordered, stable-ID content blocks, so a minor edit re-translates only the changed blocks — not the whole piece.

Pre-warmed on publish

A story publishes into its region's default languages at low priority before the first reader ever asks for it.

Hybrid engine routing

Cheap MT for high-resource language pairs; an LLM for low-resource Nguni/Sotho pairs and sensitive pieces. A persistent “Translated by AI” label, a one-tap toggle to the original, and an editor lock so the pipeline never silently overwrites a human-reviewed translation.

An editorial workflow with a real audit trail

Draft → submit → review queue (claim / comment / request changes / reject / approve) → publish or schedule → update, unpublish, or correction. Every state change writes an immutable editorial_event — actor, timestamp, from→to status, note — alongside verified contributor identity, as a deliberate defamation-risk mitigation for a platform publishing under real bylines.

>90%
translation-cache hit rate target, after warm-up
<24h
median editorial submission→decision SLA
p95 <300ms
feed response, served from cache

Built for the box it runs on

The whole stack is designed to run on a single 1 OCPU / 16 GB, CPU-only host — media and inference are deliberately kept off-box, via external CDN and external translation APIs. Proposed stack: Next.js (App Router, SSR/ISR), PostgreSQL 17 + PostGIS for the geo feed, Redis + BullMQ, a Node worker, S3-compatible object storage — not yet locked.