Anesius Mutagwaba
Dar es Salaam, Tanzania · Portfolio

Software for problems I live with.

I manage a data center, serve as an officer of a savings group, build systems for clients and run my own platforms. Every system here started as a real problem, mine or a client's, and real people use it today. I build it, run it and fix what real use shows me.

6systems built
5in use today
2,081commits since June 2026
EN · SWbuilt for Tanzanian users

One ecosystem, one sign-in core

Each system runs on its own and keeps its own data. They share one verification service and one phone app, so identity is handled once and handled well.

Ozilane Key auth.ozilane.com Sweepercom Ops security company Tumaini Group savings group PMS data center Ozilane marketplace Aluta music + chat Ozilane Turn call relay for Aluta
Live Live testing Pre-launch or in progress - - - linked to the sign-in core
Infrastructure

The trust core

The one piece every other system depends on, so it gets the strictest engineering.

Ozilane Key

Live testing
auth.ozilane.comsince Oct 2026Android app + web app + server

Your phone proves it is you. A password reset with no SMS, no WhatsApp, no email and no third party.

The problem

Every platform I run needs account recovery. The usual route pays an SMS or WhatsApp provider for every message and hands them users' phone numbers. On one client system, Sweepercom, the reset feature was stuck waiting for a business SIM card.

What I built

  • One verification service shared by all platforms, plus the Ozilane Key phone app
  • The key that approves a reset is made inside the phone's secure hardware, never leaves it, and signs only after fingerprint or PIN
  • Approvals need fingerprint or PIN and a number the user types from the screen
  • Six-digit offline codes (standard TOTP) when the phone has no internet

In operation

Linked first to Sweepercom. Its first hardening release added backup codes, recovery that needs several people to approve, one sealed audit log across all apps, data export, and key rotation.

What it holds

Public keys, anonymous account IDs and a label for each linked phone. No passwords, personal names, phone numbers or app data. A full copy of its database cannot approve anything.

A guessed approval succeeds about 1 time in 90. Wrong codes lock the account for longer each time: 15 min, then 1 h, 4 h and 24 h.

Node 22TypeScriptHonoPostgreSQLFlutter · Android KeystoreWebAuthn passkeysRFC 6238 TOTPAES-256-GCM
Operations systems

Built for organisations that run on real money and real duty

Each one replaced paper, spreadsheets or a broken tool, and every one is in use by the people it was built for.

PMS: Power Equipment Inspection

Live · daily use
pms.ozilane.comsince Jul 202632 units monitored

Turns every daily inspection and maintenance task in a data center into a searchable record, credited to the person who did the work.

The problem

It started when the building management system (BMS) at the data center I manage became unreliable, leaving critical power equipment without dependable monitoring. The deeper problem was older: maintenance was written by hand in printed checklist books. Once a book was full it went to the store, and finding who did what on a given date became almost impossible. Staff had no record of their own work.

What I built

  • Photos stamped with unit, time and inspector, plus readings for each equipment type
  • Guided rounds through due units, QR scan-to-unit, and an offline upload queue
  • Overdue alerts, and faults that clear themselves on the next clean inspection
  • Maintenance checklists with approval, a compliance log with CSV export, team chat
  • A built-in guide on every admin page explaining how that page and its settings work

In operation

Covers rectifiers, UPS units, precision air conditioners, generators, transformers, transfer switches and the battery room. Staff inspect on a schedule and managers audit compliance live. Real use shaped it: eight air conditioners share one display, so one photo covers the group, and alarms ticked during an inspection become tracked faults.

Why it outlasts the BMS

A working BMS watches the equipment and sends remote alarms. It does not record the people. Inspectors still need to document what they do every day, and PMS keeps that work searchable by date, unit and person. Even a small task becomes part of a staff member's record, and their proof of experience for career growth.

Every record belongs to the person who did the work

  • Personal activity reports. Each staff member can pull their own record of inspections, maintenance sessions and faults for any period, as a PDF or Excel file, for self-evaluation or as proof of experience. History is kept for five years, and every report shows the staff member's official ID.
  • Shared office tablet. The person on duty registers their shift with their own PIN, and for 24 hours everything done on the tablet is credited to them, marked as done on the shared tablet. The shared account only signs in on tablets an admin has approved, so its PIN is useless anywhere else.
  • Handovers. Correcting a name keeps the person's history. If the new name looks like a different person, the app stops and asks; a real handover retires the leaver's account and opens a fresh one, so nobody inherits someone else's record.
  • Evidence with a time. Maintenance photos carry the moment the camera took them, on the image and in the report. Generator runs record which unit ran and how it was warmed up, and only that unit's warm-up clock resets.
