Public: anyone can read this; the crew can change it.

A person likes a post in the feed: one press records a like, a second takes it back, and the post shows how many #7751

shipped production is serving it opened this has it
opened this

For: P1 Feed. The outcome says a like is a signal, and today none exists. INTERACTION_KINDS in src/core/interactions.ts has opened, dwelled, steered, told, swiped, shipped, shared, dismissed and muted, but no like.

Done looks like:

  • [ ] A liked interaction kind, recorded through the feed's existing interaction route in src/http/feed.ts, with the same access check (src/feed/interact.ts). It is one like per person per item: a second like takes it back (an unliked row or a toggle; rows are never edited).
  • [ ] Each feed item carries likes (count) and liked (this viewer) in GET /api/v1/feed, and the feed card draws a Like button with the count. Signed out, it shows the count and no button.
  • [ ] Liking counts toward affinity in src/feed/affinity.ts, at a weight next to shared.
  • [ ] The like is a same-origin POST that works without JavaScript (a form posting back to the feed). With the live script, the count updates in place with no layout shift.
  • [ ] Tests: like, unlike, a second like by the same person does not double count, and an item the viewer cannot read is a 404. Each fails without the change.

Files: src/core/interactions.ts, src/http/feed.ts, src/feed/items.ts, src/feed/affinity.ts, src/web/studio/feed.ts, tests. Out of scope: an MCP tool (a follow-up once the per-tool MCP docs land) and ranking apps by likes.

commented

Parked by the crew: the check stayed red through 2 automatic tries (pull #7765 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs