37 Commits
Author SHA1 Message Date
thePR0M3TH3ANandClaude Opus 4.8 610935ac03 Admin star badge on admin avatars across the app
Show a small gold "verified admin" star in the corner opposite the red
notification dot whenever a rendered profile belongs to a bitvid admin
(the super admin or a current list editor).

- adminBadge.js (new): isAdminActor(hex|npub) sync check against
  accessControl, and applyAdminStar(container, id) which adds/removes a
  single `.admin-star` in a non-clipped, positioned container. Idempotent.
- CSS: `.admin-star` (top-left gold disc, mirrors the top-right dot),
  `.dm-avatar-wrap`, and position:relative on the comment avatar wrapper.
- Profile button: app.refreshAdminStar() lights the logged-in user's star;
  re-runs on login/logout and on accessControl.onEditorsChange (so a
  late-loading editor list still resolves).
- Comments: star on comment-author avatars (commentNodeFactory).
- Channel page: wrap the clipped avatar and star the channel owner.
- DMs: Avatar gains an opt-in adminId — only admin avatars get wrapped so
  non-admin rows are byte-identical; ContactRow passes the peer pubkey.
- tests: admin-badge unit coverage (recognition, idempotency, removal).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-07 10:10:19 -04:00
thePR0M3TH3ANandClaude Opus 4.8 85903965a4 playlists(#37): FEATURE_PLAYLISTS flag + channel "Playlists" section
- constants.js: FEATURE_PLAYLISTS (default OFF) so nothing is user-visible until
  the whole playlist UI ships; flip to preview on unstable.
- js/channelPlaylists.js: wireChannelPlaylists(pubkey) fetches the creator's
  playlists (facade) and renders a responsive row of cards (thumbnail + video
  count + title) linking to `#view=playlist&pubkey=…&id=…`. Hidden when the flag
  is off, no playlists, or the container is missing; a nav-token guards against a
  stale fetch resolving after a channel switch. DOM built with textContent (no
  innerHTML). Kept out of the 5729-line-capped channelProfile.js.
- channelProfile.js: one-line wireChannelPlaylists(currentChannelHex) hook next
  to wireChannelZapTotal (no-op while the flag is off).
- views/channel-profile.html: #channelPlaylistsSection above the video grid.
- tailwind.source.css: .playlist-grid / .playlist-card* (token-only; responsive
  via @apply like .bv-grid-video).

Lint + build clean. The playlist view the cards link to lands next.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-06 13:12:37 -04:00
thePR0M3TH3ANandClaude Opus 4.8 cf82978060 zaps: profile-zap counting + channel "sats zapped" total (#47 — closes the feature)
The store now supports p: (profile/channel) pointers — every zap tagged to a
creator pubkey (direct profile zaps AND zaps to their videos, both carry a `p`
tag), from 9735 receipts + verified tallies:

- pointerKey accepts "p"; new profilePointer(pubkey) helper.
- runBatch batches p: pointers into a #p filter; both folds count #p-tagged
  events (deduped by payment_hash like a:/e:).
- Channel page: a "⚡ N sats zapped" total under the lightning address, wired
  to the store via js/channelZapTotal.js (own module for channelProfile.js's
  size budget), hidden until nonzero.

Completes the D2 video + profile scope; the bitvid-native zap tally feature is
now feature-complete (publish + count + chart + video + profile). Tests:
profilePointer/pointerKey + #p counting in tests/zap-totals.test.mjs. Lint
(size cap ok) + build green.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-05 00:36:44 -04:00
google-labs-jules[bot]andPR0M3TH3AN d0f0b3ee2e Fix: Add rel="noopener noreferrer" to target="_blank" link in channel profile
This commit addresses a security vulnerability in `views/channel-profile.html` where an external link with `target="_blank"` was missing `rel="noopener noreferrer"`. This could allow the target page to manipulate the `window.opener` object (reverse tabnabbing).

Changes:
- Added `rel="noopener noreferrer"` to the `#channelWebsite` anchor tag.

Verification:
- Confirmed the attribute is present using a Playwright verification script.
- Confirmed no visual regressions.
- Ran linting checks (passed).
- Ran unit tests (pre-existing unrelated failures in NIP compliance noted).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-26 17:30:59 +00:00
google-labs-jules[bot] ba28ceaf09 feat: add info popovers to feed views
- Added info buttons to Most Recent, Subscriptions, History, Channel Profile, Search, and Explore views
- Attached popovers with descriptions of feed filtration methods
- Used `attachFeedInfoPopover` helper for consistent implementation
- Verified with Playwright script (verified popover visibility and text content)
2026-01-21 20:59:11 +00:00
thePR0M3TH3AN 63a048f01d Remove channel notify button 2026-01-18 22:33:33 -05:00
thePR0M3TH3AN e7951f8004 Add channel notification and message buttons 2026-01-18 19:30:49 -05:00
google-labs-jules[bot] a5e7e48fea Fix lint:tailwind-brackets errors by using design tokens
Replaced arbitrary Tailwind values with standard design tokens in HTML files to pass the linting checks:
- `components/upload-modal.html`: Replaced `text-[10px]` with `text-4xs` (approx. 10.4px).
- `views/channel-profile.html`: Replaced `max-sm:text-[0.7rem]` with `max-sm:text-2xs` (0.7rem).
- `views/channel-profile.html`: Replaced `max-sm:h-[3.2rem]` and `max-sm:w-[3.2rem]` with `max-sm:h-12` and `max-sm:w-12` (standard 3rem/48px spacing).
2026-01-14 02:51:02 +00:00
thePR0M3TH3AN 5cc0e136bd Add channel header moderation badge 2025-10-25 20:54:12 -04:00
thePR0M3TH3AN a392fbd85b Restore desktop channel profile sizing 2025-10-19 22:30:53 -04:00
thePR0M3TH3AN 6739ed2285 Adjust channel header mobile sizing breakpoints 2025-10-19 22:23:55 -04:00
thePR0M3TH3AN 0114baedb4 Refine mobile channel profile sizing 2025-10-19 22:19:58 -04:00
thePR0M3TH3AN 7a45925e31 Reduce channel profile hero sizing on mobile 2025-10-19 22:15:24 -04:00
thePR0M3TH3AN 0aabb8c554 Split overlay gradients for header and channel 2025-10-19 13:49:25 -04:00
thePR0M3TH3AN cd966c28af Add gradient overlay for channel banner 2025-10-18 10:52:54 -04:00
thePR0M3TH3AN e40e55691c Use overlay banner token for channel profile 2025-10-18 10:09:25 -04:00
thePR0M3TH3AN 68df764790 Merge branch 'unstable' into codex/fix-theme-color-issues-on-channel-view 2025-10-18 10:05:12 -04:00
thePR0M3TH3AN 095c90d728 Themed action buttons for video controls 2025-10-18 09:44:16 -04:00
thePR0M3TH3AN 6396476220 Fix channel action icons for theme support 2025-10-17 23:47:05 -04:00
thePR0M3TH3AN 7594902f0b Handle channel banner load failures 2025-10-17 23:39:35 -04:00
thePR0M3TH3AN c6500d6b7a Improve channel banner sanitization 2025-10-17 10:03:50 -04:00
thePR0M3TH3AN 62a2694c23 Refactor channel profile popovers 2025-10-16 12:41:28 -04:00
thePR0M3TH3AN 3aafef72b7 Add layout width tokens and utilities 2025-10-14 16:48:29 -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 19d971b49d refactor: adopt tokenized color utilities 2025-10-11 12:59:37 -04:00
thePR0M3TH3AN badcfc6944 Refactor zap popovers and more menus 2025-10-10 22:52:58 -04:00
thePR0M3TH3AN a4e75392af Refine modal primitives for auth and zap flows 2025-10-10 22:40:55 -04:00
thePR0M3TH3AN 13cb9c44c1 Refine layout tokens and utilities 2025-10-10 13:48:39 -04:00
thePR0M3TH3AN 8fd5ce3c88 Darken zap dialog and add send control 2025-10-05 18:45:03 -04:00
thePR0M3TH3AN 0fd54abde8 Fix zap dialog positioning and gating 2025-10-05 18:24:32 -04:00
thePR0M3TH3AN ce94e2c411 Enhance channel zap flow with UI and metadata caching 2025-10-04 22:33:29 -04:00
thePR0M3TH3AN bd345f99d2 Fix channel overflow menu layout 2025-09-28 21:28:04 -04:00
thePR0M3TH3AN d39ed45c5a Add moderator blacklist controls to menus 2025-09-28 21:17:44 -04:00
thePR0M3TH3AN c1da7dbb39 Add zap button placeholder on channel profiles 2025-09-25 18:36:18 -04:00
Keep Creating Online 56b6bb988e added subscriptions 2025-02-09 19:50:33 -05:00
thePR0M3TH3AN f9d81ecb24 added channel/profile view 2025-02-09 14:51:20 -05:00