Commit Graph
4851 Commits
Author SHA1 Message Date
google-labs-jules[bot]andPR0M3TH3AN 0ac1def5c2 Optimize avatar image loading with lazy and async attributes
Added `loading="lazy"` and `decoding="async"` to author avatar images in `VideoCard.js` and the creator avatar in `video-modal.html`. This aligns these components with `SimilarContentCard.js` and `VideoCard` thumbnails, improving initial page load performance and reducing main-thread blocking by deferring off-screen image loading and decoding.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-04 16:50:23 +00:00
thePR0M3TH3AN 27891de246 update 2026-02-04 11:23:02 -05:00
thePR0M3TH3AN 610146c0aa Merge pull request #2087 from PR0M3TH3AN/fix/dm-relay-warning-ux-11833564790445768236
Fix annoying DM relay warning and clarify settings UI
2026-02-04 11:18:49 -05:00
thePR0M3TH3AN a6e209908c Merge pull request #2085 from PR0M3TH3AN/fix-blocklist-decryption-timeout-1185461691442729915
Fix UserBlockList decryption timeouts and priority
2026-02-04 11:17:11 -05:00
google-labs-jules[bot]andPR0M3TH3AN d45b115f07 Fix annoying DM relay warning and clarify settings UI
- Throttle the "Privacy warning: direct messages are using your default relays..." message so it only appears once per session/identity change.
- Rename "DM Relay Hints" to "NIP-17 Relay List" in the DM Settings modal to match the warning message and reduce user confusion.
- Add regression test for the warning throttling logic.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-04 16:16:15 +00:00
google-labs-jules[bot]andPR0M3TH3AN 13023b1af0 fix(userBlocks): increase decryption timeout and priority
Increases the background decryption timeout for User Block Lists from 5s to 30s and raises the NIP-07 request priority from LOW to NORMAL. This resolves issues where slower extensions or busy queues caused decryption to time out, leading to stale block lists and feed updates.

- Bump `DECRYPT_TIMEOUT_MS` and `BACKGROUND_DECRYPT_TIMEOUT_MS` to 30000ms.
- Use `NIP07_PRIORITY.NORMAL` instead of `LOW` for decryption requests.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-04 16:13:04 +00:00
thePR0M3TH3AN 45d4de73b6 Merge pull request #2084 from PR0M3TH3AN/content-docs-audit-15351772681905355749
🌐 Align /content user docs with actual upload & contribution behavior
2026-02-04 08:38:49 -05:00
google-labs-jules[bot]andPR0M3TH3AN 5515f51aac Align /content user docs with actual upload & contribution behavior
- Update `content/docs/getting-started.md`:
  - Add recommended 2GB file size limit for browser uploads.
  - Update required credentials list for storage configuration.
- Update `content/docs/guides/upload-content.md`:
  - Add "Bucket Name" to the required credentials list.
  - Rename "Public Bucket URL" to "Public Access URL" to match the UI.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-04 02:58:17 +00:00
