Commit Graph

31 Commits

Author SHA1 Message Date
shakespeare.diy ddafaaf1bd Move Wallet from sidebar to Settings tab, reorder Bookmarks above Settings
- Created WalletSettings component with wallet management UI
- Added "Wallet" tab to SettingsPage
- Removed Wallet nav item from LeftSidebar and MobileDrawer
- Moved Bookmarks above Settings in both LeftSidebar and MobileDrawer
- Removed /wallet route from AppRouter

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-18 02:32:39 -06:00
shakespeare.diy bb1d4f0160 Replace MapPin with chest SVG icon for Treasures
- Create ChestIcon component using the chest SVG from the treasures project
- Replace all MapPin usages for Treasures in sidebar, feed settings, treasures page, and router
- Remove unused @lucide/lab dependency (chest SVG is inlined)

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 19:59:20 -06:00
shakespeare.diy 769c179d1a feat: add Follow Packs to feed options
- Add kind 39089 (starter packs) to EXTRA_KINDS with sidebar/feed toggles
- Create FollowPackContent component for NoteCard rendering with title,
  description, member count badge, cover image, and avatar stack preview
- Add kind dispatch in NoteCard for 39089 and 30000
- Add /packs route using KindFeedPage
- Add PartyPopper icon in sidebar and feed settings
- Default showPacks to true so it appears in sidebar

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 19:26:10 -06:00
shakespeare.diy 99fa4b2bd1 Align search bar height with Follows/Global tabs row (py-3.5)
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 19:07:18 -06:00
shakespeare.diy 9a0a692ed7 Update search wrapper padding from py-4 to py-3.5
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 18:59:19 -06:00
shakespeare.diy c52b28dc60 Update search input padding from py-2.5 to py-3.5
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 18:58:23 -06:00
shakespeare.diy 2a5f97ee84 Replace mt-3 mb-2 with py-4 on search bar wrapper in left sidebar
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 18:47:56 -06:00
shakespeare.diy b197887141 Add top margin to search bar to align with feed tabs
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 18:44:58 -06:00
shakespeare.diy 887914d39f Remove vertical padding from search bar wrapper to align with feed tabs
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 18:43:16 -06:00
shakespeare.diy abce91e16e Remove y padding from logo link in left sidebar
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 18:41:01 -06:00
shakespeare.diy ed1af93e47 Update left sidebar logo size from 36 to 48x48
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 18:40:03 -06:00
shakespeare.diy c770ea9af0 Make sidebar search bar a general search with people autocomplete
- Updated ProfileSearchDropdown with `enableTextSearch` prop that shows
  a combined dropdown with a "Search for ..." text option plus people results
- Pressing Enter without a profile selected navigates to /search?q=...
- Selecting a profile from autocomplete still navigates to their profile
- Updated SearchPage to read `q` param from URL and sync search state
- Changed sidebar search placeholder from "Search people..." to "Search..."

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 18:30:12 -06:00
shakespeare.diy c08ae32cb9 Fix alignment and sizing to match Ditto layout
- Widen left sidebar from 280px to 300px to match Ditto
- Add max-w-[1240px] and mx-auto to center the three-column layout
- Adjust compose box textarea top padding (py-2 → pt-3 pb-2) for better vertical alignment of placeholder text with avatar

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 16:43:37 -06:00
shakespeare.diy ff38bb14bc Render polls, geocaches, and color moments per their NIP specs
- PollContent (kind 1068 / NIP-88): Shows question, options with
  selectable vote UI, tallied results with percentage bars, poll type
  badge (single/multi), expiry status. Fetches kind 1018 vote events,
  deduplicates per pubkey, and allows voting when logged in.

- GeocacheContent (kind 37516 / NIP-GC): Shows cache name, type badge,
  size badge, D/T difficulty pips (1-5), description, image, and
  ROT13-decoded hint toggle. Supports verified cache indicator.

