Commit Graph
410 Commits
Author SHA1 Message Date
thePR0M3TH3AN 56f2c1807c Implement worker-based NIP-04 DM sending 2026-01-19 08:39:43 -05:00
thePR0M3TH3AN ce396a1971 Add signing adapters and DM composer hook 2026-01-19 08:22:46 -05:00
thePR0M3TH3AN f9c351e157 Add notification center filters and grouping 2026-01-18 23:51:52 -05:00
thePR0M3TH3AN c70e17b9d0 Add DM controls to profile modal 2026-01-18 23:44:54 -05:00
thePR0M3TH3AN 9547a5b0e8 Add DM composer controls and status placeholders 2026-01-18 23:38:40 -05:00
thePR0M3TH3AN 11853037ec Add DM UI shell components 2026-01-18 23:27:29 -05:00
google-labs-jules[bot] 4ca984f673 refactor(ai): extract TagPreferenceMenu from js/app.js (agent)
Moved tag preference menu logic into `js/ui/tagPreferenceMenuController.js`.
Kept `js/app.js` interface intact via thin wrappers.
Added unit tests covering new controller.
Followed AGENTS.md refactor checklist.
2026-01-19 03:43:25 +00:00
google-labs-jules[bot] 5c65c44db3 feat: Remove hashtag pills from For You page
- Updated `For You` page to rely on feed engine filtering for tag preferences.
- Removed the `recentVideoTags` HTML element from `views/for-you.html`.
- Updated `js/app.js` and `js/ui/videoListViewController.js` to optionally skip finding the `recentVideoTags` element.
- Updated `loadForYouVideos` in `js/app.js` to explicitly skip `recentVideoTags`.
- Confirmed feed logic via `tests/feed-engine/tag-preference-filter.test.mjs`.
- Verified UI changes via Playwright.
2026-01-19 02:33:17 +00:00
thePR0M3TH3AN 1a715f9a45 Merge pull request #1340 from PR0M3TH3AN/ai/lint-20250222-8542702362424668840
chore(ai): apply formatting/lint autofixes
2026-01-18 20:42:55 -05:00
thePR0M3TH3AN d7116b08a6 Add for-you link resolution in app chrome 2026-01-18 20:10:33 -05:00
thePR0M3TH3AN 1e547bc49c Add direct message composer to profile modal 2026-01-18 19:48:43 -05:00
google-labs-jules[bot] 43bbc40c57 chore(ai): apply formatting/lint autofixes
- Fixed inline style violations in `js/ui/components/EventDetailsModal.js` and `js/ui/components/SimilarContentCard.js` by converting to Tailwind classes.
- Fixed Tailwind token violations in `components/login-modal.html`.
- Fixed Tailwind color violations in `js/ui/components/EventDetailsModal.js`.
- Formatted `README.md`.
- Updated CSS formatting in `css/tailwind.source.css`.
2026-01-18 20:58:09 +00:00
thePR0M3TH3AN 61c2b56838 Merge pull request #1336 from PR0M3TH3AN/edit-profile-modal-17464840854466078070
Add Edit Profile feature to Profile Modal
2026-01-18 14:39:27 -05:00
thePR0M3TH3AN 29b18103ac Add for-you feed telemetry events 2026-01-18 14:37:01 -05:00
google-labs-jules[bot] 4b6bb206ab Add Edit Profile feature to Profile Modal
- Added "Edit Profile" button to active profile card in profile modal
- Created `profilePaneEdit` with form fields for profile metadata (Kind 0)
- Implemented `populateEditPane`, `handleEditProfile`, `handleSaveProfile` in `ProfileModalController`
- Added file upload support for profile/banner images using `r2Service`
- Injected `r2Service` into `ProfileModalController` via `ApplicationBootstrap`
- Verified functionality with manual check of logic and structure
2026-01-18 19:36:47 +00:00
thePR0M3TH3AN dba666b751 Add for-you feed pipeline support 2026-01-18 14:02:35 -05:00
thePR0M3TH3AN 0ac64867da Add shared hashtag normalization helper 2026-01-18 13:35:34 -05:00
google-labs-jules[bot] 69e5a45af1 fix(ai): prevent race condition in login modal initialization (agent)
Removes a premature call to `initializeLoginModalController` in `ApplicationBootstrap` which was attempting to initialize the login modal before the DOM was fully hydrated, causing a "modal container not found" warning during startup. The modal is already correctly initialized later in `js/index.js` after markup loading completes.
2026-01-18 18:21:41 +00:00
thePR0M3TH3AN 52d2488d17 Refactor nostr signer access 2026-01-18 09:15:18 -05:00
google-labs-jules[bot] 45b20bb58e refactor(ai): extract updateTorrentStatus from js/app.js (agent)
Moved torrent status update logic to `js/ui/torrentStatusController.js` to improve separation of concerns as per `AGENTS.md`. The controller accepts a `getVideoModal` accessor and an `onRemovePoster` callback to decouple it from direct `videoModal` or `Application` dependencies. Added unit tests in `tests/ui/torrentStatusController.test.mjs`.
2026-01-18 03:11:25 +00:00
google-labs-jules[bot] b83f5009e4 I have updated the zap dialog to display the "Done" button on success.
I modified `js/channelProfile.js` to implement the logic that toggles the "Send" button to "Done" and closes the dialog when clicked. Additionally, I updated `js/ui/zapController.js` to prevent the form from resetting entirely on success, which preserves receipts; instead, it now manually clears the comment and sets the completed state.