thePR0M3TH3AN 006a584abe Merge pull request #2083 from PR0M3TH3AN/ai/load-test-20260203-6643424127172772185
Add Load Test Script with Metrics and Remediation
2026-02-03 15:53:21 -05:00
thePR0M3TH3AN 7c3e02bb4b Merge pull request #2081 from PR0M3TH3AN/codex/fix-hashtag-feed-subscription-10106517586956974693
Fix hashtag interests not updating the video feed
2026-02-03 15:52:56 -05:00
google-labs-jules[bot]andPR0M3TH3AN 50f97ef964 Add load test script and report
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 19:17:54 +00:00
thePR0M3TH3AN a1afb77025 Merge pull request #2082 from PR0M3TH3AN/perf-explore-data-cache-4578765381783866610
⚡ Optimize collectVideoTags with WeakMap cache
2026-02-03 13:08:06 -05:00
thePR0M3TH3AN 2d5ac39425 Merge pull request #2080 from PR0M3TH3AN/docs-code-alignment-shards-9292098902261013819
📘 Align development docs with codebase behavior (test sharding)
2026-02-03 13:07:17 -05:00
google-labs-jules[bot]andPR0M3TH3AN 736ed3cbb1 Optimize collectVideoTags in ExploreDataService with WeakMap cache
- Implemented a module-level `WeakMap` to cache the results of `collectVideoTags` keyed by video object.
- This avoids repetitive tag parsing and normalization for the same video objects during `buildTagIdf` and `buildWatchHistoryTagCounts` cycles.
- Measured ~20% performance improvement on repeated calls in benchmark.
- Verified correctness with unit test covering cache hits and object mutations (simulated).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 16:49:49 +00:00
google-labs-jules[bot]andPR0M3TH3AN 302e2f3e67 Fix: Ensure hashtag interests drive the video feed engine
Updated `NostrClient.subscribeVideos` to accept dynamic tags for filtering.
Integrated `HashtagPreferencesService` into `NostrService` to refresh the video subscription whenever user interests change.
This ensures the main video feed correctly reflects the user's selected hashtags by fetching matching content from relays.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 16:45:47 +00:00
google-labs-jules[bot]andPR0M3TH3AN 455757f38c docs: align test sharding instructions with package.json
Updates `README.md` and `CONTRIBUTING.md` to explicitly mention the availability of `test:unit:shard1`, `shard2`, and `shard3`, ensuring the documentation accurately reflects the sharding configuration defined in `package.json`. This provides developers with clear options for running subsets of unit tests.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 16:44:22 +00:00
thePR0M3TH3AN 93e17c73ea Merge pull request #2079 from PR0M3TH3AN/fix-profile-modal-lag-8999038983484394893
Defer profile modal data loading to improve responsiveness
2026-02-03 11:31:47 -05:00
google-labs-jules[bot]andPR0M3TH3AN b3f37058a2 Defer profile modal data loading to improve responsiveness
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 14:44:32 +00:00
thePR0M3TH3AN a538af77bc Merge pull request #2078 from PR0M3TH3AN/fix-nip07-decryption-timeout-7572999175900768839
Fix NIP-07 decryption timeout clearing user block lists
2026-02-03 09:27:46 -05:00
google-labs-jules[bot]andPR0M3TH3AN e43a1794fd Fix package-lock.json sync issue for CI
Regenerated package-lock.json to ensure consistency with package.json dependencies.
This resolves the `npm ci` failure in GitHub Actions ("Missing: @noble/[email protected]"), ensuring all dependencies including `jsdom` and `stylelint` are correctly installed for tests and linting.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 13:44:37 +00:00
google-labs-jules[bot]andPR0M3TH3AN 9a7c475b63 Fix package-lock.json sync issue for CI
Updated package-lock.json by running a clean install to match package.json dependencies.
This resolves the `npm ci` failure in GitHub Actions ("Missing: @noble/[email protected]"), ensuring all dependencies including `jsdom` and `stylelint` are correctly installed for tests and linting.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 13:37:19 +00:00
google-labs-jules[bot]andPR0M3TH3AN db8ba46f7f Fix package-lock.json sync issue for CI
Updated package-lock.json to match package.json dependencies (added vitest and jsdom).
This resolves the `npm ci` failure in GitHub Actions, ensuring all dependencies including `jsdom` and `stylelint` are correctly installed for tests and linting.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 13:34:30 +00:00
google-labs-jules[bot]andPR0M3TH3AN cab964e41e Fix user block list decryption timeout and state wiping
Refactored `js/userBlocks.js` to handle NIP-07 decryption timeouts gracefully.
Previously, if a background decryption timed out (common with busy extensions or queues), the user's block list was reset to an empty state, exposing them to blocked content until the next successful retry.
The fix ensures that if a timeout occurs, the existing (stale) block list is preserved while a retry is scheduled in the background.
Also increased the `BACKGROUND_DECRYPT_TIMEOUT_MS` from 2500ms to 5000ms to reduce false positives.