Node.jsExpressSQLitePWAWeb PushRailway

Sweepercom Operations

Live testing
Client projectsince Sep 202617 regions

A finance and operations system designed for a security company that guards telecom tower sites. No change counts until the directors sign it.

The problem

The company approached me because everything lived in Excel files that passed through one person:

  • The register of tower sites under contract, and which guard was posted to each
  • Guard contracts and payment details, which did not match from one month to the next
  • Payroll, client invoices and contract deductions

Every monthly payment run started with untangling those mismatches. Pulling the reports needed to analyse daily operations was close to impossible. Directors could not see the numbers remotely, and a changed cell left no trace of who changed it or why.

What I built

  • One register of tower sites and guard postings: a guard can only be posted to an approved site, with the signed contract attached
  • HR and the accountant propose changes with a reason; directors see exactly which fields would change
  • Every director except the one who raised a request must approve it, and any one of them can refuse it
  • Payroll with NSSF, PAYE, WCF and SDL; invoicing under the client contract's billing rules
  • Contract deductions, statutory payments with receipts, a monthly income statement and a full audit trail

In operation

Earlier months were loaded from the company's workbooks. The import itself found billing errors, such as a site billed twice, and these are now tracked until they are resolved with the client.

Privacy by design

Everyone signs in by role code, such as FIN-01. Roles pass from one staff member to the next. Pay lines are hidden from the very offices that process them.

The app deliberately caches no pages. In a finance system, a cached page could show a director last week's figures as if they were today's.

Next.js 15TypeScriptDrizzle ORMPostgreSQLTailwind 4Railway

Tumaini Group

Live testing
tumainigroup.ozilane.comsince Aug 2026Swahili-first

Records, contributions and reminders for a savings and welfare group (umoja), with every rule traced to its constitution.

The problem

Every month there are dues, every meeting has attendance and fines, and every funeral, hospital stay or wedding brings contributions and a benefit to pay out. All of it was kept in a notebook, on people's phones and in people's heads. When I became the group's assistant secretary (Katibu Msaidizi), every member could see the result:

BeforeNobody knew what they owed until they asked, and the answer depended on who did the sums.

With the systemEach member sees their own balance on their phone. It is always charges minus payments, worked out fresh from records that are never edited, so everyone gets the same answer.

BeforeIn 2026 monthly dues rose from 15,000 to 20,000 TZS. Arrears from 2025 must stay at 15,000, which is easy to get wrong in a notebook.

With the systemEvery rate carries the date it took effect. Dues are charged on the 1st at the rate in force that month, so old months keep their old rate.

BeforeFines for lateness and absence were forgotten, or recorded for one member and missed for another.

With the systemFines are generated from the meeting attendance register, never typed by hand. One illness-exemption field covers both the fine and the absence count.

BeforeKanuni 7 says arrears come off a benefit before it is paid. That sum was done hurriedly at a meeting while a member was grieving, and that is where disputes started.

With the systemThe benefit calculator deducts arrears and shows every step of the working. The payout can never go below zero, and members on probation are handled as the by-laws say.

BeforeReminders depended on one person. If the secretary forgot, or their phone broke, nobody was reminded.

With the systemScheduled push reminders for dues on the 25th, meetings at 3 days, 1 day and on the day, and funeral contribution deadlines. Every run is logged, so a missed one shows.

BeforeDocuments such as birth and marriage certificates and NIDA cards sat with individual members and had to be hunted for when needed.

With the systemMembers upload their own documents after giving consent and choose who may see them. The chairperson can open a file in an emergency, but only with a written reason and a time limit. The member is notified, and every opening is logged.

Every money rule in the code names its clause in the group's Katiba (constitution) or Kanuni (by-laws), so any figure on screen can be checked against the rule that produced it.

People decide, the system flags

The app never removes a member; only the general meeting can do that. Where the constitution is silent or contradicts itself, the app records the question for members to decide. More than 30 such questions are recorded so far.

Next

A free period for the founding group, then licensing to other vyama (savings groups). The code already keeps each group's records separate. It runs on low-cost phones with no framework and no outside downloads.