- ColorMomentContent (kind 3367 / Espy NIP): Renders color palettes
  with all 6 layout modes (horizontal, vertical, grid, star,
  checkerboard, diagonalStripes). Emoji overlay with adaptive
  light/dark text based on palette luminance. Click-to-copy hex
  swatches. Name display above palette.

- NoteCard now dispatches to the correct content component based on
  event.kind (1, 1068, 3367, 34236, 37516).

- Replaced VinesPage/useStreamVines with generic KindFeedPage/useStreamKind.
  All kind-specific routes (/vines, /polls, /treasures, /colors) use
  the same generic streaming page parameterized by kind number.

- Centralized extra-kind definitions in lib/extraKinds.ts. All feeds
  (home, search, profile, hashtag) respect feed settings for which
  extra kinds to include.

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 05:24:01 -06:00
shakespeare.diy c7718f7a1f Add Feed settings tab with sidebar link and feed content toggles
- Add FeedSettings to AppConfig for persisting user preferences
- Create Settings > Feed tab with two sections:
  - Sidebar Links: toggle visibility of Vines, Polls, Treasures, Colors in nav
  - Feed Content: include these kinds in Follows/Global feeds
- Update LeftSidebar and MobileBottomNav to conditionally render nav items
- Update useFeed hook to include extra kinds (1068 Polls, 3367 Colors,
  34236 Vines, 37516 Treasures) based on feed settings
- Add routes for /polls, /treasures, /colors (placeholder pages)
- Vines enabled in sidebar by default; all others off by default

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 05:12:24 -06:00
shakespeare.diy 6db6d9c337 Align theme dropdown menu to the right
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 03:30:04 -06:00
shakespeare.diy 09c5f88af1 Fix theme selector: add "Theme" label, fix hover clipping, open menu upward
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 03:29:23 -06:00
shakespeare.diy 3d3ac7fa19 Update LoginDialog to match borkstr format with signup link
- Added onSignupClick prop to LoginDialog interface
- Added "New here? Create account" link in LoginDialog
- Link appears after extension login button (if available) or with other options
- Matches borkstr's login dialog pattern for better UX
- Users can easily switch between login and signup flows

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 00:25:13 -06:00
shakespeare.diy 97afc671fd Update Join button to trigger login modal instead of signup dialog
- Changed Join button onClick handler to open LoginDialog instead of SignupDialog
- Follows the same pattern as borkstr project where Join opens the login modal
- Users can still access signup through the login modal's "More Options" section

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 00:24:23 -06:00
shakespeare.diy b5fd5ecd24 Fix React hooks violation in ComposeBox causing error #300 on logout
- Moved early return to after all hooks to comply with Rules of Hooks
- Changed handleLogout to async/await pattern for better error handling
- Prevents "Rendered more hooks than during the previous render" error

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 00:22:51 -06:00
shakespeare.diy 1004f86415 Fix theme selector and logo display issues
- Show current theme name and icon in dropdown trigger button
- Fix light theme not working (update class removal from 'mew' to 'dark')
- Remove opacity from logo in pink theme (keep full visibility)
- Logo now only uses opacity in light theme (70%)

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 00:14:55 -06:00
shakespeare.diy 92e2aca8e8 Update logo opacity and theme selector to dropdown menu
- Use opacity (60% pink, 70% light) for MewLogo instead of color filters
- Change Mew theme icon to Cat, Black theme icon to Moon
- Convert theme selector to proper dropdown menu with chevron indicator
- Add DropdownMenuLabel and separator for better UX
- Maintain theme icons: Cat (Mew), Sun (Light), Moon (Black), Heart (Pink)

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 00:13:08 -06:00
shakespeare.diy 16d9c3ef1a Update theme system: Mew→dark, enhance pink theme, add theme icons and logo filters
- Rename "mew" theme to "dark" (Mew=dark, Light=light remain)
- Make pink theme more vibrant with increased saturation and adjusted hues
- Convert theme selector to dropdown menu with icons (Moon, Sun, Zap, Heart)
- Add CSS filters to MewLogo for pink and light themes with smooth transitions
- Keep Black and Pink themes as requested

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 00:10:34 -06:00
shakespeare.diy c743c7d458 Remove ... icon, add theme toggle, fix logout error
- Removed MoreHorizontal icon from account switcher trigger
- Fixed logout minified React error by properly closing popover before navigation
- Added theme toggle to account popover with Mew, Light, Black, Pink options
- Added Pink (pastel pink) theme CSS variables
- Updated Theme type to support 'light', 'dark', 'black', 'pink', 'system'

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 23:39:29 -06:00
shakespeare.diy e0b8785d7b Show Join button when logged out, Ditto-style account popover, hide account area when logged out
- LeftSidebar: Compose button becomes "Join" when logged out, opens signup dialog
- LeftSidebar: Account area in lower-left hidden when logged out
- LeftSidebar: Clicking account area opens Ditto-style popover with profile card, account switching, add account, and logout
- FloatingComposeButton: Shows join icon (UserPlus) when logged out, opens signup dialog

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 23:33:32 -06:00
shakespeare.diy 5264a7004c Add profile search autocomplete using relay.ditto.pub NIP-50 search
- Create useSearchProfiles hook that queries wss://relay.ditto.pub
  with NIP-50 search filter for kind 0 (profile) events
