Start a project

Kazi · the work

Proof of work.

Riua is new, so there's no client list here yet. Instead, here's work you can look at: the interfaces, the problems behind them, and the decisions that shaped them.

Some were built for competitions, some on our own. Wherever the code is public we link to it, along with any press coverage, so you can check for yourself.

  1. Doria’s website and install-time threat simulation. 01 Doria Security · Developer tools Package security for developers and startup engineering teams.
  2. Uwatu’s livestock dashboard, with a herd map, animal status and device telemetry. 02 Uwatu Agriculture · Telecoms Livestock monitoring and phone alerts for smallholder farmers.
  3. The iKlippa browser-based video editor, with a canvas, media library and editing timeline. 03 iKlippa Media · AI Browser-based video editing for independent creators and students.
  4. Limi’s website and animated language preview 04 Limi Education · Accessibility Accessible, multilingual learning for schools and workplace training.
  5. AfyaAI’s health companion interface, with an avatar, chat and daily check-ins. 05 AfyaAI Health · AI Conversation and daily check-ins for people managing their wellbeing.
  6. 06This siteRiua · EngineeringThe design, effects and engineering behind this website.

01 · Security · Developer tools

Doria

doria: Kiswahili for patrol

A security tool that checks software packages as they're installed and stops the malicious ones before they reach your machine.

Outcome
1st place, ITWeb Security Summit Hackathon 2026 (South Africa), out of 850+ participants
Built with
Rust, Python, TypeScript
Domain
Software supply-chain security
Status
Working prototype, open source
Doria’s website and install-time threat simulation.
Doria’s website and install-time threat simulation.

The problem

Every install pulls in code someone else wrote. AI coding assistants now suggest package names, and some of those packages don't exist until an attacker registers them with malware inside. This is called slopsquatting.

What was built

You install packages with doria install instead of your usual command. Each package is scanned first, then either installed or blocked with an explanation. The check happens before the code reaches your disk, instead of later in CI.

What happens when you install a package
  1. Install requestdoria install <package>
  2. Static analysisRust, a real AST parser: shell execution, network calls, credential harvesting, obfuscation, install hooks
  3. Threat scoreLive threat intelligence and an XGBoost model trained on real malware
  4. ReasoningAn LLM weighs the signals against your codebase and names the line that matters
  5. Slopsquatting checkHallucinated names, cross-ecosystem confusion, suspiciously new registrations
  6. VerdictInstall, or block and fix: safe version, test run, pull request

Decisions that mattered

  • It reads the structure of the code. Doria looks at how the code is put together, so renaming a variable or splitting a string won't hide anything.
  • Written in Rust. Every install goes through the scanner, so it has to be fast, and it can't be the thing that crashes.
  • The AI works from evidence. The language model gets the scanner's and the classifier's findings to work with, and points to the exact line that's dangerous and why.
  • It fixes things, then tells you. When Doria confirms a serious threat, it removes the package, installs the latest safe version, runs your tests and opens a pull request explaining what happened.

For your projectEvery package you install is a way in for attackers. We check dependencies on every project we build.

02 · Agriculture · Telecoms · IoT

Uwatu

Protects smallholder farmers' livestock using the mobile network, and sends alerts to any phone.

Built with
Go, Python, MQTT, TimescaleDB, WebSockets
Integrations
Nokia Network as Code (CAMARA APIs), Africa's Talking, Firebase
Domain
Agritech, IoT, telecoms
Status
Working prototype, four public repositories
Uwatu’s livestock dashboard, showing a herd map, animal status and device telemetry.

The problem

Farmers lose animals to theft and disease, and both are easy to miss until it's too late. In rural areas the connection is patchy, budgets are tight, and plenty of farmers don't have smartphones.

What was built

A Go gateway collects readings from ear tags over MQTT, adds what the mobile network knows about each tag's SIM, stores everything in TimescaleDB and passes it to a Python service that works out what's wrong. Alerts go out by SMS, WhatsApp, USSD or push, and a dashboard shows the herd live.

From ear tag to farmer's phone
  1. Ear tagsTelemetry over MQTT, or the digital-twin simulator
  2. Go gatewayIngest, two-minute cache, rate-limited parallel calls
  3. Network signalsNine CAMARA APIs: location, SIM swap and more
  4. TimescaleDBEvery reading, in a time-series hypertable
  5. IntelligenceRules, then a statistical baseline, then an isolation forest, then a narrator
  6. AlertsSMS, WhatsApp, USSD, push. Live dashboard over WebSockets