Node.jsPostgreSQLVanilla JS PWAWeb PushEnd-to-end test suite
Products

Platforms I own and grow

Built for the Tanzanian market, with mobile money, Swahili and local delivery at the centre.

Aluta

Live · growing
aluta.ozilane.comAndroid · Windows · Web

Messaging, music and relationships, connected in a single app.

The idea

People switch between a messenger, a music app and an app for the people closest to them. Aluta connects all three: chat with friends, hear the same song at the same moment, and keep a shared space for a partner or close friends.

What I built

  • Full chat: images with annotation, voice notes, files, GIFs, reactions, replies and read receipts
  • Listen Together rooms: a member streams a song from their own device while friends listen live, chat and react
  • Music player with equalizer, plus a "listening now" status for friends
  • Voice and group calls, biometric unlock and push notifications

Hardened by live use

A code audit found real gaps, and they are now closed: message channels require a verified sign-in, shared media is visible only to conversation members, and push notifications reach phones in the background.

Ozilane Turn

A self-hosted relay, in progress, that carries call audio when two phones cannot connect directly. It uses short-lived credentials, so apps never hold the relay's secret.

Aluta owns no music. Streaming services license a catalogue and rent it back to listeners. Aluta builds the connection instead. The music is what members already keep on their own phones and computers. Any member with an account can broadcast a favourite playlist from their device to the people they love, in real time. A Listen Together stream passes straight through and is never saved. A song sent in a chat waits on the server only until the friend's device downloads it, and then the server deletes its copy. Aluta keeps no library and sells no music.

FlutterFastAPIPostgreSQLWebSocketsWebRTCcoturnFCM

Ozilane

Pre-launch · payments in sandbox
ozilane.comsince Jun 2026854 commits

A multi-vendor marketplace and delivery platform for Tanzania that runs the whole order, from catalog to the customer's door.

The problem

Local sellers have no trusted online channel built around how Tanzanians actually pay and receive goods: mobile money, Swahili and reliable local delivery.

What I built

  • Vetted suppliers with branded storefronts and team sub-accounts
  • In-house courier network with distance-based pricing and a one-time code at handover
  • M-Pesa, mobile money and bank transfer; supplier payouts, commission ledger, wallet, loyalty and referrals
  • Fast storefront pages for search engines, English and Swahili, installable as an app

Status

Over 90% of the planned features are built. The order flow runs end to end against a payment simulator. Connecting the live merchant account is the last step before launch.

Engineering

API and frontend tests run automatically on every push, and full browser journeys run before changes are merged. Staff accounts use role-based permissions with two-factor sign-in.

FastAPISQLAlchemy · AlembicPostgreSQLReact 19React Router 7 SSRTailwind 4PlaywrightGitHub ActionsRailway · Vercel
How I build

Rules I build by, and where each one shows

Numbers you can defend

TumainiSweepercomPMSOzilane

Tumaini never stores a balance; it works debt out from payment records that are never edited. Sweepercom keeps a full audit trail of every approved change. PMS credits every inspection and maintenance step to the person who did it, even on a shared tablet. Ozilane records commissions and payouts in a ledger.

People decide, systems flag

TumainiSweepercomPMS

Tumaini flags members in arrears but never removes anyone. Sweepercom applies no change until every director approves. PMS raises faults and overdue alerts for staff to act on.

Standards over home-made security

Ozilane KeyOzilane

Ozilane Key uses standard TOTP codes, hardware-held keys and passkeys. Ozilane uses standard two-factor sign-in with recovery codes.

Built for real conditions

PMSTumainiOzilane

PMS queues inspections offline on weak Wi-Fi. Tumaini runs on low-cost phones in Swahili. Ozilane takes mobile money and prices local delivery by distance.

Hold the least data

Ozilane KeySweepercomPMS

Ozilane Key holds anonymous IDs, never names or phone numbers. Sweepercom shows role codes instead of names. PMS deletes inspection photos after 48 hours and keeps only the log.

Live testing is part of the build

AlutaPMSSweepercom

Aluta's audit led to secured message channels and private media. PMS turned ticked alarms into tracked faults. Sweepercom's data import uncovered billing errors.

Work with me

Have a problem your organisation lives with every day?

I build systems for savings groups, security and facilities operations, and businesses selling in Tanzania. I take them from the first conversation to live use, and I keep them running afterwards. Licensing of the existing systems is also available.

ozilane.comDar es Salaam, Tanzania