These changes ensure consistent "Done" button behavior across both the Channel Profile and Video Modal zap interfaces. I also included minor `package.json` updates for linting dependencies.
2026-01-18 01:58:56 +00:00
thePR0M3TH3AN 827e99be6e Merge pull request #1272 from PR0M3TH3AN/nip46-ui-refactor-6379694737496943219
Refactor NIP-46 Login UI
2026-01-16 16:15:08 -05:00
google-labs-jules[bot] cf4c9171bb feat: reconstruct raw content in Event Details modal fallback
- Updated `EventDetailsModal` to handle cases where fetching the raw event fails or returns null.
- Implemented `getRawEvent` logic to reconstruct the `content` JSON string from available video metadata (title, thumbnail, description, etc.) if the raw content is missing.
- Ensures the user can inspect key metadata (like thumbnail URLs) even when the original signed event payload is not available in memory or via network fetch.
- Explicitly marks the signature as "unavailable (cached)" in fallback scenarios.
2026-01-16 20:57:39 +00:00
google-labs-jules[bot] a82c41edb9 feat: reconstruct raw content in Event Details modal fallback
- Updated `EventDetailsModal` to handle cases where fetching the raw event fails or returns null.
- Implemented `getRawEvent` logic to reconstruct the `content` JSON string from available video metadata (title, thumbnail, description, etc.) if the raw content is missing.
- Ensures the user can inspect key metadata (like thumbnail URLs) even when the original signed event payload is not available in memory or via network fetch.
- Explicitly marks the signature as "unavailable (cached)" in fallback scenarios.
2026-01-16 19:41:15 +00:00
google-labs-jules[bot] 4196a6bb42 Refactor NIP-46 login UI to be cleaner and QR-first
- Simplified `components/login-modal.html` to center the QR code and use a "Copy Link" button instead of a large textarea.
- Updated `js/ui/loginModalController.js` to support the new DOM structure and error handling.
- Added `docs/nip46-roadmap.md` to document current state and future features.
2026-01-16 19:40:46 +00:00
thePR0M3TH3AN 5c3230074e Add moderation override tracking by author and content 2026-01-16 13:50:32 -05:00
thePR0M3TH3AN e6f1d54bdb Merge pull request #1267 from PR0M3TH3AN/generic-storage-upload-modal-9485376532964213761
Generic Storage Support for Upload Modal
2026-01-16 10:49:57 -05:00
google-labs-jules[bot] 2b446e8ddd Refactor upload modal for generic storage and read-only config
- Updates Upload Modal UI labels to be provider-agnostic (e.g., 'Storage Credentials', 'Endpoint').
- Implements a read-only 'Summary View' for configured storage connections, collapsing the editable form by default.
- Adds 'Manage Storage' button that navigates to the Profile Modal's storage pane.
- Updates `initUploadModal.js` to inject the navigation callback.
- Updates `r2Service.js` status messages to be generic.
- Fixes unlock flow to ensure UI updates after storage unlock.
2026-01-16 15:44:22 +00:00
thePR0M3TH3AN b983661b41 Add seed-only moderation indicator 2026-01-16 10:26:21 -05:00
thePR0M3TH3AN 24cea57581 Add moderation helper copy for trusted mute hides 2026-01-16 10:18:38 -05:00
thePR0M3TH3AN d2d55849b9 Add trusted moderation stats to profile modal 2026-01-16 09:55:10 -05:00
google-labs-jules[bot] 9ac3cbd07e Fix blur visuals by clearing backdrop and forcing inline filter on SimilarContentCard
- Clears the card backdrop image when blurring is active to prevent the sharp background from showing through the blurred thumbnail (ghosting effect).
- Adds inline `filter: blur(24px)` to the thumbnail image as a fallback to ensure the blur effect is applied even if the `blur-xl` class is overridden or missing.
- Updates `refreshModerationUi` to handle backdrop restoration when unblurring.
2026-01-16 14:16:29 +00:00
google-labs-jules[bot] f6f76e02fd Fix blur visuals by clearing backdrop and forcing inline filter on SimilarContentCard
- Clears the card backdrop image when blurring is active to prevent the sharp background from showing through the blurred thumbnail (ghosting effect).
- Adds inline `filter: blur(24px)` to the thumbnail image as a fallback to ensure the blur effect is applied even if the `blur-xl` class is overridden or missing.
- Updates `refreshModerationUi` to handle backdrop restoration when unblurring.
2026-01-16 14:01:40 +00:00
google-labs-jules[bot] e6ebbb8343 Fix blurred thumbnail visuals and add moderation buttons to SimilarContentCard
- Adds `blur-xl` class to `SimilarContentCard` thumbnails when blurred, ensuring visual consistency.
- Implements `createModerationOverrideButton`, `createModerationHideButton`, and `createModerationBlockButton` in `SimilarContentCard.js` to provide missing interactivity.
- Updates `VideoModal.js` to wire up moderation callbacks (`onModerationOverride`, `onModerationHide`, `onModerationBlock`) when initializing similar content cards, dispatching global moderation events.
- Ensures moderation actions in the similar content sidebar function identically to the main video player.
2026-01-16 13:34:29 +00:00
google-labs-jules[bot] eed0193d18 Fix stuck Create Account button after cancellation
- Fix a logic error where the `isSelectionInProgress` flag was not reset if the user cancelled the "Create Account" flow (or other flows with early returns).
- Wrapped the entire `handleProviderSelection` logic in a `try...finally` block to ensure the flag is always reset, preventing the button from becoming unresponsive.
- Verified with reproduction test that cancelling and re-opening the "Create Account" view now works correctly.
2026-01-16 12:58:55 +00:00
google-labs-jules[bot] a27dcd7a1e Fix double-click issue in LoginModal and add Generate Keys button
- Prevent race condition where double-clicking "Create Account" could stack multiple views, causing navigation issues on cancel.
- Implement "Generate Keys" button in the Create Account view to defer key generation until user action, as requested by the user.
- Ensure keys are not generated immediately upon opening the view.
- Fix memory leak in LoginModalController destroy method.
2026-01-16 12:53:25 +00:00
google-labs-jules[bot] 0e6bc392c6 Fix login modal create account cancellation and key persistence logic
- Always generate fresh keys when opening the Create Account view, as per user request.
- Fix issue where cancelling the Create Account view could trigger a re-entry or double-click behavior by adding event.stopPropagation() to the Cancel button.
- Fix memory leak in LoginModalController destroy method by properly clearing the modal close observer and interval.
2026-01-16 12:42:06 +00:00
google-labs-jules[bot] d04e64d713 feat: ensure storage keys clear on auth change and UI reflects provider
- Added `bitvid:auth-changed` listener in `js/app.js` to trigger `storageService.lock()` and refresh `UploadModal`.
- Implemented `refreshState()` in `js/ui/components/UploadModal.js` to manage secure storage unlocking, sensitive data clearing, and dynamic provider metadata loading.
- Updated `js/ui/profileModalController.js` to prioritize default storage connections and display the provider name (e.g., "Unlocked (R2)") in the status text.
- Ensured sensitive configuration data is nulled out when storage is locked.
2026-01-16 04:06:49 +00:00
google-labs-jules[bot] 35d3b0de73 Implement storage connection testing
Added `testConnection` to `StorageService` and `testS3Connection` to `r2-s3.js`.
Updated `ProfileModalController` to use the new `storageService.testAccess` method for verifying credentials before saving.
The test logic supports both specific bucket checks (via `HeadBucket`) and general credential checks (via `ListBuckets`).
2026-01-16 03:50:13 +00:00
google-labs-jules[bot] cf9d1c08be Refactor UploadModal to use StorageService for secure R2 credentials 2026-01-16 02:35:00 +00:00
google-labs-jules[bot] 621f0e4ce7 feat: implement storage tab in profile modal
- Add Storage tab to Profile Modal HTML with provider selector (R2 default) and connection form
- Wire ProfileModalController to handle tab switching, unlocking storage, and saving/testing connections
- Inject storageService into ProfileModalController via ApplicationBootstrap
- Repurpose Endpoint input as Account ID for R2 configurations
- Implement form validation and lock state handling
2026-01-16 02:05:44 +00:00
google-labs-jules[bot] f27d32758a fix(ui): force Event Details modal z-index via inline style
Applies `z-index: 140` directly to the Event Details modal element via inline styles in JS to guarantee it renders above the Video Player (z-index 130), bypassing potential CSS specificity or build pipeline issues. This resolves the reported regression where the details modal remained obscured.
2026-01-15 22:31:15 +00:00
google-labs-jules[bot] 8e3365682a fix(ui): ensure Event Details modal renders above video player
Assigns a specific ID `eventDetailsModal` to the Event Details modal component and applies explicit z-index rules (using `--z-modal-top-*` tokens) in the CSS to ensure it sits above the video player modal (z-index 130) in the stacking order. This resolves the issue where the details modal would open behind the active player.
2026-01-15 22:02:32 +00:00
thePR0M3TH3AN 6724166f9c Add comments for login modal generation guard 2026-01-15 14:58:20 -05:00
thePR0M3TH3AN 4da17853cd Guard generate key reuse until modal closes 2026-01-15 14:53:36 -05:00
thePR0M3TH3AN b186e216ed Avoid persisting generated keys without passphrase 2026-01-15 14:25:03 -05:00
thePR0M3TH3AN 877ef667bf Merge pull request #1237 from PR0M3TH3AN/feature/create-account-button-1146231712583042044
feat: Add client-side account generation flow
2026-01-15 13:29:46 -05:00
thePR0M3TH3AN c92da1adc3 Normalize playback magnets in video cards 2026-01-15 12:22:20 -05:00
google-labs-jules[bot] 5ee8ec614a feat: add 'Create Account' option to login modal
- Adds a new documentation page `content/nostr-keys.md` explaining Nostr keys.
- Updates the sidebar to include a link to the new documentation.
- Registers a new 'generate' auth provider in `js/services/authProviders/`.
- Updates `components/login-modal.html` with a new template for key generation.
- Implements `promptForGenerateOptions` in `js/ui/loginModalController.js` to handle client-side key generation using `NostrTools`.
- Allows users to generate keys, copy/download them, and log in directly with the new `nsec`.
2026-01-15 16:14:23 +00:00
thePR0M3TH3AN ebd825fb37 Add webseed-only status to WebTorrent probes 2026-01-15 09:37:25 -05:00