31 Commits
Author SHA1 Message Date
thePR0M3TH3ANandClaude Opus 4.8 5eb7545a3f Submissions persistence: publish to nos.lol + admin re-broadcast mirror
Submissions are signed by throwaway ephemeral keys and public relays prune
events from pubkeys with no social graph, so the queue quietly evaporated.

- Forms: also publish to nos.lol (better retention, already in the app's
  query set) alongside snort/damus/primal.
- submissionFacade: on each fetch, re-broadcast the still-pending signed
  events back to our relays (publishEventToRelays) so pruning doesn't drop
  them. Best-effort, fire-and-forget — never blocks or fails the fetch;
  no-ops when no relay pool is available.
- test: fetch still returns the pending queue when a pool is present.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-07 15:48:48 -04:00
thePR0M3TH3ANandClaude Opus 4.8 2803f6b56f Submissions: labeled actions + real appeal-driven unblock
Make each admin action self-explanatory and give content appeals a real
effect instead of a dead-end "Dismiss".

- submissionsSection.js: per-type action sets, each button paired with a
  one-line description. Applications show Approve (adds to whitelist) / Deny;
  appeals that name a real event show "Approve & unblock" (removes the video
  from the event block list) / "Keep blocked"; other types show "Mark handled".
- submissionService.js: parse an appeal's `e` tag into targetEventId (trusted
  only when it's a well-formed 64-char hex id).
- iframe-content-appeals-form.html: add a required "Blocked video link or
  event ID" field; regex-validate + normalize a share link / nevent / note /
  hex to the hex event id, tag it as `e`, and include it in the body. Block
  submission when no valid reference is provided.
- CSS: stacked action + hint styling; iframe-form .form-hint.
- tests: cover targetEventId parsing (valid, malformed, absent).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-07 09:52:04 -04:00
thePR0M3TH3ANandClaude Opus 4.8 ba287a62be submissions(#23): forms tag ADMIN_SUPER_NPUB (fix admin tab showing nothing)
The forms hardcoded the maintainer's PUBLIC contact npub (npub13yarr7j… — the
blog/tip-jar/nostr persona, the old DM recipient) as the submission recipient,
but the admin Submissions tab queries submissions tagged to ADMIN_SUPER_NPUB
(npub15jnttpym…). Mismatch → the tab found nothing. Point all 5 forms' recipient
at ADMIN_SUPER_NPUB so submissions reach the admin whose tab lists them.