Added `tests/user-blocks-decryption.test.mjs` to verify the fix and audit the decryption flow.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 13:31:48 +00:00
thePR0M3TH3AN 22c91ff7e0 Merge pull request #2077 from PR0M3TH3AN/content-docs-audit-13921020064269321060
🌐 Align /content user docs with actual upload & contribution behavior
2026-02-03 07:05:09 -05:00
thePR0M3TH3AN 5b75b5105f Merge branch 'unstable' into content-docs-audit-13921020064269321060 2026-02-03 07:04:57 -05:00
google-labs-jules[bot]andPR0M3TH3AN 1fb5ae3039 fix: resolve CI lint failure in dm-settings-modal
- Replaces arbitrary `max-h-[90vh]` with tokenized `max-h-modal-shell` in `components/dm-settings-modal.html` to satisfy `lint:tailwind-brackets` check.
- This accompanies the documentation updates for content uploads.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 02:43:45 +00:00
google-labs-jules[bot]andPR0M3TH3AN 8cf89faa7c docs: update upload guides with exact file types, limits, and CORS requirements
- Updates `content/docs/guides/upload-content.md` to list supported video formats (`.mp4`, `.webm`, `.mov`, `.mkv`, `.ts`, `.m3u8`, `.mpg`, `.mpeg`) and thumbnail formats.
- Adds a recommended file size limit of 2GB with an explanation (browser memory constraints).
- Clarifies CORS configuration for Cloudflare R2 to explicitly require AWS SDK v3 headers.
- Updates `content/docs/getting-started.md` to distinguish between direct upload formats and external hosting formats.
- Adds metadata validation details (Title required).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 02:37:44 +00:00
thePR0M3TH3AN ccc93518d0 Merge pull request #2076 from PR0M3TH3AN/fix-hashtag-preferences-feed-update-17909862924383891447
Fix feed update consistency when modifying hashtag preferences
2026-02-02 21:36:34 -05:00
google-labs-jules[bot]andPR0M3TH3AN 03ba9e0715 fix: ensure active feed refreshes when hashtag preferences change
* Update `refreshAllVideoGrids` in `js/app.js` to detect the currently active feed (For You, Kids, Explore, or Recent) and invoke the corresponding loader, preventing staleness when interacting with the UI.
* Refactor `HashtagPreferencesService` mutation methods (`addInterest`, etc.) to be `async` and await the `publish()` call, ensuring state is persisted before returning.
* Remove redundant `persistPreferencesFromMenu` call in `TagPreferenceMenuController`, relying on the service's internal persistence logic.
* Update unit tests for `HashtagPreferencesService` and `TagPreferenceMenuController` to align with the async behavior.
* Fix Tailwind lint error in `components/dm-settings-modal.html` by replacing arbitrary value with utility classes.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 02:01:44 +00:00
google-labs-jules[bot]andPR0M3TH3AN f77c89baf6 fix: ensure active feed refreshes when hashtag preferences change
* Update `refreshAllVideoGrids` in `js/app.js` to detect the currently active feed (For You, Kids, Explore, or Recent) and invoke the corresponding loader, preventing staleness when interacting with the UI.
* Refactor `HashtagPreferencesService` mutation methods (`addInterest`, etc.) to be `async` and await the `publish()` call, ensuring state is persisted before returning.
* Remove redundant `persistPreferencesFromMenu` call in `TagPreferenceMenuController`, relying on the service's internal persistence logic.
* Update unit tests for `HashtagPreferencesService` and `TagPreferenceMenuController` to align with the async behavior.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-03 01:55:21 +00:00
thePR0M3TH3AN 71e0ecd605 Merge pull request #2075 from PR0M3TH3AN/fix/nostr-count-timeout-12537375718680249854
fix(nostr): prevent count timeouts from disconnecting relays
2026-02-02 15:59:05 -05:00
google-labs-jules[bot]andPR0M3TH3AN ec77f50744 fix(nostr): prevent count timeouts from disconnecting relays
Prevents "count-timeout" errors from tripping the global circuit breaker in NostrClient. This ensures that slow auxiliary requests do not block critical subscription connections, resolving login issues in unstable network environments.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 20:29:25 +00:00
thePR0M3TH3AN 725db3723c Merge pull request #2074 from PR0M3TH3AN/fix-nip07-decryption-fallback-8014641787403501507
Fix NIP-07 decryption fallback robustness
2026-02-02 15:15:09 -05:00
google-labs-jules[bot]andPR0M3TH3AN 1954739624 Fix NIP-07 decryption fallback and storage unlock issues
- Updated `StorageService` to check `signer.capabilities` before calling encryption methods, ensuring graceful fallback from NIP-44 to NIP-04.
- Updated `UserBlockList` to check `signer.capabilities` before registering decryptors, preventing "Decryption timed out" errors caused by queueing unsupported method calls.
- Fixed flakiness in `tests/user-blocks.test.mjs` by adding delays to allow background promises to settle between tests.
- Verified changes with reproduction test case and existing test suite.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 19:59:24 +00:00
thePR0M3TH3AN c47e797ee4 Merge pull request #2073 from PR0M3TH3AN/update-getting-started-docs-7696444727591402786
docs: update getting started with installation instructions
2026-02-02 14:50:45 -05:00
google-labs-jules[bot]andPR0M3TH3AN e1be63efc8 docs: update getting started with installation instructions
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 19:50:04 +00:00
thePR0M3TH3AN b478cbaf01 Merge pull request #2072 from PR0M3TH3AN/dm-settings-modal-8234527829829252881
Refactor DM settings to modal
2026-02-02 14:43:42 -05:00
google-labs-jules[bot]andPR0M3TH3AN 9485003ffd Refactor DM settings into a dedicated modal
- Created `DMSettingsModalController` to manage the new settings modal UI.
- Added `components/dm-settings-modal.html` with sections for Privacy and DM Relay Hints.
- Updated `AppShell.js` to delegate the settings action to `onOpenSettings` callback, bypassing the legacy popover.
- Updated `ProfileModalController.js` to wire up the new modal controller, handling state persistence for relays and privacy settings.
- This improves the UX for managing NIP-17 DM relay hints and privacy options.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 19:43:06 +00:00
thePR0M3TH3AN bb841a2fdc Merge pull request #2071 from PR0M3TH3AN/ai/load-test-20260202-11680189359355350206
Load Test Report 2026-02-02
2026-02-02 14:33:59 -05:00
google-labs-jules[bot]andPR0M3TH3AN 95b7c6df47 feat: add load test script and report
- Implement CPU usage tracking in load-test.mjs
- Run load test with 1000 clients for 60s
- Generate load-report.json with identified bottlenecks (crypto)

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 19:25:56 +00:00
thePR0M3TH3AN 6c51b3d6f2 update 2026-02-02 13:45:30 -05:00
thePR0M3TH3AN fe92281802 Merge pull request #2069 from PR0M3TH3AN/ai/docs-align-lint-instructions-1029896231955410125
docs: align CONTRIBUTING.md linting instructions with package.json
2026-02-02 12:15:00 -05:00
thePR0M3TH3AN 793a8ab8d3 Merge pull request #2070 from PR0M3TH3AN/ai/perf-subscribeVideos-batching-9436508141846921918
⚡ Batch subscribeVideos updates to optimize initial load
2026-02-02 12:14:45 -05:00
google-labs-jules[bot]andPR0M3TH3AN 1e53070717 perf: batch video updates in subscribeVideos to reduce UI thrashing
Updates `NostrClient.subscribeVideos` to buffer incoming events and invoke the `onVideo` callback once per flush cycle with an array of updates, instead of once per video. This significantly reduces redundant sorting, filtering, and persistence operations in `NostrService`.

