---
name: comments-reactions
description: How comments and reactions work on shared pages.
---

# Comments and reactions

Every share carries a comments section and a row of reaction buttons below the body. Both are off-by-default-ish: they are present, but only signed-in users can post or react. Anonymous visitors see them and are redirected to sign in if they try to interact.

## Comments

Comments are flat. There is no threading. Each comment shows:

- The author's username, linking to their profile.
- A relative timestamp (e.g. "3 hours ago"), with the ISO timestamp on hover.
- The body, rendered as plain text (URLs are auto-linked; nothing else is parsed).
- A reaction bar under the comment.

### Posting

To post a comment, scroll below the share body, type into the textarea, click **Comment**. You must be signed in. An anonymous visitor clicking **Comment** is sent to `/auth/google`; after sign-in they land back on the share with the textarea preserved.

### What you can and can't do

- **Plain text only.** Markdown, HTML, and other formatting are not rendered. URLs are auto-linked.
- **No edits.** Posted comments are immutable.
- **No deletes.** A comment cannot be removed by its author or by the share owner. This is intentional for the first cohort — comment moderation is on the roadmap but not yet built.
- **No replies / threads.** The flat list is the whole model.

### Length

Comments are capped at 4,000 characters per body. Submitting a longer one returns a 400 with the validation error.

## Reactions

Reactions are six emoji buttons, available on:

- The **share itself**, in a bar between the body and the comments section.
- **Each comment**, immediately below the comment body.

The six emojis are: 👍 👎 😄 🎉 😕 ❤️.

### How it works

Click a button to add your reaction; click it again to remove it. The count on each button is the total across all signed-in users. The button has a pressed state when you have reacted with that emoji.

Reactions are signed-in only. Clicking a button as an anonymous visitor sends you to `/auth/google` with a return URL back to the share. After sign-in, the page reloads with you authed; click the button again.

A single user can react to a target with multiple emojis (e.g. both 👍 and ❤️), but only once per emoji per target.

### Where reactions appear

- **Share-level reactions** — between the share body and the comments section. One bar per share.
- **Comment-level reactions** — under each comment. One bar per comment.

The same client-side handler drives both bars.

## Disabling comments or reactions

There is no per-share toggle to disable comments or reactions today. Every share has both. A per-share opt-out is on the roadmap but not yet built.

## Next steps

- [Web dashboard](/docs/web) — where comments and reactions appear in the owner's view.
- [REST API](/docs/api) — `POST /api/v1/shares/:id/comments`, `POST /api/v1/reactions`.
