The theme dropdown was appearing behind the account popover because
DropdownMenuContent (z-200) portals below PopoverContent (z-260).
Bumped theme dropdown z-index to 270 so it renders above. Also capped
featured preset themes to 5 in both sidebar dropdowns to keep the menu
manageable, with a 'More...' link for the full list.
Dynamically imports and initializes Plausible when the
VITE_PLAUSIBLE_DOMAIN env variable is set at build time.
When unset, the tracker code is never loaded.
Badges is no longer shown by default on user profiles. Users can
still easily add it back via the profile feeds editor (+) dropdown.
Introduces DEFAULT_TAB_LABELS (without Badges) for the initial tab
set while keeping CORE_TAB_LABELS (with Badges) for the editor.
Muting a single user would replace the entire mute list (kind 10000)
with only that one entry, because addMute/removeMute used stale
in-memory data instead of the latest event from relays.
Borrow the safety pattern from useFollowActions: fetch the freshest
kind 10000 event from all relays, decrypt it, then apply the mutation
on top of the real current state before re-encrypting and publishing.
Also adds dedup check on addMute to prevent duplicate entries.
Closes#87
Implement badge definitions (kind 30009) and profile badges (kind 30008)
as a new Whimsy content type with feed page, NoteCard rendering, sidebar
entry, dedicated detail page with awardee list, and a Badges core profile
tab showing a user's accepted badges with links to badge definitions.
- Add 'How do I report harmful content?' help tip to Muted Content and Sensitive Content sections
- Add 'For You page' help tip to Home Feed settings header
- Move wallet help tip from NWC section to Wallet page header
- Add 'What are zaps?' help tip to Zap dialog title
- Add 'Mastodon/Bluesky comparison' help tip to Platform filter in search
- Fix Select dropdown z-index (250->270) so dropdowns render above filter popover (260)
Create a reusable HelpTip component that shows a (?) icon popover with
FAQ content pulled from helpContent.ts, linking to the full Help page.
Place tips in settings where normie users are likely confused:
- Network settings: Relays and Blossom Servers section headers
- Wallet settings: NWC section header and zaps empty state
- Notification settings: next to 'zaps' in push notification description
- Profile settings: next to the Lightning address field
- Relay list manager: next to 'Your Relays' header (also remove NIP-65 jargon)
- Content settings: next to subtitle mentioning Nostr content types
- Replace open protocol mention with 'app store releases planned' on download question
- Link Alby, Zeus, and Wallet of Satoshi on wallet question
- Link nostr.how zaps guide on zaps question
- Add 'Can I log into other Nostr apps with my Ditto account?' to Getting Started, link nostrapps.com
- Add 'Is there a Nostr-specific app store?' to Apps & Access, link Zap Store and nostrapps.com
- Add relay learn-more link to nostr.how/en/relays
- Add Blossom learn-more link to onnostr.substack.com article
- Add 'What is Ditto?' as first question linking to soapbox.pub/ditto
- Reword 'What is Nostr?' and link to Nostr 101 blog post
- Link Managing Nostr Keys blog on both secret key questions
- Add source code and Shakespeare links to open source answer
- Add 'Can I self-host Ditto?' question linking to self-hosting guide
- Link The Future Is Decentralized blog on decentralization answer
- Link ethics pledge on big tech comparison answer
- Add visible border-t dividers between FAQ category sections
- Shorten relay question to just 'What are relays?'
- Make questions bigger (text-base) and bolder (font-semibold)
- Darken answer text from muted-foreground to foreground/80
- Clarify report answer to mention the three-dot menu on posts
Introduce a new /help route with beginner-friendly FAQ content covering
getting started, apps, payments, content safety, and why Nostr differs
from big tech. Includes reusable HelpFAQSection and TeamSoapboxCard
components that can be embedded on other pages. Help appears in the
default sidebar so new users see it without manual configuration.
The onboarding modal was setting a hardcoded sidebarOrder, overriding
the default from useFeedSettings. Remove the sidebar order logic from
onboarding so new users get the standard default sidebar instead.
- Rename 'Feed' to 'Home Feed' in settings hub, page header, and SEO title
- Rename 'Notes' section to 'Basic Home Feed Options'
- Rename 'Other Stuff' to 'Show More Content Types in Home Feed'
- Rename 'Reposts' to 'Reposted Notes', 'Generic Reposts' to 'Reposted Other Content'
- Only show community domain management when community feed toggle is on
Convert 10 collapsible sections to always-visible static sections with
plain subheaders across Feed, Content, Network, Profile, and Lists pages.
The 'Advanced' section on Profile and all sections within AdvancedSettings
remain collapsible.
- Remove 'Codex of Configuration' heading, ornament dividers, and bottom ornament from settings hub
- Remove Lists from settings menu; add as sidebar item with Scroll icon at /lists
- Reverse the /lists <-> /settings/lists redirect for backward compatibility
- Add persistent pencil icon badges on avatar and banner in ProfileCard edit mode
- Pencil badges fade on hover to reveal the full camera overlay
Move overflow-y-auto from DialogContent to an inner wrapper div so the
color picker popover (portaled into the dialog) is not clipped by the
overflow boundary. The dialog container uses overflow-visible while the
inner div handles scrolling.
Portal popover content into the Dialog DOM tree via PortalContainerProvider
so Radix Dialog's RemoveScroll doesn't block scroll events on the font
picker dropdown list. Fixes both ThemeSelector builder and ProfilePage
edit profile theme dialogs.
All content types are already enabled by default, so the 'What interests
you?' step was redundant. The onboarding flow now goes directly from
theme selection to content safety.
Replace items-center/justify-center on the scroll container with
my-auto/mx-auto on the child. The flex centering was pushing the top
of the content above the scroll boundary when the theme grid exceeded
the viewport height, making it unreachable.