Skip to content

Marketing claims register

Every product claim the public site makes, checked against the code that has to back it, with the date it was checked.

Why this file exists. Over one review, three separate claims on ndakita_group_site were found to describe behaviour ndakita_build did not have. None were invented maliciously: each came from a summary of the roadmap that was rosier than the roadmap's own detail. Confidently-worded wrong copy is worse than the vague copy it replaces, and it is the kind of error nobody notices until a customer does.

How to use it. Before publishing a product claim, find it here or add it. If you cannot point at a file that implements it, do not ship the sentence. ndakita_build/docs/module-roadmap.md is the source of truth, and its detail is trustworthy where its prose summary is not.

Verified 2026-08-01

Claim on the site Backed by Notes
Per-project P&L, everything tagged to its project custom/overrides.py create_project_cost_centre Cost centre created on Project after_insert.
Each project gets its own stores, cost centre and books custom/overrides.py create_project_site_warehouses Includes a dedicated Cement store.
M-Pesa statement upload doctype/mpesa_import/mpesa_import.py PDF, CSV and Excel, with password support. The site previously understated this.
M-Pesa lines matched to supplier and project mpesa_import.py suggest_projects It suggests. Unmatched rows sit in Review Required.
M-Pesa entries reach the books mpesa_import.py post_transactions Throws unless every row has a confirmed project, then creates draft Journal Entries for Admin Finance to submit. Two human gates. Do not write "posts automatically".
Daily quota, achieved, pro-rated pay doctype/daily_output_log/daily_output_log.py 70% floor applies.
Labour pay as an M-Pesa payment sheet report/site_labour_performance/ A report whose worker_id column is the M-Pesa number. There is no integration pushing to M-Pesa bulk payment.
Reorder alerts custom/reorder_alert.py Built 2026-08-01 because the claim predated the code. Daily job, days-of-cover against real consumption plus static reorder level. Depends on the beat scheduler being enabled per tenant.
Inter-site transfers with a paper trail custom/overrides.py validate_site_transfer
Daily site reports with photos doctype/daily_site_report/, doctype/site_report_photo/ Foreman submits, Site PM validates, progress rolls onto the Project.
Purchase approval scripts/make_workflows.py, PO_APPROVAL_THRESHOLD Single approver level. Below the threshold a PO auto-approves. Never write "nothing gets bought without a signature".
QR asset register utils.asset_qr_svg, print_format/asset_tag_label/ Per-project Locations mean Asset Movement tracks between sites. A plain phone camera opens the asset.
Client document expiry warning scripts/make_notifications.py, fixtures/notification.json The only "Days Before" notification in the app: Client Document only, 30 days, email, to Admin Finance and Site PM. Document types are Title Deed, Council Approval, Contract, Drawing, ID/Registration, KRA, Other.
Customer records, contracts, leads pipeline tests/test_customer.py, test_contract.py, test_leads.py Contract is the lightweight base doctype.

Do not claim

Not shipped Where it actually is
A client-facing progress portal P9. Client View is a scoped desk role with read permission, not a portal.
Offline use, or an in-app QR scanner P9. The PWA v1 is a Foreman workspace on the installable desk PWA.
Multiple purchase approval levels One level. A second is an open question in the roadmap's §7.
Automatic posting of M-Pesa entries Drafts only, after per-row confirmation.
A pipe into M-Pesa bulk payment A report you export.

Standing cautions

  • App store copy is a claim too. "100% private and offline" was on Sub Scout and is falsifiable by one network call; it also has to match the Play Data Safety declaration. Serenity House claimed "works offline" over a feature list containing an AI guide. Both are now scoped.
  • Pricing is stated in Terms of Service §4 and on /build. The two must agree, and the setup fee is deliberately never published as a figure.
  • The comparison page states that its figures are first-year totals including implementation. Ndakita Build's row is subscription only, because onboarding is quoted per client, and that exception is disclosed on the page and on the row. Changing one without the other makes our own product look cheaper than the rule allows.