Commit Graph

1780 Commits

Author SHA1 Message Date
Alex Gleason 9f82fb5f46 Show LinkFooter in both desktop and mobile sidebars regardless of login state 2026-03-18 22:33:07 -05:00
Alex Gleason 88088e754d Add LinkFooter component with About, Docs, Privacy, and Shakespeare links 2026-03-18 22:30:24 -05:00
Alex Gleason 962f97fbfc Update tagline to 'Your content. Your vibe. Your rules.' 2026-03-18 21:04:43 -05:00
Alex Gleason e3935b7dc6 Replace Messages with Feed in mobile bottom nav
Remove the Messages tab and add a Feed tab (using PlanetIcon) as the
leftmost item in the mobile bottom navigation. Feed highlights when
on /feed or /.
2026-03-18 15:29:33 -05:00
Alex Gleason 464279b2e6 feat: add custom font upload to theme editor FontPicker
Allow users to upload their own .woff2/.woff/.ttf/.otf font files via
Blossom, which are immediately applied and stored with the theme. The
uploaded font URL is preserved when publishing themes to Nostr (via the
existing f tag in the theme event schema).
2026-03-18 13:01:07 -05:00
Chad Curtis 176813dce0 feat: support multi-photo upload in media picker
Add the  attribute to the file input in ComposeBox and update
the onChange handler to iterate over all selected files, uploading each
one via handleFileUpload, enabling users to select and attach multiple
files at once.
2026-03-18 05:55:41 -05:00
Chad Curtis 39fee6aa5d Filter notifications for reactions/reposts/zaps on posts user didn't author 2026-03-18 05:36:10 -05:00
Chad Curtis a7b142b5e5 Filter reactions/reposts on posts the user didn't author from notifications 2026-03-18 05:31:26 -05:00
Chad Curtis 018fad1a2e Fix color moments text overlay, add geohash pill and geotag feed support
- Fix color moments rendering long text as emoji overlay; only render
  single emoji (≤2 code points) as palette overlay
- Replace MapPin with ChestIcon on geocache name
- Add geohash pill badge to geocache type/size row, linking to /g/ route
- Truncate geohash display to 5 characters
- Add /g/:geohash route with GeotagPage backed by shared TagFeedPage
- DRY up HashtagPage and GeotagPage into shared TagFeedPage component
- Extend useInterests to support g tags for geohash following
- Add geotag feed tabs to home feed with MapPin icon
2026-03-18 04:00:25 -05:00
Alex Gleason aea730a949 Redesign Request to Vanish as a multi-step wizard
Break the dialog into 3 focused steps (Scope, Details, Confirm)
with animated progress indicators, dramatic destructive color
treatment, custom scope selection cards, and a centered final
confirmation with type-to-confirm input.
2026-03-18 03:20:55 -05:00
Alex Gleason f861641aa1 Add NIP-62 Request to Vanish support
Implement kind 62 event publishing to allow users to request
permanent deletion of their data from relays. Includes global
(ALL_RELAYS) and targeted (specific relays) modes with a
multi-step confirmation dialog in Advanced Settings.
2026-03-18 03:06:24 -05:00
Alex Gleason 573c680d2f Add privacy policy link to Help page 2026-03-18 01:16:36 -05:00
Alex Gleason 9010dba583 Add privacy policy page with route and sidebar link 2026-03-18 01:13:04 -05:00
Dirk Rost 9309308a4e Merge branch 'fix/iOS-accessibility' into 'main'
fix: prevent iOS Safari auto-zoom on input focus

See merge request soapbox-pub/ditto!84
2026-03-17 19:55:18 +00:00
Dirk Rost cd1620c76e Merge branch 'feat/poll-compose' into 'main'
Add poll creation to compose toolbar and polls page FAB

