Core Concepts
This page explains the ideas that make 3y3anaa more than a star-rating widget: the Trust Score, the Reviews = Complaints model, the subject types it can reason about, the verification signals that anchor trust, and how it handles Google reviews as a reference-only external signal.
Trust Score (0–100)
Every business carries a single Trust Score from 0 to 100. It is a weighted composite of five components — designed to be hard to game and easy to explain. The component breakdown is always stored on the business and surfaced for transparency (no black box).
| Component | Weight | Max points | What it measures |
|---|---|---|---|
| Community Review Quality | 30% | 30 | Credibility-weighted ratings, review quality, volume, verified-experience ratio |
| Business Responsiveness | 20% | 20 | Response rate to complaints + response speed |
| Resolution Track Record | 20% | 20 | Share of complaints actually resolved (penalised for disputed/unresolved) |
| Verification Signals | 15% | 15 | Phone, location, Ghana registration, claimed status |
| External Signals | 15% | 15 | Google Places rating (reference-only, never merged) |
A brand-new business starts at a neutral 50 — not penalised for having no history. Components with no data (no reviews, no complaints, no external link) contribute a neutral mid-value rather than zero, so absence of data is never mistaken for bad data.
How each component scores
Community Review Quality (0–30). Combines a credibility-weighted average
rating (40%), average review quality score (30%), review volume on a logarithmic
scale (20%), and the verified-experience ratio (10%). Each review’s weight is
0.5 + (reviewerCredibility / 100), so trusted reviewers count more and
shadow-weighted reviews are excluded entirely.
Business Responsiveness (0–20). Response rate to complaints (60%) plus response speed (40%): under 24h is full marks, ~72h is half, a week or more trends to zero. No complaints ⇒ neutral.
Resolution Track Record (0–20). Driven by the resolution rate, with penalties
for disputed and unresolved complaints.
Verification Signals (0–15). Additive: phone +3, location +3, Ghana
business registration +5, claimed status +4.
External Signals (0–15). Derived from a cached Google rating (rating 80% + volume 20%). Reference-only — see Google reviews.
Only the server can write trustScore and trustBreakdown; the frontend is
blocked from setting them.
Reviews = Complaints
3y3anaa unifies reviews and complaints. A negative review is a complaint, and the business is expected to respond in the open.
- A complaint severity is inferred from the rating and text:
none(4–5★) ·low(3★) · thenlow/medium/high/criticalfor 1–2★, escalating on keywords like fraud, scam, food poisoning, dangerous. - Complaints carry a resolution status that drives the lifecycle:
pending → responded → in_progress → resolved
└→ unresolved → disputed- The business responds publicly; the review author later confirms whether the issue was resolved or unresolved.
- History is immutable. Reviews and responses are an audit trail. Authors may delete their own review only within 24 hours; after that, removal goes through support/moderation — never a silent edit.
Resolution is what feeds the Resolution Track Record component. Responding fast and actually fixing the problem is the highest-leverage way for a business to raise its score.
Subject types
A review always targets a subject, identified by subjectType + externalId.
The canonical Duabalabs subject types:
| Subject type | Example | Typically reviewed by |
|---|---|---|
product | A Sellub catalog item | buyers (verified purchase) |
shop | A seller’s storefront | buyers |
supplier | A wholesale supplier | sellers |
courier | A delivery rider/partner | sellers / buyers |
business | A listed business (BBB core) | clients |
artisan | A tradesperson | businesses / clients |
client | A customer | artisans / businesses |
The subjectType field is an open union — any string is accepted by the
store — but these are the typed, canonical values.
The “proxyfidelity” model
artisan, business, and client can each be both a subject and a
reviewer. That lets any party rate any other party they transact with:
- a client reviews a business,
- a business reviews an artisan it hired,
- an artisan reviews a client.
Each reviewer carries a role (e.g. buyer, seller, client, artisan,
business, courier). 3y3anaa surfaces the whole network’s reviews for a
subject — across every integrated app — on that subject’s profile.
Verification signals
Trust starts with knowing who is behind a listing. 3y3anaa supports a layered verification model, each layer adding to the Verification Signals component:
| Signal | How it’s earned | Trust points |
|---|---|---|
| Phone verified | SMS code during claim (6-digit, 15-min expiry, 3 attempts) | +3 |
| Location verified | Confirmed during admin-reviewed claim | +3 |
| Ghana registration | Registration number + document, reviewed in 3–5 business days | +5 |
| Claimed | An owner claimed the listing | +4 |
Verification flags can never be set directly from the frontend or by the
business owner. They’re written only by the verification cloud functions after a
real check. A searchBusinesses result is marked verified only when phone
verification plus at least one of location/registration is present.
A business is also claimed when an owner takes it over (see For Businesses). Claiming unlocks the ability to respond to reviews and request higher-trust verification.
Reviewer credibility
Every reviewer has a credibility score (0–100, starting at 50). It rises with review volume, helpful votes, account age, varied (non-uniform) ratings, and verified purchases — and falls with reports and rejected reviews. Credibility ≥ 70 marks a reviewer trusted. Because Community Review Quality is credibility-weighted, a trusted reviewer’s verdict counts for more, and a suspicious account’s counts for less.
Google reviews (reference only)
3y3anaa can display a Google rating to avoid an “empty site” at launch, but treats it as an external reference signal — never a substitute for community data. The rules are non-negotiable (Google Places ToS):
- Pulled via the official Google Places API (New) only — never scraped.
- Cached 15–60 minutes (default 30), then dropped. Review text is never stored permanently.
- Always labeled and attributed to Google with a “View on Google Maps” link.
- Never merged with community reviews and never interactive.
- Linked only to claimed businesses by default (a cost-control gate).
$0 by design. Google “reviews” calls hit a SKU with a free allotment of 1,000 calls/month. 3y3anaa caps usage at the free tier; once exhausted it serves a free reference-only “View on Google” card for the rest of the month.