Zvessa docs

Reviews and ratings

Star ratings with words and photos about anything: services, products, places, games, mini-apps, people, a collection's records. Part of the Spaces engine. Code: convex/kits/reviews/ (server and settings), src/kits/reviews/ (blocks), tests in tests/reviews.test.ts.

A board is a setting #

blueprint.reviews is an object of review boards by id. The Reviews kit adds board reviews; the AI or the owner can add more (a menu board and a staff board).

"reviews": {
  "reviews": {
    "name": "Reviews",
    "subjects": [{ "id": "cut", "name": "Haircut" }, { "id": "colour", "name": "Colour" }],
    "aspects": [{ "id": "value", "name": "Value" }, { "id": "friendly", "name": "Friendly" }],
    "writers": ["member", "visitor"],
    "verified": ["booked", "badge:verified"],
    "managers": false,
    "photos": 4
  }
}
SettingWhat it doesDefault
nameThe board's namerequired
scaleStars, 3 to 105
iconWhat a star is: an emoji (★ ❤️ 🔥) or an icon name★
subjectsThings to pick when writing: [{ id, name, about? }]none
subjectsFromA collection whose records are the things to review (record:<id>)none
aspectsUp to 6 parts rated on their own: [{ id, name }]none
writersWho may write: role ids, member, level:<id>, level:<id>+, badge:<id>roles that can post or add
verifiedWhose reviews get the Verified mark: same tokens plus booked (has a booking here)none
managersWhether people who manage may review their own spacetrue
textoff, optional (stars alone are fine) or requiredoptional
minLength, maxLengthCharacters0, 2000
titlesA one-line titlefalse
photosPhotos per review, 0 to 104
approvalNew and edited reviews wait for someone who managesfalse
replyRolesWho may answer in public; [] = nobodypeople who manage
helpfulHelpful / not helpful votestrue
reportsReportingtrue
hideAfterReports before a review hides itself until checked3
perDayReviews one person may write per day on the board10
linksLinks in reviews (blocked by default: mostly spam)false
editPeople can change their reviewtrue

Every word is a setting: blueprint.words["reviews.<key>"] (keys in REVIEW_WORDS, convex/kits/reviews/model.ts).

Subjects #

Every review is about a subject, and each person writes one review per subject (writing again changes it). A subject is one of:

So putting reviews.stars with a new subject on a page is all it takes to make that thing reviewable. Anything else is refused, so nobody can fill the database with made-up subjects. People can't review themselves (@handle).

Blocks #

BlockWhat it shows
reviews.summaryAverage in big stars, count, a bar per star (tap to read those), aspect averages, Write a review
reviews.listReviews with sort (most helpful, newest, highest, lowest) and filters (stars, with photos, verified); your own first
reviews.starsA small ★ 4.6 (128) line that opens the reviews in a sheet; hidden until the first review unless empty is set
reviews.writeA "How was it?" card with stars to tap; shows your review once written
reviews.topThe board's subjects ranked by rating or by how many reviews
reviews.queueWaiting and reported reviews, to approve, hide or keep (people who manage only)

Inside every review: avatar and name, the Verified mark, stars, aspects, title, words (Read more), photos full screen, helpful votes, the owner's answer, report (spam, offensive, fake, off topic, something else), edit and delete your own, hide and approve for people who manage.

Who sees what #

AI tools (MCP, API keys, in-app AI) #

Boards, blocks and pages are built like everything else: add_kit reviews, or propose_change on /reviews and pages, approved by a person. Reading and acting on reviews are builder tools (convex/lib/capabilities/tools.ts, run in convex/capabilities/run.ts):

ToolScopeWhat it does
list_reviewsdata.readTotals and reviews of a board or subject; status live, pending, hidden or reported
answer_reviewdata.writeThe space's public answer under a review (empty takes it away)
moderate_reviewdata.writeapprove, hide or keep a review

All need the manage permission. There is no tool that writes a review on purpose: reviews come from people, so an AI or an API key can never fake one.

Light on the device #

Recipes #