Build progress

What works today

Every MVP module, item by item, with links to the working screens in the demo agency.

84%

of planned MVP items are done

48 done0 in progress9 planned

Foundation

Done

Multi-tenant core: agencies, people and roles, the inventory every sale points at, and Ethiopian locale basics.

  • Tenant table, tenant_id on every row, Postgres row-level security
  • Tenant from subdomain (<agency>.realtors.et) or X-Tenant header
  • Platform super-admin: create tenants, impersonate (API)
  • Roles: Owner/Admin, Sales manager, Supervisor, Rep, Freelancer, Finance
  • Org tree via supervisor_id drives visibility
  • Email/password login (web), Telegram login stub with initData verification
  • Developers, bank accounts, sites, blocks, units, payment plans, agreements: CRUD API
  • CSV import for units (all-or-nothing, per-line errors)
  • Money as NUMERIC(16,2) ETB, serialized as exact strings
  • Ethiopian calendar beside Gregorian, Africa/Addis_Ababa time
  • Amharic / English UI scaffold
  • +251 phone normalization
  • Admin screens to edit inventory (forms)
  • Platform console screen, billing
  • Audit log

Check-in

In progress

Geo-fenced check-in ported from Worthy, with rules per tenant. Every attempt is stored with its reason.

  • Haversine geofence per site, HQ/branch flagged check-in only
  • Per-tenant cutoff in Addis time; reasons geo_fail / time_fail / role_fail
  • Tap debounce, 1/hour per field site, 1/day at HQ
  • Supervisors see their team's failures as well as successes
  • Telegram mini app screen
  • Leave requests, Ethiopian holiday calendar, derived attendance
  • GPS spoofing guard (mock location, impossible speed, repeat coordinates)

Leads & Sales orders

Done

Worthy's lead flow with an append-only timeline and duplicate-buyer detection; sales orders that reserve a unit and freeze rates.

  • Leads: new → follow-up → appointment → site show → closed, forward-only
  • Append-only timeline (database trigger), ascending / descending
  • Sources: Telegram, TikTok, walk-in, referral, diaspora, Facebook
  • Duplicate buyer detection by +251 phone across the agency
  • Visibility and reassignment by org tree
  • Site shows verified by a geo check-in at the site
  • Sales order from a lead: unit reserved with hold expiry, plan copied and editable
  • Partners with shares totalling 100%
  • Approval by supervisor (own team) or manager; reject frees the unit
  • Finance attaches contract and confirms: price, plan, partners and rates frozen
  • Transfer to a new buyer with history kept; unit history
  • Active / completed driven by verified installments

Collections

Done

Track installments the buyer pays the developer and prove they arrived. Only verified money counts.

  • Installment schedule from the frozen plan (EC + Gregorian due dates, rounding on the last line)
  • Construction-stage lines become due when the site reaches the stage
  • Record payments: bank / Telebirr, reference, slip photo, allocation across lines
  • Duplicate reference guard; finance verify / reject with reason
  • Upcoming / due / partially paid / paid / overdue with tenant grace period
  • Verified payments activate and complete orders
  • Monthly developer reconciliation (Gregorian or Ethiopian month) + CSV export
  • Reminder queue (7 days before, due today, overdue escalation)
  • Telegram delivery of reminders; buyer SMS

Commissions

Done

Ledger lines generated per verified installment: the agency's receivable from the developer plus every earner's payable.

  • Agency rate from developer agreement, frozen on the order at confirmation
  • Rep rate split by partner shares; supervisor and manager overrides stack
  • Spec worked example reproduced as a test (225,000 / 45,000 / 22,500 / 11,250)
  • Invoices to developers with VAT and withholding; mark received
  • Payables released when the agency is paid; payout runs with four-eyes approval
  • Open questions as tenant settings: basis, payable-after-receipt, transfers, own-sales overrides
  • Commission accelerators tied to KPI

KPI engine

Done

Scorecards per role on verified outcomes first and verified effort second, weighted by period.

  • Metric catalog computed from system evidence only (no self-reported calls)
  • Results / Book health / Conversion / Activity with daily, weekly, monthly weights
  • actual ÷ target capped at 120%; attendance and activity floors gate at 50%
  • Targets per person and period; ramp-up (50% / 75%), seasons (fasting, kiremt, diaspora peak), pace
  • Versioned scorecards per role (rep, supervisor, manager), frozen into closed periods
  • Leaderboards by cohort with streaks; at-risk flag after two weekly drops
  • Holiday calendar in working days; commission accelerators