Merge branch 'main' into pins-api

* main: (127 commits)
  Align board name start so it doesn't get too big
  Clean up card/events header layout
  Sync email to Stripe when user changes email address (#2432)
  Fix IDOR in webhook activation endpoint (#2431)
  Add card reactions to API docs and reactions_url to card JSON (#2427)
  Remove unnecessary claude plan
  Allow boosts on cards (#2411)
  Revert "Fix notification click URL by using correct data property"
  Add migration to remove draft cards from search index
  Guard search indexing with searchable? check
  Forbid comments on draft cards
  prefactor: update search to use published cards
  Fix notification click URL by using correct data property
  Wait for service worker to be active before subscribing
  Fix stuck state when permission granted but no subscription
  Extract Card::Commentable
  Include arm64 build in Docker workflow
  Remove unnecessary `await` in push handler
  Correctly initialise WebPush connection (#2417)
  Update models, views, and fixtures for polymorphic reactions
  ...
This commit is contained in:
Denis Švara
2026-01-27 15:37:47 +01:00
188 changed files with 2248 additions and 467 deletions
+63 -2
View File
@@ -553,7 +553,8 @@ __Response:__
"created_at": "2025-12-05T19:36:35.401Z",
"url": "http://fizzy.localhost:3006/897362094/users/03f5v9zjw7pz8717a4no1h8a7"
},
"comments_url": "http://fizzy.localhost:3006/897362094/cards/4/comments"
"comments_url": "http://fizzy.localhost:3006/897362094/cards/4/comments",
"reactions_url": "http://fizzy.localhost:3006/897362094/cards/4/reactions"
},
]
```
@@ -614,6 +615,7 @@ __Response:__
"url": "http://fizzy.localhost:3006/897362094/users/03f5v9zjw7pz8717a4no1h8a7"
},
"comments_url": "http://fizzy.localhost:3006/897362094/cards/4/comments",
"reactions_url": "http://fizzy.localhost:3006/897362094/cards/4/reactions",
"steps": [
{
"id": "03f8huu0sog76g3s975963b5e",
@@ -1001,7 +1003,66 @@ __Response:__
Returns `204 No Content` on success.
## Reactions
## Card Reactions (Boosts)
Card reactions (also called "boosts") let users add short responses directly to cards. These are limited to 16 characters.
### `GET /:account_slug/cards/:card_number/reactions`
Returns a list of reactions on a card.
__Response:__
```json
[
{
"id": "03f5v9zo9qlcwwpyc0ascnikz",
"content": "👍",
"reacter": {
"id": "03f5v9zjw7pz8717a4no1h8a7",
"name": "David Heinemeier Hansson",
"role": "owner",
"active": true,
"email_address": "david@example.com",
"created_at": "2025-12-05T19:36:35.401Z",
"url": "http://fizzy.localhost:3006/897362094/users/03f5v9zjw7pz8717a4no1h8a7"
},
"url": "http://fizzy.localhost:3006/897362094/cards/3/reactions/03f5v9zo9qlcwwpyc0ascnikz"
}
]
```
### `POST /:account_slug/cards/:card_number/reactions`
Adds a reaction (boost) to a card.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content` | string | Yes | The reaction text (max 16 characters) |
__Request:__
```json
{
"reaction": {
"content": "Great 👍"
}
}
```
__Response:__
Returns `201 Created` on success.
### `DELETE /:account_slug/cards/:card_number/reactions/:reaction_id`
Removes your reaction from a card. Only the reaction creator can remove their own reactions.
__Response:__
Returns `204 No Content` on success.
## Comment Reactions
Reactions are short (16-character max) responses to comments.