Bulletin board: per-row manage (edit / re-broadcast / delete) + local Block

Add inline management to the board for the connected viewer:

- On your own flyers: Edit (links to /?edit=1#<naddr>, which the main client
  now honors by loading the flyer straight into the editor), Re-broadcast
  (re-sends the already-signed event to all relays — no signing), and Delete
  (replaceable tombstone + NIP-09, signed via the device key or NIP-07; a
  pasted-nsec connection is pointed to the editor where the key is available).
- On flyers from others: Block — a per-device blocklist of author pubkeys
  (voxvera_blocked_pubkeys) that always hides them, with a "Clear blocked"
  control. This is roadmap #1's local blocklist direction.

The board hides tombstoned flyers (newest-version-wins so a delete can't be
undone by an older copy). New non-sortable actions column; a board delete-
confirm modal; 12 new strings × 14 languages. Adds e2e for block (hide/persist/
clear), own-vs-other actions, and board delete (tombstone + NIP-09 published),
plus a ?edit=1 deep link. 234 e2e across all six engines; docs updated.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
thePR0M3TH3ANandClaude Opus 4.8 committed 2026-06-10 20:06:07 -04:00
1 parent 9b03ada43a
commit 73c28f31ec
9 files changed
+394 -25

No files matched your search

+9
View File
@@ -276,6 +276,15 @@ de-duplicated per author+`d` identifier, keeping the latest.
link).
- The npub column is forward-looking — anonymous keys today, but a stable
identity per author maps cleanly onto this view later.
- **Per-row actions.** On flyers the connected viewer authored, the board shows
**Edit** (a link to `/?edit=1#<naddr>`, which loads the flyer in the editor),
**Re-broadcast** (re-sends the already-signed event to all relays — no signing
needed), and **Delete** (tombstone + NIP-09; the board signs via the device
key or NIP-07, and for a pasted-nsec connection it points to the editor). On
flyers from others it shows **Block** — a per-device blocklist of author
pubkeys (`voxvera_blocked_pubkeys`) that always hides them, with a "Clear
blocked" control. The blocklist is local "hide this," separate from the
web-of-trust filter (roadmap #1).
The login gate (Phase 1) and the web-of-trust filter (Phase 2) are in place.
Remaining gaps — degree-2 trust, a blocklist/report flow, NIP-05 badges, and
+8 -2
View File
@@ -25,7 +25,12 @@ The trust model (#1–#2) has moved from undefined to implemented:
loaded flyer (re-publish replaces in place via the `d` tag), re-publish as a
keep-alive, or delete it. Delete is belt-and-suspenders: a replaceable
**tombstone** (so the board/viewer hide it even on relays that ignore NIP-09)
plus a **NIP-09** deletion request. Best-effort, author-only.
plus a **NIP-09** deletion request. Best-effort, author-only. These actions are
available in the editor and inline on the bulletin board (Edit / Re-broadcast /
Delete on your own rows).
- **Local blocklist** — a per-device "Block" on the board hides flyers from any
author you didn't post (separate from the web-of-trust filter), with a clear
control. This is the local blocklist direction from #1.
All of the above is localized across the 14 languages and covered by the
cross-engine Playwright suite. **What remains** on #1–#2 is polish (degree-2
@@ -64,7 +69,8 @@ the single biggest liability for promoting the board publicly.
- Client-side curation: an allowlist of npubs (a "follows"/featured set) so the
default view shows only vetted authors.
- A local, user-controlled blocklist / "hide this" with `localStorage`
persistence (per-device, no server needed).
persistence (per-device, no server needed). **✅ Shipped** — the board's
per-row **Block** (`voxvera_blocked_pubkeys`).
- A dedicated VoxVera relay (or relay set) that applies its own admission
policy, with the public relays as fallback.
- A "report" affordance that records to a relay/list a curator can act on.