React · Firebase · Fintech2026 · 3 months · Product Engineer — fullstack, auth, architecture

Ajo/Esusu Platform

Digital cooperative savings & trust — a ROSCA (Rotating Savings and Credit Association) app with role-based access for admins and savers.

Overview

The product

Ajo/Esusu is a digital cooperative savings platform that brings the centuries-old African ROSCA tradition online. Members join savings circles, contribute on schedule, and receive their payout turn — while administrators run the circle from a dedicated admin terminal with full role-based access control. Built on React, Firebase Auth, and Firestore with hardened security rules, the platform digitizes trust without removing the human relationships that make Ajo work.

Admin + Member

Roles

Firestore rules

Security

Zustand

State

Firebase

Backend

The problem

Trust-based savings had no digital backbone

Ajo/Esusu groups run on paper ledgers, cash handovers, and personal trust — efficient socially, but opaque, error-prone, and impossible to scale. Members had no visibility into contributions or payout schedules, and admins tracked everything by hand.

  • Paper-ledger savings circles with no member visibility or audit trail
  • Role confusion — anyone could act like an admin, and access rules were unenforced
  • No secure, real-time data layer for contributions, schedules, and payouts

The solution

Digitize the circle without digitizing away the trust

I built a role-based ROSCA platform: consumers log in to a dashboard showing their circle, contribution history, and payout turn, while administrators manage members, cycles, and disbursements from a separate admin terminal. Firebase Auth gates every role, Firestore rules enforce what each role can read and write, and Zustand keeps shared state snappy across the app.

  • Consumer dashboard and admin terminal in one app, separated by role-based access control
  • Firebase Auth + Firestore rules enforce admin vs. member permissions at the data layer
  • Zustand state management keeps live contribution data responsive across views

Architecture

The system behind Ajo/Esusu Platform

A clean single-page React app split into consumer and admin surfaces, backed by Firebase Auth and a rules-protected Firestore database.

  1. 01

    App Shell

    React 18 · MUI v5

    Shared layout and theme powering both consumer and admin experiences.

  2. 02

    Auth

    Firebase Auth

    Email/password sign-in with admin and member role separation.

  3. 03

    Consumer Dashboard

    React Router v6

    Members track contributions, schedules, and their payout turn.

  4. 04

    Admin Terminal

    React Router v6

    Admins manage members, cycles, and disbursements in a dedicated surface.

  5. 05

    State

    Zustand

    Lightweight global stores for app and theme state.

  6. 06

    Data

    Firestore rules

    Role-enforced reads and writes on savings, cycles, and payouts.

Tech stack

Tools that earned their place

Frontend

  • React 18
  • MUI v5
  • Vite

State

  • Zustand

Routing

  • React Router v6

Backend

  • Firebase Auth
  • Cloud Firestore

Security

  • Firestore rules
  • RBAC

Features

What it does, and why it matters

01

Role-based access

Admins and members get distinct, enforced surfaces — no role confusion.

02

Consumer dashboard

Members see their circle, contributions, and payout schedule at a glance.

03

Admin terminal

Manage members, savings cycles, and disbursements from one control room.

04

Real-time data

Firestore keeps contribution records live across every logged-in surface.

05

Rules-enforced security

Firestore security rules back the UI, not just the buttons.

06

MUI design system

A consistent, accessible component system for both roles.

Challenges

What nearly broke the system

Two roles, one app

Consumer and admin flows live in the same codebase but must never cross. I split routes and guards by role and enforced the same rule in Firestore security rules, so the UI and the data layer agree.

Trust is the product

ROSCA platforms win or lose on credibility. I made every contribution visible and every payout scheduled — digitizing the transparency that makes the tradition trustworthy.

Security rules that scale

Hand-rolled auth checks in components aren't enough for money-adjacent data. I wrote Firestore rules that validate role claims server-side, so unauthorized reads are impossible even from a modified client.

Lessons learned

What shipping taught me

RBAC is a data-layer decision — client-side guards are UX, Firestore rules are security.

Digitizing a cultural system means preserving its trust mechanics, not just its paperwork.

A single codebase can serve two very different personas cleanly when routing and state are designed around roles.

Impact

Why this actually matters

Ajo/Esusu turns paper-ledger circles into a real-time, role-protected platform — members see their money's journey, admins get a control room, and the trust that powers cooperative savings stays exactly where it belongs.

  • Members get live visibility into contributions, schedules, and payout turns
  • Admins get a dedicated terminal with rules-enforced control over the circle
  • Firestore security rules protect financial data at the database level

Gallery

Inside the product

Consumer dashboard

Contribution history and payout schedule for members.

Admin terminal

Cycle, member, and disbursement control for admins.

Sign-in flows

Role-aware login for admins and consumers.