Lint + build clean.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-07 09:14:19 -04:00
thePR0M3TH3ANandClaude Opus 4.8 878f01b819 submissions(#23): forms publish structured kind-30083 instead of kind-4 DMs
All 5 iframe forms now publish a PUBLIC, structured bitvid submission (kind 30083)
from their ephemeral key instead of a NIP-04 encrypted kind-4 DM — so the admin
Submissions tab can list + approve/deny them.

- application → k=application (+ applicant = the required npub)
- bug-fix → k=bug, feedback → k=feedback, request → k=feature
  (each includes applicant only when the optional npub is filled in)
- content-appeals → k=appeal (no npub field)
Each tags ['d', <id>], ['k', <type>], ['p', <admin hex>], ['t','bitvid-submission'],
['client','bitvid']; the form body goes in plaintext content. The post-publish
verification subscription now watches kind 30083. No encryption anywhere.

Lint + build clean.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-06 20:44:34 -04:00
thePR0M3TH3ANandClaude Opus 4.8 e4e5c552c7 feat(forms): validate submitter npub on submission forms (#22)
The embed submission forms accepted any free-text identifier and published it,
so they were an easy spam vector. Add a shared, testable NIP-19 validator and
require a well-formed npub before a submission is sent.

- js/utils/validateNpub.js: validateNpubHex() decodes via nostr-tools nip19 and
  returns the 64-char hex pubkey, or null for anything that isn't a real npub
  (free text, wrong prefix, bad checksum, wrong NIP-19 entity). Also exposed as
  window.validateNpubHex for the classic iframe form scripts.
- Application form (required npub): submit is blocked unless valid; the decoded
  hex is written into the application body for canonical storage/matching.
- Feature-request / bug-fix / feedback (optional npub): stays optional, but a
  non-empty value must be a valid npub or submit is blocked with an inline error.
- Tests: tests/validate-npub.test.mjs (real nostr-tools, no implementation mirror).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-25 08:31:45 -04:00
thePR0M3TH3AN a697a1de5f Refactor iframe theme accent sync 2026-01-13 20:48:05 -05:00
thePR0M3TH3AN 3e160a5035 Update nostr-tools bundle to restore nip46 handshake 2025-10-22 07:18:25 -04:00
thePR0M3TH3AN 4d5de9f01d Sync iframe forms with theme overrides 2025-10-17 11:43:52 -04:00
thePR0M3TH3AN 2ba2bdbd28 Ensure iframe form applies instance accent overrides 2025-10-17 10:59:14 -04:00
thePR0M3TH3AN 3f8fc24577 Sync iframe accent overrides with parent theme 2025-10-17 10:50:55 -04:00
thePR0M3TH3AN 682e4a473c Sync iframe application form theme with parent 2025-10-17 10:45:09 -04:00
thePR0M3TH3AN cbf0bd34ee Add overlay root and design tokens 2025-10-16 10:30:07 -04:00
thePR0M3TH3AN 4d95a6415f Remove inline console fallbacks from static views 2025-10-15 15:42:24 -04:00
thePR0M3TH3AN b13104162d Add logger fallbacks for iframe forms and views 2025-10-15 15:22:42 -04:00
thePR0M3TH3AN d705cf176b Revert "Refactor logging to centralized logger" 2025-10-15 11:14:10 -04:00
thePR0M3TH3AN 37ba57aa37 Refactor logging to centralized logger 2025-10-15 11:11:14 -04:00
thePR0M3TH3AN 3f1238b5a9 Remove legacy CSS and enable design system by default 2025-10-12 06:58:50 -04:00
thePR0M3TH3AN 8265f9e2de Add design system feature flag and runtime integration 2025-10-11 16:11:43 -04:00
thePR0M3TH3AN 2153d3f74c Align iframe forms with design tokens 2025-10-10 23:17:27 -04:00
thePR0M3TH3AN 41b2b8fba6 Ensure modal stack stays above sidebar 2025-10-07 08:52:17 -04:00
thePR0M3TH3AN c0290b33a7 Merge branch 'unstable' into codex/fix-main-body-resizing-on-sidebar-change 2025-10-06 20:46:06 -04:00
thePR0M3TH3AN 79aa7f7669 Ensure sidebar state shifts app layout 2025-10-06 20:43:48 -04:00
thePR0M3TH3AN 25e53c08e3 Bump asset version for sidebar layout fix 2025-10-06 20:30:36 -04:00
thePR0M3TH3AN 8ad39b5cf6 Default sidebar to collapsed state by default 2025-10-06 20:06:43 -04:00
thePR0M3TH3AN b3b467755a Stabilize collapsed sidebar rail 2025-10-06 19:57:16 -04:00
thePR0M3TH3AN 957a3ae6fa Fix collapsed sidebar layout and cache busting 2025-10-06 18:58:54 -04:00
thePR0M3TH3AN 58fd6ef7d5 Tighten collapsed sidebar rail spacing 2025-10-06 17:46:02 -04:00
thePR0M3TH3AN 2bafecfb50 Refine sidebar collapse interactions 2025-10-06 17:08:35 -04:00
thePR0M3TH3AN f04c21004a Bust cached sidebar assets 2025-10-06 16:27:13 -04:00
thePR0M3TH3AN fa638e08a5 Align scrollbar styling across modals 2025-09-27 22:11:25 -04:00
Keep Creating Online b6b61e4e15 updated directory structure to fix root Service Worker issues and performance improvements 2025-02-05 16:54:40 -05:00