Activities: keywords/tags field on event creation (publish as NIP-52 't' tags) #108

Open
opened 2026-06-16 09:45:55 +00:00 by padreug · 0 comments
Owner

From the 2026-06-10 design review ("add keywords field so hosters can add").

Goal

Let hosts add free-text keywords when creating an event. Keywords should publish as NIP-52 t (hashtag) tags so they're filterable (#t) and surface in fuzzy search (the search index already weights tags, and the detail page already renders event.tags.slice(1)).

Why it's not a client-only change

Creation delegates to the aiolabs/events extension (POST /events/api/v1/events). CreateEventRequest only carries categories?: string[] — the backend maps those to t tags. There is no free-text keyword/tag field on the endpoint, and the webapp does not build the calendar event itself. Folding keywords into categories would break category filtering (categories are a constrained EventCategory enum).

Proposed fix

  1. aiolabs/events backend: add keywords?: string[] to the event create/update endpoint and publish each as an additional t tag (alongside the category-derived ones).
  2. Webapp: add a chip/tag input to CreateEventDialog.vue that sends eventData.keywords. Display + search already handle t tags, so no further frontend work.
  • #21 (category badge shows non-category hashtags) — relevant to how t tags are split between categories and free keywords on display.

Deferred from the ui-tweaks-2 round: discovered during implementation that the events extension endpoint has no keyword field, so it can't ship as a webapp-only change.

From the 2026-06-10 design review ("add keywords field so hosters can add"). ## Goal Let hosts add free-text keywords when creating an event. Keywords should publish as NIP-52 `t` (hashtag) tags so they're filterable (`#t`) and surface in fuzzy search (the search index already weights `tags`, and the detail page already renders `event.tags.slice(1)`). ## Why it's not a client-only change Creation delegates to the `aiolabs/events` extension (`POST /events/api/v1/events`). `CreateEventRequest` only carries `categories?: string[]` — the backend maps those to `t` tags. There is **no** free-text keyword/tag field on the endpoint, and the webapp does not build the calendar event itself. Folding keywords into `categories` would break category filtering (categories are a constrained `EventCategory` enum). ## Proposed fix 1. `aiolabs/events` backend: add `keywords?: string[]` to the event create/update endpoint and publish each as an additional `t` tag (alongside the category-derived ones). 2. Webapp: add a chip/tag input to `CreateEventDialog.vue` that sends `eventData.keywords`. Display + search already handle `t` tags, so no further frontend work. ## Related - #21 (category badge shows non-category hashtags) — relevant to how `t` tags are split between categories and free keywords on display. _Deferred from the ui-tweaks-2 round: discovered during implementation that the events extension endpoint has no keyword field, so it can't ship as a webapp-only change._
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
aiolabs/webapp#108
No description provided.