- Create ProfileSearchDropdown component with debounced input,
  keyboard navigation, and animated dropdown of matching profiles
- Update SearchPage to use the new profile autocomplete
- Update LeftSidebar search bar to use the profile autocomplete
- Selecting a profile navigates to their npub profile page

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 22:46:02 -06:00
shakespeare.diy 66fb2ad9d1 Add py-2.5 to left sidebar search bar wrapper div
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 22:39:22 -06:00
shakespeare.diy 7dafc69845 Update left sidebar search bar to use py-2.5 padding instead of fixed h-10 height
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 22:38:27 -06:00
shakespeare.diy 589a60ec89 Replace "More" with Bookmarks page
- Created useBookmarks hook for NIP-51 kind 10003 bookmark list management
  (query, add, remove bookmarks)
- Created BookmarksPage with login prompt, loading skeletons, and empty state
- Replaced "More" nav item with "Bookmarks" in LeftSidebar
- Added bookmark toggle button to NoteCard action bar (replaces three-dot menu)
- Removed /more route from AppRouter
- Bookmarks are stored per NIP-51 as replaceable kind 10003 events

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 17:46:37 -06:00
shakespeare.diy e53210ce4d Raise sidebar breakpoint to 900px — no more icon-only strip
The sidebar now either shows fully (280px with labels, search, user
info) or is completely replaced by the mobile UI. The icon-only 72px
strip is eliminated — below 900px the mobile top bar, bottom nav,
drawer, and FAB take over entirely.

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 17:19:16 -06:00
shakespeare.diy 4f1b4800d0 Build Mew: a full-featured kind 1 Nostr client
- Dark theme with purple accent colors matching the reference design
- Three-column layout: left sidebar, main feed, right sidebar
- Left sidebar: Mew logo, search, navigation (Home, Notifications, Search, Vines, Profile, Wallet, Settings, More), compose button, user profile/login
- Main feed: compose box, Follows/Global tabs, live note cards with avatars, author info, NIP-05 verification, relative timestamps, image attachments, and action buttons (reply, repost, like, zap, more)
- Right sidebar: trending hashtags with sparklines, latest accounts, footer
- Full routing: home, profile, notifications, search, hashtags, settings (profile/relays), placeholder pages
- NIP-19 routing with automatic profile redirect
- Custom hooks: useFeed, useTrendingTags, useLatestAccounts, useEventStats
- NoteContent renders mentions, links, and hashtags as clickable elements
- Inter Variable font, skeleton loading states, responsive layout

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 17:05:32 -06:00