Roadmap
P-002Shipped

Reactions on Journal and Register entries

End-to-end Support / Concern reactions on Journal and Register entries — Postgres schema with RLS, anonymous client tokens via httpOnly cookie, server actions, and an optimistic client widget.

Milestone
Pre-launch capture phase
Posted credit value
10credits
Founder credits accrued
10of 10
Owner
Creator
Related
Entry 015, G-036

What ships in this project

  • Postgres reactions table with entry_kind, entry_slug, kind enum (support / concern), user_id and client_token columns under XOR check, partial unique indexes, and RLS policies.
  • Anonymous client token stored in an httpOnly cookie (oln_anon_id, 1-year max-age) so anonymous reactions remain attributable to a single browser without identifying the user.
  • Server actions (reactAction, unreactAction) returning a discriminated ActionResult so the client widget can rollback on rejection and lock the UI for write-once anonymous reactions.
  • Client widget (ReactionButtons) with optimistic apply/rollback, retract on second click for registered users, and an aria-pressed selected state.
  • Mounted on /journal/[slug] and /register/[slug] for parity.

Why

Entry 015 commits to a reaction primitive in principle. This project implements the thin slice end-to-end so the priority signal exists before the roadmap surface needs it (Entry 016).

Open follow-ups

  • G-036 — operational parameters (anonymous-vs-registered weighting, cooldowns, abuse heuristics).
  • Aggregation views beyond per-entry counts (e.g., a "most reacted" surface).

Your read on this

Anonymous reactions are accepted; signing in lets you change yours.