- Add formatCompactNumber utility for compact coin display (1.2K, 15.4K, 1.2M)
- Fix BlobbiActionInventoryModal (medicine items) layout for mobile
- Fix BlobbiBottomBar to prevent overflow on narrow screens
- Fix BlobbiInventoryModal item cards for mobile
- Fix BlobbiMissionsModal horizontal scroll and layout issues
- Fix DailyMissionsPanel and TasksPanel for mobile
- Fix BlobbiShopModal and related dialogs for mobile
- Apply compact number formatting to all coin displays
Integrate useWikipediaSearch and useArchiveSearch into both the desktop
sidebar dropdown (ProfileSearchDropdown) and mobile bottom-nav sheet
(MobileSearchSheet). At most 1 result from each source is shown, always
positioned after Nostr profiles to preserve profile precedence. Keyboard
navigation indices updated to include the new items.
Detect Wikipedia URLs and render a custom WikipediaArticleHeader with hero
image, article title, Wikidata description, expandable extract, and a
Read on Wikipedia footer link. Also uses the Wikipedia API for accurate
page titles in the header bar and SEO metadata, and navigates back to
/wikipedia on the back button.
Pills now highlight based on which section is visible as you scroll.
Clicking a pill smooth-scrolls to that section. The 'All' pill and
filter-based empty states are removed since all sections are always shown.
Replace dark:prose-invert with text-foreground on all prose containers so
markdown content matches the active theme colors. Also bump article preview
text size from text-sm to text-[15px] to match note content in the feed.
Avoid recreating style objects on every render in MobileBottomNav,
FloatingComposeButton, and MobileDrawer by extracting them to
module-level constants.
- Remove STICKY_HEADER_CLASS + backdrop-blur from TagFeedPage, ListDetailPage,
RelayPage, and DomainFeedPage to match the arc-based header style
- Migrate ListDetailPage tab bar to SubHeaderBar
- Migrate ThemesPage header to use shared PageHeader component
- Extract --top-bar-height and --bottom-nav-height CSS custom properties in
index.css, replacing hardcoded 2.5rem/2.75rem in all calc() expressions
- Document MobileDrawer DRAWER_BG_WIDTH constant (300px + 36px arc overhang)
- Remove unused STICKY_HEADER_CLASS import from ProfilePage
Consolidate duplicated patterns from iterative development into reusable
components:
- ArcBackground: shared SVG arc shape used by SubHeaderBar, MobileTopBar,
and MobileBottomNav (eliminates 3x duplicated SVG paths and magic numbers)
- PlanetButton: extracted FAB planet SVG with useId()-scoped gradient IDs
to prevent collisions if multiple instances ever coexist
- PageHeader: standardized back+icon+title header used across 10 pages
Net reduction of ~144 lines with no behavioral changes.
Make hasSubHeader conditional on user being logged in for Index,
KindFeedPage, BooksPage, and EventsFeedPage — these pages only render
tab sub-headers when the user is authenticated.
Change ai-chat-height to span full viewport minus only the top bar,
with padding-bottom for the bottom nav. The bg-secondary/50 background
now extends behind the bottom nav arc, eliminating the opacity seam.
- Add bg-secondary/50 to main container for full viewport chat background
- Add back arrow link matching Bookmarks/Photos pattern
- Match Bot icon color to text (foreground instead of muted)
- Match title to text-xl font-bold like other page titles
- Revert bold on <[o_o]> empty state characters
- Remove sub-header SVG arc from header, set hasSubHeader false so
logo header shows its own arc
- Change icon from Sparkles to Bot, remove background wrapper
- Remove border-t and bg-background from input area
Replace sticky backdrop-blur header with simple non-sticky title row
using the same flex items-center gap-4 px-4 mt-4 mb-1 layout as
Bookmarks, Photos, and other content pages.
Replace border-b + backdrop-blur-md with the same unified SVG arc+rect
background used by all other sub-headers. Set hasSubHeader: true so the
logo header doesn't show its own arc.
Replace backdrop-blur + border-b tab bar with SubHeaderBar component
so profile tabs get the same unified arc background as all other pages.
Set hasSubHeader: true so the logo header doesn't show its own arc.
Create SubHeaderBar component that draws the tab background and
decorative arc as one combined SVG path (rect + curve). Replace all 9
sub-header instances across Feed, Search, Notifications, Videos, Vines,
Photos, Themes, Events, and Books pages.
Also update MobileTopBar to draw its background as a unified SVG shape
(rect-only when sub-header present, rect+arc when standalone).
Eliminates the sub-pixel transparent seam between bg-background/80
containers and their separate SVG arc overlays.
Draw the arc and rectangle as one combined path instead of a separate
SVG arc over a bg-background/80 div. Single fill layer eliminates both
the sub-pixel seam during animation and the double-opacity overlap line.
Overlap the SVG arc 1px into the nav bar (bottom: calc(100% - 1px))
and add will-change-transform to promote the entire nav to a single
compositing layer. Prevents the transparent seam that appeared during
fast scroll-triggered show/hide transitions.
Replaced the pathLength/strokeDasharray trick with two literal front-arc
path segments in the mask (computed by splitting the cubic bezier at
circle intersection points). The ring visually passes in front of the
planet body at the bottom-left and top-right, and behind it through the
middle — identical to the previous Chrome rendering, now cross-browser.