See merge request soapbox-pub/ditto!85
2026-03-17 19:55:18 +00:00
Lemon f91a37914c fix: prevent iOS Safari auto-zoom on input focus 2026-03-17 19:55:18 +00:00
Chad Curtis f1c15b64a2 Add poll creation to compose toolbar and polls page FAB 2026-03-17 19:55:18 +00:00
Mary Kate c3a4d8be57 Fix sticky tabs not scrolling to top on click or switch 2026-03-17 19:46:44 +00:00
Chad Curtis f17bc899c8 Fix tall images cropped in lightbox
The wrapRef div had no dimensions, so max-w-full/max-h-full on the img
resolved against the image's own natural size rather than the available
space. Give wrapRef full width/height so percentage constraints work
correctly against the padded slot area.
2026-03-17 09:59:04 -05:00
Chad Curtis d955473c3c Fix long tag/bech32 string overflow in feed tabs, empty states, and note content 2026-03-17 09:29:50 -05:00
Chad Curtis 0fbc562ee0 Fix long hashtag overflow in page title header 2026-03-17 09:26:19 -05:00
Chad Curtis e55b90202b Enable all fun content kinds by default in feed settings 2026-03-17 09:15:59 -05:00
Chad Curtis 230b4820bf fix: pre-fetch VAPID key on mount to avoid insecure-operation error
Browsers (especially Safari/Firefox) require pushManager.subscribe() to be
synchronously reachable from a user gesture. The previous code awaited a
getVapidKey() network call inside enable(), which broke the activation chain
and threw 'DOMException: The operation is insecure'.

Fix: fetch and cache the VAPID key during SW registration on mount so it is
ready in vapidKeyRef before the user ever clicks Enable, making
pushManager.subscribe() the first async call after the user gesture.
2026-03-17 08:48:45 -05:00
Chad Curtis ae60146390 Merge branch 'feat/pwa-notifications' into 'main'
Add Web Push notifications via "nostr-push"

See merge request soapbox-pub/ditto!83
2026-03-17 13:39:05 +00:00
Alex Gleason 33fcae9bd5 Fix right sidebar not hiding when rightSidebar is null
The nullish coalescing operator (??) treats null as nullish, so
`null ?? <RightSidebar />` was falling through to the default.
Use an explicit null check so pages can hide the sidebar by
passing rightSidebar: null.
2026-03-16 23:26:19 -05:00
Alex Gleason 44e5c1719f Expand Messages page to full width by hiding right sidebar 2026-03-16 23:24:42 -05:00
Alex Gleason 5f9f23bcf8 Enable direct messaging with NIP-04 and NIP-17 support 2026-03-16 23:21:27 -05:00
Lemon 547fcd91fe Refactor: clean up notification code for clarity
- useNativeNotifications: remove web push concerns entirely, this hook
  is now Capacitor-only. Web push lifecycle is fully managed by
  usePushNotifications + NotificationSettings.
- usePushNotifications: strip debug logging, tighten doc comments.
- nostrPush: strip debug logging.
- notificationTemplates: trim verbose block comment.
- NotificationSettings: reduce comment noise.
2026-03-16 19:05:45 -07:00
Alex Gleason 5bdd679643 Fix profile tabs spacing: stop stretching tabs, add padding and horizontal scroll 2026-03-16 20:45:25 -05:00
Dirk Rost 79965f80ca Merge branch 'fix/divine-video-media-feed' into 'main'
Fix diVine videos not displaying in profile media feed

Closes #116

See merge request soapbox-pub/ditto!79
2026-03-17 00:29:02 +00:00
Mary Kate ad1361e15b Fix diVine videos not displaying in profile media feed 2026-03-17 00:29:02 +00:00
Dirk Rost 16946b5ec1 Merge branch 'fix/follow-button-page-refresh' into 'main'
Fix follow button on Themes page causing feed to reset

Closes #98

See merge request soapbox-pub/ditto!77
2026-03-17 00:29:01 +00:00
Mary Kate 7da03761ab Fix follow button on Themes page causing feed to reset 2026-03-17 00:29:01 +00:00
Dirk Rost 2fadb12183 Merge branch 'fix/kind-feed-global-tab' into 'main'
Fix kind-specific feeds showing Ditto tab content instead of actual kind data

Closes #122

See merge request soapbox-pub/ditto!75
2026-03-17 00:28:48 +00:00
Mary Kate d2c57e9287 Fix kind-specific feeds showing Ditto tab content instead of actual kind data 2026-03-17 00:28:48 +00:00
Dirk Rost 52eead2423 Merge branch 'remove-sidebar-theme-picker' into 'main'
Remove theme picker from sidebar profile actions