Decisions that mattered

  • The phone network does some of the work. If someone swaps the SIM in a tag, that's a theft signal no motion sensor could give you. Animals leaving their area or stampeding at night are caught by simple rules before any model runs.
  • API calls cost money. The network charges per request, so lookups are cached for two minutes, spread out, and capped at 100 a minute.
  • Alarms don't wait for the AI. The scoring call gets 500 ms and falls back safely if it's slow. AI-written alerts stay under 160 characters, with plain backup text if the model is down.
  • Cheap checks first. A simple running average (Welford's algorithm, across 48 times of day) tells normal morning grazing apart from unusual pacing, before a heavier model looks for anything subtler.
  • Tested on a simulated herd. A simulator written in Go produces realistic tag data, squeezes 72 hours into minutes, and plays out disease and theft scenarios so the system can be checked against known answers.

For your projectIf your system needs to talk to telcos, send SMS or USSD, or keep working on a weak signal, this is the kind of work we do.

03 · Media · Applied AI

iKlippa

A video editor that runs in the browser on an ordinary laptop, with AI that works on your actual edit.

Evidence
391 frontend tests; playback benchmarked at baseline and under 4× CPU throttling
Built with
TypeScript, Rust to WebAssembly, WebCodecs, Web Audio, IndexedDB, IBM Granite
Domain
Creative tools, applied AI
Status
Working prototype, Apache 2.0
The iKlippa editor in a browser: project media on the left, the canvas in the middle, the AI Director on the right and the timeline below.
The editor, running entirely in the browser.

The problem

Most editing tools expect a powerful computer, a good connection and a monthly subscription in dollars. Students, independent creators and small studios end up stuck with tools that are slow or that they can't afford.

What was built

A video engine that runs in the browser, with IBM Granite as an assistant. Smart Trim cuts out silences, Beat Sync lines clips up with the music, Auto B-Roll adds footage, and anything the AI does shows up as a normal edit you can undo.

Where the work happens
  1. FootageStays on the device
  2. WebCodecsHardware decoding in the browser
  3. Rust and WebAssemblyTimeline state, compositing, colour, effects
  4. Edit contextBrief, brand rules, tracks, clips, playhead, captions, pacing
  5. GraniteReasons over the edit and proposes changes
  6. Command layerValidates targets, applies reversible edits, exports in the browser

Decisions that mattered

  • It all runs in the browser. Video is decoded by your computer's hardware through WebCodecs, and the heavy work runs in Rust compiled to WebAssembly. Your footage never has to be uploaded.
  • The AI only suggests. Granite can't change the project directly. Every suggestion goes through code that checks it and applies it as an edit you can undo, so the editor never does anything unexpected.
  • The AI can see the edit. The model gets the edit itself as structured data, so its advice is about your actual clips.
  • It checks before going offline. Before switching to offline mode, the app makes sure everything it needs is already on the device.

For your projectIf you want AI in your product, this is how we'd do it: the AI suggests, tested code makes the changes, and it all runs on the computers and connections people actually have.

04 · Education · Accessibility

Limi

Helps African learners understand difficult material in their own language, with audio, sign language and offline access.

Surfaces
Learner portal, Chrome extension, API
Outputs
South African languages, South African Sign Language avatar, text-to-speech, screen-reader-friendly documents
Domain
Education, accessibility
Status
In development. Source private
Limi’s language preview. Visit limi.africa ↗

The problem

Most learning material is in the learner's second language, assumes they can see and hear it, and needs a connection. Textbooks full of jargon, lecture videos and websites all leave the same learners behind.

What is being built

Learners can use a portal for textbooks, photos and documents, a browser extension for sites like YouTube and Wikipedia, or an API. All three use the same engine, which handles translation and simpler explanations, audio in local languages, captions, glossaries and quizzes, a sign-language avatar and lessons that work offline.

How it fits together
  1. Portal · extension · APITextbooks, pictures, documents, visited sites
  2. ContractsVersioned messages between every surface and the engine
  3. Limi engineIngestion, OCR, language, speech, sign planning
  4. OutputsLanguages, SASL avatar, TTS, accessible documents, offline sessions

Decisions that matter

  • One engine behind everything. The portal, the extension and the API all talk to the same engine through shared contracts, so adding a new one doesn't mean rewriting the logic.
  • Nothing is trusted by default. Uploads, web pages, captions and even the AI's own output are all treated as untrusted.
  • Every explanation has a source. Limi keeps track of sources and revisions, so any explanation can point back to where it came from.
  • Finished means finished. A feature isn't done until it has tests, works with assistive technology, saves properly, is documented, and recovers when something goes wrong.

For your projectWe plan for accessibility, local languages and offline use from day one. They're much harder to add later.

05 · Health · AI

AfyaAI

A conversational health companion with an avatar and daily check-ins.

AfyaAI’s avatar and chat interface, alongside daily wellness check-ins.
AfyaAI interface preview.

06 · Riua

This site

If we say we care about how software is built, our own website should show it. Here's what's going on under the hood.

The sky
One WebGL shader, every gradient a 1-bit ordered dither
The day
Sunrise, solar noon and sunset computed for Nairobi in your browser
First load
Under 90 KB on a phone; first paint under a second on slow 4G; heavy effects load after the content
The backend
Go, standard library only. Uploads checked by their bytes, not their names; download links signed and expiring; a CSP pinned to hashes

Jaribu. Try it. This terminal is real and measures the page you're reading. Type perf.

Want this rigour
on your system?

Tell us what you need. A sentence is enough to start.

Start a project info@riua.africa