All projects

Case study

MarketplaceFull-StackCloud & Automation

Vestafi

A members' club where Ugandans co-own income-producing apartments from 1,000,000 UGX.

Vestafi cover image

Property is sold in one indivisible lump, and that lump costs more than most people will ever have in the bank at once. Vestafi breaks the lump. Vetted members pool capital to co-own real, income-producing apartments in Uganda, earn their proportional share of monthly rent, and sell their stake to other members when they want out.

The problem

Most people in East Africa will never own an apartment, not for lack of savings, but because property sells in one indivisible lump. Capital is locked up for years, rental income means becoming a landlord, and there is no transparency on what a building actually earns.

My approach

A two-sided members' club: a vetted application and onboarding funnel, a wallet every shilling passes through, three ways to own, and an internal resale market for exits. Every financial decision routes through a real admin.

How it's built

Next.js and React with TanStack and typed server actions, over Supabase and PostgreSQL with Zod at the boundaries. Roughly 72,600 lines across 416 files and 211 reusable components. Wallet balances are enforced to always equal deposits minus investments minus withdrawals, and UGX is handled as whole shillings throughout, never floats.

Key features

  • Apartment marketplace with search, filters and sorting
  • Vault wallet for deposits, deployments and withdrawals
  • Monthly rent distribution, split by exact stake
  • Exit-window resale market with a 1.5% platform fee
  • Admin approval desk for every money movement
  • Broadcast composer with 6 audience segments
  • Referrals, 4 member ranks and 35 automated emails

Challenges & Solutions

  1. Ownership had to stay exact across primary purchases, monthly rent splits and secondary trades, with no member ever short-changed by rounding.

    Percentages are derived from actual amounts on every read rather than stored, and every split rounds down to the whole shilling so the platform never rounds in its own favour.

  2. A wallet holding real money can never drift, and no member could be allowed to see or reach an admin screen.

    The ledger invariant, where balance equals deposits minus investments minus withdrawals, is enforced rather than assumed. The member and admin worlds are strictly separated in the product.

  3. Membership fees, minimums and resale fees needed to change with the business, not with the release cycle.

    Every rule became an operational setting behind an admin panel, so the team adjusts the platform's economics instantly.

Results

  • 42screens across member, admin and public surfaces.
  • 84business operations over 25 tables, built by 7 contributors.
  • 3ownership products: Fractional, Live and Prime.

Implementation stack

Tech Stack

  • Frontend

    • Next.js
    • React
    • TypeScript
    • TanStack
  • Styling

    • TailwindCSS
    • ShadCN
  • Backend

    • Supabase
    • PostgreSQL
    • Zod
  • Messaging & Documents

    • Resend
    • pdf-lib
  • Analytics

    • PostHog
  • Build Tools

    • Turbopack