Also optimizes `populateNip71MetadataForVideos` to run as a single batched request per flush cycle.

BREAKING CHANGE: `subscribeVideos` callback now receives `Video[]` instead of `Video`. All internal consumers have been updated.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 17:04:55 +00:00
google-labs-jules[bot]andPR0M3TH3AN b537e4bb66 docs: align CONTRIBUTING.md linting instructions with package.json
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 17:02:51 +00:00
thePR0M3TH3AN 1ef2db012e Merge pull request #2068 from PR0M3TH3AN/fix-nip07-priority-contention-7510868666497074829
Fix NIP-07 Priority Inversion
2026-02-02 09:26:43 -05:00
google-labs-jules[bot]andPR0M3TH3AN 9c38ce5105 Fix resource contention between Block List decryption and View Counter signing
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 14:20:28 +00:00
thePR0M3TH3AN 29427b01e0 Merge pull request #2066 from PR0M3TH3AN/ai/dm-animation-fix-16717253294700761218
Prevent repeated DM peek animation
2026-02-02 09:11:30 -05:00
thePR0M3TH3AN 3328402b1c Merge pull request #2067 from PR0M3TH3AN/ai/combine-relay-health-list-16567863514667506835
Combine relay list and health check UI
2026-02-02 09:11:02 -05:00
google-labs-jules[bot]andPR0M3TH3AN 5df489e504 Combine relay list with relay health check
- Remove separate relay health panel from profile modal.
- Merge health indicators (latency, errors) directly into the relay list items.
- Consolidate refresh logic to update both list configuration and health status.
- Move telemetry toggle to the bottom of the relay section.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-02 14:03:09 +00:00