Competitive audit
Full-site audit of kweli.mukoko.com against the platforms we are
actually competing with — Trustpilot, Google Business Profile (GBP) /
Maps, Yelp, Foursquare, TripAdvisor, the legacy African directories
(Brabys, Yellosa, Yellow Pages Kenya/SA), and Jiji’s classifieds
encroachment. Four lenses: doing well, missing, bugs, and
steal. Audited July 2026 against the live codebase (branch
claude/claude-md-docs-n16yru) and current competitor feature sets.
The verdict in one paragraph
Section titled “The verdict in one paragraph”Kweli’s strategic position is genuinely unoccupied: no incumbent offers one canonical, claimable, verifiable page for every entity type (schools, NGOs, parks, government offices — not just businesses), a verification ladder that works without formal premises (GBP’s video-default verification requires signage and a till), a trust badge that travels across an ecosystem, African-language locales, or agent discoverability for African entities. But the execution today is far behind the position: the review loop is a disabled button, the browse hierarchy (city × category pages — the incumbents’ entire SEO engine) doesn’t exist, owners can’t edit their venues, and the verification product has no visible output because no entity carries a tier yet. The moat is real; the castle is scaffolding.
What we’re doing well
Section titled “What we’re doing well”- Any-entity canon. One canonical page per place — park, school, NGO, tech company — backed by the knowledge graph’s single-source-of-truth rule. Foursquare proved POI canonicalization is the durable asset; GBP still fights duplicate listings; nobody covers non-commercial entities. This is the core differentiator.
- A verification model built for African reality. The four-tier ladder (community/Terracotta → OTP/Cobalt → government/Gold → licensed/Tanzanite) with community vouching at tier 1 is the only model in the set that meets informal commerce (market stalls, home-based services) where it is.
- Portable trust. The kweli travels with the entity across the Mukoko ecosystem (nhimbe events, news, marketplace). Every incumbent’s badge is confined to its own surface.
- Agent readiness. OAuth discovery (RFC 9728/8414),
/auth.md, WebMCP tools. Only Yelp has anything comparable (its open-source MCP server) — and Yelp has no African data. - The technical spine. Server-component-first rendering (cheap on metered data), resilience/observability/rate-limiting primitives, architecture rules enforced by tests, Mzizi design-system contracts, real health probes, inline maps on every located venue.
- Sound trust posture by construction. Reads from a shared graph, writes through a platform API, verification decoupled from payment — the structural opposite of the “extortion” (Trustpilot/Yelp narratives) and “pay-to-rank” (TripAdvisor placements, directory pay-to-list) reputations that dog this industry.
The scoreboard
Section titled “The scoreboard”Condensed matrix (● strong ◐ partial ○ weak/none). “AfrDir” = legacy African directories composite.
| Capability | GBP | Yelp | Trustpilot | TripAdvisor | AfrDir | Jiji | Kweli today |
|---|---|---|---|---|---|---|---|
| Search + filters (city/category/open-now/price) | ● | ● | ○ | ● | ◐ | ● | ◐ (search, tags, city, nearest) |
| City × category landing pages (SEO engine) | — | ●● | ◐ | ●● | ◐ | ● | ○ none |
| Profile anatomy (photos/hours/menu/Q&A/posts/booking) | ● | ● | ○ | ● | ○ | ◐ | ◐ (thin: no hours/phone render, no Q&A/booking) |
| Reviews written by users | ● | ● | ● | ● | ○ | ◐ | ○ disabled button |
| Fake-review defense (published program) | ◐ | ● | ● | ●● | ○ | ○ | ○ (designed, not live) |
| Owner claim → verify | ◐ video-default | ◐ | ◐ domain | ◐ | pay≈verified | phone | ● 4-tier (no visible output yet) |
| Badge portable across ecosystem | ○ | ○ | ○ | ○ | ○ | ○ | ●● unique |
| Non-business entities | ◐ pins only | ○ | ○ | ◐ tourism | ○ | ○ | ●● unique |
| Owner dashboard + analytics | ● | ● | ● | ● | ○ | ● | ◐ (unreachable: roles empty) |
| Embeddable badge/review widget | ◐ | ◐ | ●● TrustBox | ● | ○ | ○ | ○ |
| Agent/MCP surface | ◐ Gemini-gated | ●● open MCP | ○ | ○ | ○ | ○ | ● WebMCP + discovery |
| African coverage/languages | ◐ / ○ | ○ | ○ | ◐ tourism | ◐ stale | ● / ○ | ● graph / ◐ (sn/nd routes serve English) |
What’s missing (table stakes, ranked by impact)
Section titled “What’s missing (table stakes, ranked by impact)”- Working reviews. The “Vibe Check” submit button is permanently
disabled and review bodies are mapped to
null— a review platform where nobody can review. The platform’s E2E block was lifted; the app never caught up. - The browse hierarchy.
/en/zw/harare/restaurantsdoes not exist. No country, region, or category pages at all — this is both the #1 discovery gap and the #1 SEO gap (city×category pages are how Yelp/TripAdvisor own the SERPs). The route plan, breadcrumb builders, and taxonomy service all exist as dead code. - Owner venue editing.
PATCH /api/venuesexists, but the only edit UI is a card telling owners to visit the abandonedbusiness.mukoko.com. Hours and phone can’t render anyway (bugs below). - A working new-user funnel. With
ALLOW_PERSON_AUTOPROVISION=false(the default), a fresh WorkOS sign-up loops forever between dashboard and login; the settings page shows no email/name. - Visible verification. No entity carries
bundu.verificationTieryet, so the badge — the product — renders nowhere. Backfilling even tier-1 for claimed/vouched entities would make the kweli visible. - Real i18n.
sn/ndroutes serve English; message files are orphaned; 40+ links hardcode/en; no language switcher renders. The African-languages differentiator is currently a URL prefix. - Retention primitives. No saved lists, no follow (subscribe is a “coming soon” orphan), no notifications, no user profile. Nothing brings a visitor back.
- Q&A and attributes. GBP’s accessibility/identity attributes (wheelchair access, women-owned) and community Q&A are cheap, high-trust profile modules nobody offers for Africa.
- Photos at scale. Most OSM-seeded venues have no imagery; upload exists but there’s no contribution prompt or mission loop.
- An embeddable kweli badge. Trustpilot’s TrustBox is its whole growth engine: businesses embed the widget, advertising the platform on their own sites and feeding SERP stars.
Bugs (broken today, verified in code)
Section titled “Bugs (broken today, verified in code)”Severity 1 — user-facing, every venue:
- JSON-LD
url/@idomits the locale segment → every venue’s structured-data URL 404s (lib/schema/bar.schema.ts:6). - Telephone never renders:
getVenueByIdhardcodesorganization: null, local_business: nullwhile the page reads only those; the doc’s realtelephoneis dropped. The call action is dead for all 1,567 venues. - Opening hours never render: the mapper hardcodes
opening_hours_text: nulleven though the seed writes OSM hours. - Sync buttons in the mobile nav and footer are shown to every visitor but require admin → guaranteed “Sync failed” toast; the admin Google-sync page 410s on every click.
Severity 2 — funnel and locale:
- New-user auth redirect loop (autoprovision default) — see above.
- Hardcoded
/enin 40+ links ejectssn/ndusers from their locale;BarCardlinks/en/bars/…from every locale. - WebMCP
open_venuenavigates by slug but the route only resolves by UUID → agent deep-links 404. There is no slug route at all. /verify?entity=filtersisActive: truestrictly, so places missing the flag 404 on cross-app deep links.
Severity 3 — trust and polish:
- SearchAction JSON-LD advertises
?q=which the home page ignores. - Breadcrumbs violate the no-Home doctrine and emit degenerate JSON-LD (three items pointing at the home URL).
- Default schema type
BarOrRestaurantis not a valid schema.org type. - The venue page
Promise.alls side-collection reads without per-section catches — one engagement-DB hiccup 500s the whole page. - Legacy
mukoko_tokenfallback decodes an unverified JWT and trusts itssubas a person UUID — an auth-bypass seam; the cookie path should be deleted, not kept as fallback. - Help page documents features that don’t exist (“Write a Review”
button); 404 page uses a beer icon; sitemap lists
sn/ndduplicates that canonicalize to/en; noloading.tsxanywhere.
What to steal (per competitor)
Section titled “What to steal (per competitor)”- Trustpilot → the TrustBox growth loop (build an embeddable kweli-badge widget), Bayesian time-decayed TrustScore so 3 reviews ≠ a 5.0, and publishing fake-review removal stats as marketing.
- GBP → the attribute system (wheelchair access, women-owned — map onto place sub-objects), free-forever owner tier as distribution, “What’s Happening” module (our blasts/events), Local Guides points/levels as the blueprint for ubuntu missions, and video-evidence UX ideas for tier-2/3 verification.
- Yelp → the agent stack: an open
/mcpendpoint for kweli.mukoko.com modeled onyelp-mcp(NL request in, NL answer + structured venue data out), aspect-level AI review insights, and response-quality badges that reward owner engagement, not payment. - TripAdvisor → the annual public Transparency Report (fraud
blocked, reviews removed) — a perfect ritual for a product named
“truth” — plus per-dimension sub-ratings (our
engagement.ratingsis already per-dimension) and community Q&A. - Foursquare → FSQ Open Source Places (100M POIs, Apache 2.0) as a conflation/seed source for African coverage beyond OSM, and check-in gamification mechanics.
- Jiji → the liquidity playbook: free listing, phone-number-light onboarding, WhatsApp-adjacent chat behavior, boosts that never gate baseline visibility.
- African directories → their surviving revenue insight: SMEs pay for presence services (site, WhatsApp setup, SEO). An honest “get verified + agent-discoverable” service tier monetizes the same demand without pay-to-rank.
The Africa whitespace (nobody serves this)
Section titled “The Africa whitespace (nobody serves this)”- Claimable, verifiable pages for the non-commercial entity universe (schools, clinics, NGOs, churches, government).
- Verification without formal premises — community vouching laddering to OTP/government/licensed.
- Trust that ports across surfaces (the kweli).
- Content-level local languages (sn/nd now; Swahili is the obvious 4th locale for KE/TZ).
- Low-data delivery: SSR-first, light pages, offline tolerance, USSD/SMS fallback for OTP verification.
- WhatsApp-first workflows — click-to-WhatsApp as a first-class profile action, claim/verify OTP over WhatsApp, review collection via WhatsApp links. GBP removed messaging in 2024; the seat is empty.
- Mobile-money attributes — “accepts EcoCash / M-Pesa / MoMo” as
structured data (
commerce.paymentAccepted), later deposits via the wallet schema. - Agent discoverability for African entities — as assistants become the front door, African venues are invisible to them today.
- Documented honest monetization: “verification ≠ payment, ranking ≠ payment,” backed by a transparency report.
Priority order
Section titled “Priority order”P0 — make the core loop real: review submission + plaintext bodies; fix telephone/hours/JSON-LD-URL mappers; kill the visitor-facing sync buttons and the 410 sync page; fix the autoprovision funnel loop.
P1 — build the engine: the [country]/[region]/[category]/[slug]
browse hierarchy with slug routes and 301s from /bars/[id]; owner
venue editing on the existing PATCH API; backfill tier-1 verification
so badges render; real i18n (locale-aware links + rendered switcher).
P2 — compound the moat: WhatsApp CTA + mobile-money attributes;
embeddable kweli badge; Q&A + attributes; kweli.mukoko.com/mcp
modeled on this docs site’s endpoint; saved lists/follows; transparency
report; FSQ OS Places conflation for coverage beyond Zimbabwe.
Biggest external threats: Google Maps’ Gemini layer passively improving African coverage, and Jiji/WhatsApp absorbing the “just find me a business” job informally. Both are beatable only by owning what they structurally can’t: verified identity for every entity type, in local languages, portable across an ecosystem.