3y3anaa — The Review / Trust Engine
The trust backbone for the entire Duaba ecosystem.
3y3anaa (Akan “Ɛyɛ anaa” — “is it good?”) is Ghana’s trust infrastructure: a centralized Better Business Bureau for the local economy and the shared reviews & trust layer that every Duaba app plugs into. Where Sellub handles commerce and DPS handles hosting, 3y3anaa answers a single question for any subject in the ecosystem — can this be trusted?
What it does
3y3anaa collects and curates reviews, complaints, and verification signals about businesses and the people/things they transact with, then distills them into a single, transparent Trust Score. It is multi-tenant: any Duaba app (and any future Duaba app) can read and write reviews through a shared SDK while keeping its data namespaced to its own app.
Subject types it can review:
- product, shop, supplier, courier, business, artisan, client
The artisan / business / client triple is the “proxyfidelity” model: each can be both a subject (reviewed) and a reviewer, so any party can rate any other party they transact with.
Find your way around
Trust Score, Reviews = Complaints, subject types, verification & Google handling.
Core ConceptsSearch businesses, read trust scores, submit a review, track resolution.
For ReviewersClaim a profile, verify, respond to complaints, build trust.
For Businesses@duabalabs/reviews-sdk — the shared reviews client every app integrates with.
Trust Score (0–100)
The Trust Score is a composite designed to be hard to game and easy to explain:
| Component | Weight | What it measures |
|---|---|---|
| Community Review Quality | 30% | Quality and credibility of community reviews |
| Business Responsiveness | 20% | How well a business responds to complaints |
| Resolution Track Record | 20% | Whether raised issues actually get resolved |
| Verification Signals | 15% | Phone, location, and business-registration verification |
| External Signals | 15% | Google Places (reference-only, never merged) |
See Core Concepts for the full breakdown of how the Trust Score is calculated.
”Reviews = Complaints” model
3y3anaa treats low-star reviews as complaints the business is expected to respond to publicly:
- 1–2 star reviews are complaints. The business can (and should) respond in the open.
- Resolution is tracked. A complaint moves through its lifecycle and that history feeds the Resolution Track Record component of the Trust Score.
- History is immutable. Reviews and responses form an audit trail — nothing is silently rewritten or deleted.
Business verification
Trust starts with knowing who’s behind a listing:
- Phone verification via SMS.
- Location verification.
- Ghana business registration verification.
- Claim-business flow so owners can take over an existing listing.
- Verification badges surfaced on the profile.
Ghana-aware anti-abuse
Review systems are only as good as their defences against manipulation. 3y3anaa ships abuse controls tuned for the local market:
- SIM-abuse detection — catches networks of low-cost SIMs used to spam.
- Paid-campaign / burst detection — flags suspicious spikes.
- Self-review prevention and duplicate-text detection.
- Velocity limits — 3/hour, 10/day, 25/week per reviewer.
- Reviewer credibility scoring — weights reviews by author trustworthiness.
- Shadow-weighting — reduces the impact of suspect reviews without censoring them, preserving transparency.
Google reviews (reference only)
3y3anaa can show Google ratings, but treats them as an external signal, never a substitute for community data:
- Pulled via the official Google Places API only.
- Cached 15–60 minutes maximum.
- Always labeled “From Google” and never merged with community reviews.
Multi-tenant reviews platform
3y3anaa is built so any Duaba app can use it as its review backend. The central model:
| Class | Purpose |
|---|---|
AppCredential | Per-app key + scopes; provisioned server-side. |
ReviewSubject | A reviewable entity, namespaced by app. |
AppReview | A review tied to a subject. One review per (sourceApp, subjectType, externalId, author). |
Any app calls createReviewsClient() with its own key & scopes through the SDK and gets a scoped, namespaced view of reviews.
Architecture
| Layer | Tech |
|---|---|
| Backend | Parse Server 9 + MongoDB |
| Frontend | Next.js 14 + Ant Design |
| SDK | @duabalabs/reviews-sdk — framework-agnostic, server-side, fetch-based, ships CJS + ESM |
How it connects to the ecosystem
Sellub consumes the reviews SDK. Sellub configures it via:
THREEYANAA_API_URL— the 3y3anaa API endpoint.THREEYANAA_PARSE_APP_ID— the Parse Application Id.THREEYANAA_APP_KEY— Sellub’s app credential (secret).
With this in place:
- The storefront shows verified-purchase-gated product reviews and shop reviews.
- The dashboard will surface supplier and courier reviews.
Sellub’s app credential is provisioned server-side, e.g.:
await provisionAppCredential({
appName: 'sellub',
scopes: ['product', 'shop', 'supplier', 'courier'],
});Future Duaba apps onboard the exact same way — request an AppCredential with the scopes they need, then call createReviewsClient().
Source repos
duabalabs/3y3anaa— umbrella submoduleduabalabs/3y3anaa-server— Parse Server 9 + MongoDB backendduabalabs/3y3anaa-app— Next.js 14 + Ant Design frontend@duabalabs/reviews-sdk— framework-agnostic reviews SDK
Status
Production-ready. Backend tsc is clean, the app builds, and the SDK is ready to publish.