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
Foundation
DoneMulti-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 progressGeo-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
DoneWorthy'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
DoneTrack 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
DoneLedger 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
DoneScorecards 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