Pass the event ID of the active profile theme to clearActiveTheme so
the kind 5 deletion includes both an 'a' tag and an 'e' tag. Updated
all call sites (ThemeSelector and EditProfileForm).
Merge upstream changes with the theme settings refactor. Adds a
'Display my theme to others' toggle that publishes a kind 11667
active profile theme event when enabled and issues a kind 5 deletion
when disabled. Split /settings/appearance into /settings/theme and
/settings/content. Move theme builder to /settings/theme/edit.
Add 'theme' to BUILTIN_SIDEBAR_ITEMS so it can be added to the left
sidebar via the More menu or drag-and-drop. Uses the Paintbrush icon
and navigates to /settings/theme. Active state detection distinguishes
it from the general Settings highlight.
The color pickers are now always visible below the theme grid,
reflecting the effective colors of whatever theme is active. Changing
a color automatically switches to a custom theme. Removed the
explicit Custom card and the customSelected state tracking.
Remove 'Create Theme' and 'Public Themes' buttons from the theme
selector. Add a 'Custom' option at the end of the presets grid that
opens an inline color editor (background, text, primary) with live
preview. The Custom option auto-selects on page load when the active
theme doesn't match any preset.
Replace the tabbed Appearance settings page with two separate pages:
- /settings/theme for theme selection
- /settings/content for feed and content preferences
Move the theme builder from /settings/theme to /settings/theme/edit to
avoid the route conflict. Update all navigation links across the codebase.
Add explicit `id` field to ExtraKindDef and remove the `__` prefix
convention for built-in items. Item IDs are now plain strings that don't
need to match URL paths. Route resolution goes through the definition's
`route` field instead of assuming id === route.
Remove the secondary/accent color from user-level configuration. The
Tailwind 'accent' token now mirrors 'primary' directly. CoreThemeColors
is now { background, text, primary } — 3 fields instead of 4.
- deriveTokensFromCore() takes 3 params; accent = primary
- Theme builder shows pickers in order: Primary, Text, Background
- Backward-compatible parsing for old 4-color and 19-token formats
- Color swatches reordered to primary, text, background everywhere
The accent (secondary) color is now gold/amber which looks wrong for
active nav states, section titles, and interactive backgrounds. Change
these to use foreground or neutral surface colors instead:
- Left sidebar active items: text-accent -> text-foreground
- Right sidebar headings: text-accent -> text-foreground
- Mobile bottom nav active items: text-accent -> text-foreground
- Mobile explore drawer active items: text-accent -> text-foreground
- Quick react emoji picker: hover:bg-accent -> hover:bg-secondary
- Section labels (Explore, Settings, My Themes): text-accent/70 -> text-muted-foreground
- Search page trending heading and Rising tab: text-accent -> text-foreground/text-primary
- Sidebar theme palette icon: text-accent -> text-primary
Replace the 19-token ThemeTokens interface with a 4-field CoreThemeColors
for config storage, Nostr events, and encrypted settings. All other
Tailwind CSS tokens (card, muted, border, etc.) are now derived
automatically via deriveTokensFromCore().
- Add CoreThemeColors interface: { background, text, primary, secondary }
- Keep ThemeTokens as internal type for CSS variable injection
- Update builtinThemes and themePresets to store CoreThemeColors
- Add backward-compatible parsing for legacy 19-token format in Nostr
events, encrypted settings, and localStorage
- Simplify ThemeBuilderPage: remove Surface/UI color sections, just 4
color pickers with auto-derivation always on
- Update all consumers: ThemeSelector, ScopedTheme, ThemeUpdateCard,
MobileDrawer, LeftSidebar, ProfilePage, InitialSyncGate, etc.
- Stop auto-appending missing builtins when persisted sidebarOrder exists
- Removed builtins now stay removed and appear in 'More...' add menu
- Filter auth-required builtins from hidden items when logged out
- Remove ScopedThemeColumns, scopedThemeTokens from LayoutContext and MainLayout
- Profile page now temporarily overrides :root CSS vars with the visited user's theme
- On navigation away, user's own theme is restored via effect cleanup
- Entire page (sidebar, center, right) uses the profile theme
- Removed all display:contents and background extension hacks
- Added scopedThemeTokens to LayoutOptions
- MainLayout wraps center + right columns in ScopedTheme (display:contents)
- Profile page passes theme tokens via useLayoutOptions instead of local wrapper
- Center column and ProfileRightSidebar use bg-background for scoped theme fill
- Removed ProfileThemeWrapper component (no longer needed)
- Added __bookmarks as a builtin sidebar item alongside Feed and Trends
- Bookmarks is now reorderable and removable like other Explore items
- Added requiresAuth flag to hide it when logged out
- Removed hardcoded Bookmarks from You section (desktop) and mobile drawer
- Added bookmark icons to all three nav components (sidebar, drawer, bottom nav)
- 'Create Theme' link uses ?new param to force fresh state (dark preset, no editing context)
- Auto-match effect skips when ?new or ?edit is in URL
- '+' button in header updates URL to ?new
- Clicking theme title in header opens metadata edit dialog (pencil icon hint)
- Metadata-only updates don't re-set active profile theme
- Core color bar across top showing background/foreground/primary/accent
- 'Start from existing theme' dropdown replacing preset grid (groups: My Themes, Builtin, Presets)
- Auto-derive toggle moved below core colors section
- Edit pencil on own themes in the /themes feed (others see Copy)
- 'My Themes' section at top with 'Create Theme' card + user's published themes
- Clicking a user theme applies it AND navigates to the builder to edit it (?edit=identifier)
- 'Browse Public Themes' card in My Themes section
- Presets section below with System/Light/Dark + all preset themes
- Removed 'Customize your own theme' bottom link (replaced by Create Theme card)
- Theme builder handles ?edit= param to load the correct theme with editing context