Public Reactions

Collect anonymous thumbs-up and thumbs-down reactions on published rows with signed visitor identity, public tallies, and per-publication controls.

Overview

Description

Public Reactions add lightweight visitor feedback to rows served through a Dotabase publication. A publication can enable reactions, after which anonymous visitors may cast or toggle an up/down reaction, retract it, and fetch the public tally. The API issues a signed visitor cookie and stores a coarse IP hash for abuse controls without requiring a Dots account.

Every operation first resolves the public slug and row through the publication visibility gate. Unknown publications, unpublished rows, rows outside published views, disabled reactions, and resolver faults all return the same non-disclosing not-found result. Tally reads are cache-friendly, while writes are uncached and enrolled in the public per-IP write bucket.

Selling Points

  • Adds immediate audience signal to published knowledge without forcing visitors through account creation.
  • Keeps reaction controls tied to each publication, so owners decide where engagement belongs.
  • Returns simple public tallies suitable for roadmap voting, feedback, and content usefulness indicators.
  • Uses signed visitor identity and rate limits to reduce trivial repeat abuse while preserving low-friction participation.
  • Shares the publication’s fail-closed visibility boundary, preventing reactions from becoming a probe for hidden rows.

User Story

A team publishes a roadmap Dotabase and enables reactions. A visitor opens one roadmap item, clicks thumbs up, and immediately sees the updated tally. Clicking again toggles the vote off, while retract removes it explicitly. The team gets aggregate interest data without exposing internal user or tenant identifiers.

Extension Surface

This feature is configurable. Publication owners enable or disable the reactions engagement flag, and packages/api/src/routes/reactions.ts exposes cast, retract, and tally operations. The allowed reaction roster is the shipped thumbs-up/thumbs-down contract; external clients can automate it but cannot register new reaction kinds or replace visitor identity behavior.

Capabilities & Limits

  • Casts, toggles, retracts, and tallies up/down reactions for a published row.
  • Uses a signed visitor cookie plus coarse IP hashing and public write rate limits.
  • Emits cacheable public tallies with ETag handling.
  • Limit: reaction service requires deployment engagement secrets; unconfigured deployments return a clean unavailable response.
  • Limit: the mechanism reduces casual duplication but is not identity-verified polling.

Implementation Map

  • packages/api/src/routes/reactions.ts
  • packages/api/src/services/public-reactions-service.ts
  • packages/api/src/routes/public.ts
  • packages/api/src/middleware/rate-limit.ts

Properties

Property
Value
product
dots-platform
extensibility
configurable
module
Dotabases
packages
api
status
shipped
surface
api
summary
Collect anonymous thumbs-up and thumbs-down reactions on published rows with signed visitor identity, public tallies, and per-publication controls.

Connections

Public Reactions · Explore connections

  • requirestoPublish a Dotabase to the Web
  • implemented bytopackages/api/src/routes/public.ts
  • implemented bytopackages/api/src/middleware/rate-limit.ts
  • implemented bytopackages/api/src/routes/reactions.ts
  • implemented bytopackages/api/src/services/public-reactions-service.ts
  • complementsfromPublish a Dotabase to the Web
  • complementsfromPublic Feature Request Intake

Connected Records7

Complements
Implemented by
packages/api/src/middleware/rate-limit.ts
packages/api/src/routes/public.ts
packages/api/src/routes/reactions.ts
packages/api/src/services/public-reactions-service.ts
Requires
7 connections.