Closes #85

See merge request soapbox-pub/ditto!78
2026-03-17 00:28:47 +00:00
Mary Kate c353e8886a Remove theme picker from sidebar profile actions 2026-03-17 00:28:47 +00:00
Dirk Rost 3e73276845 Merge branch 'fix/status-bubble-italic-clipping' into 'main'
Fix italic status text clipping in NIP-38 status bubbles

Closes #112

See merge request soapbox-pub/ditto!76
2026-03-17 00:28:45 +00:00
Mary Kate b177b3fbd5 Fix italic status text clipping in NIP-38 status bubbles 2026-03-17 00:28:44 +00:00
Lemon 587f0ff442 Fix enable() double-requesting permission and add push debug logging
- Remove redundant Notification.requestPermission() from enable() since
  the caller (NotificationSettings) already handles it from the user gesture.
  On iOS this second call could behave unexpectedly.
- Add console.debug logging throughout the enable flow and RPC send for
  diagnosing push registration issues in production.
2026-03-16 17:17:56 -07:00
Lemon 023f440054 Fix web push notifications: derive toggle from browser state, not NIP-78
- NotificationSettings: on web, drive the push toggle from the hook's
  enabled state (actual browser subscription) instead of the NIP-78
  notificationsEnabled setting which can be stale across devices.
  NIP-78 is still used for the Capacitor/Android path.

- useNativeNotifications: remove the web push auto-disable effect that
  raced against encrypted settings loading, causing disablePush() on
  every page load before settings resolved.

- usePushNotifications: remove REGISTERED_KEY localStorage check from
  the mount restore logic; derive enabled purely from
  pushManager.getSubscription() like the working Ghastly reference.
  Remove dead REGISTERED_KEY code entirely.
2026-03-16 16:57:31 -07:00
Dirk Rost f02f883e2e Fix iOS theme glitch on notification settings page 2026-03-16 23:09:05 +00:00
Alex Gleason 6570d7d901 Fix trends count mismatch between TrendsPage and sidebar (ditto#45) 2026-03-16 17:39:39 -05:00
Alex Gleason d7c55aa7d4 Merge branch 'profile-field-presets' into 'main'
feat: add field preset templates and live sidebar preview to profile settings

Closes #105

See merge request soapbox-pub/ditto!73
2026-03-16 21:54:34 +00:00
Dirk Rost 8ba67d03a3 Merge branch 'faq-zapstore-link' into 'main'
Update FAQ with Zapstore link for Ditto

Closes #115

See merge request soapbox-pub/ditto!72
2026-03-16 21:50:04 +00:00
Mary Kate 905317ccf8 Update FAQ with Zapstore link for Ditto 2026-03-16 21:50:04 +00:00
Derek Ross adc370a598 Fix live streams showing as active when ended, and fix muted icon state
Implement NIP-53 staleness heuristic (24h threshold) to mark abandoned
status=live streams as ended. Fetch all streams globally and filter
follows client-side (including p-tag participants for streaming services).
Add Live/Planned/Past pill tabs to the streams strip on /videos.

Also fix pre-existing bug where the volume icon showed unmuted while the
video was actually muted (autoplay requires muted), by syncing the
initial muted state from the media element in usePlayerControls.

Closes #88
2026-03-16 16:36:54 -04:00
Mary Kate Fain 5bff1a2533 fix: move add field pill buttons back below the field inputs 2026-03-16 15:12:22 -05:00
Mary Kate Fain 7ad8d0e601 fix: hide Media section and Shakespeare footer when no mediaEvents provided
Conditionally render the Media section and footer only when mediaEvents
is explicitly passed, so the fields-only mobile preview shows just the
profile fields without an empty Media box or the Shakespeare link.
2026-03-16 15:11:11 -05:00
Mary Kate Fain 2306d6c25b fix: exclude media collage from mobile profile fields preview
Only pass fields to the mobile ProfileRightSidebar preview, omitting
mediaEvents and mediaLoading so the media collage section doesn't
render in the inline mobile preview.
2026-03-16 15:09:18 -05:00