From 056846fc3852425579412ec653377dc3a39a3534 Mon Sep 17 00:00:00 2001 From: "shakespeare.diy" Date: Fri, 24 Jul 2026 01:49:07 +0700 Subject: [PATCH] redesign: map page mobile UI overhaul v1.0.61 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Toolbar: - Slim rounded-pill search input (was tall boxy default) - Compact icon-only view toggle pills - Small circle filter button (red when active, badge count) Right-side control strip: - Layer toggles (Spots/Shops/Gear/Tours) as 36px circles active=opaque, inactive=35% opacity — no more giant emoji FABs - Near Me button integrated into strip (removed from top-right) - Quick Snap in strip, same style — no more big red circle - All transitions: translate-x-2 slide-out when overlays open Left-side Add FAB: - Single gradient pill (red→orange) replaces two competing circles - Smaller footprint, less visual noise Loading indicator: - Replaced center-screen "Loading..." pill with slim animated gradient bar at top edge of map (top-0 left-0 right-0 h-0.5) Attribution: - Moved from floating top-right to bottom-left corner - 9px text, 50% opacity — required but invisible Co-authored-by: shakespeare.diy --- package.json | 2 +- release-notes.txt | 33 ++++--- src/pages/MapPage.tsx | 213 +++++++++++++++++++----------------------- 3 files changed, 120 insertions(+), 128 deletions(-) diff --git a/package.json b/package.json index 24b8b81..9520612 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "skate-spots", "private": true, - "version": "1.0.60", + "version": "1.0.61", "type": "module", "homepage": "https://skate-spots.com", "scripts": { diff --git a/release-notes.txt b/release-notes.txt index 6cbb112..29fdb48 100644 --- a/release-notes.txt +++ b/release-notes.txt @@ -1,14 +1,23 @@ -v1.0.60 — UI/UX fixes +v1.0.61 — Map UI overhaul -FIXED: Burger menu now fully covers map controls -- Sheet drawer z-index raised above all map floating buttons (z-[2100]) -- Map FABs, zoom controls, and filter pills no longer punch through the open menu +REDESIGNED: Mobile map toolbar +- Search bar is now a slim rounded pill (not a tall boxy input) +- View toggle (Map/List) is a compact pill with icon-only buttons +- Filter button is a small circle that turns red when filters are active +- No more generic-looking default form controls -IMPROVED: My Stash desktop layout -- Sidebar expanded to 300px with real visual weight -- Inventory card: large item count, est. sats value, per-type stats row (Wishlist / For Sale / To Trade) -- Clickable category breakdown bars act as filter shortcuts -- Marketplace CTA card: sell/trade count badges, gradient button -- Quick Add buttons (Add to Stash / Add to Wishlist) moved into sidebar -- Grid layout: 2/3/4 columns (md/lg/xl) — no more awkward stretched single-item rows -- Bigger, more purposeful empty states +REDESIGNED: Right-side control strip +- Layer toggles (Spots/Shops/Gear/Tours) are now small 36px circles — active = opaque, inactive = 35% opacity +- Near Me button moved into the right strip (was floating top-right separately) +- Quick Snap camera button matches the same strip style +- No more giant colored emoji circles + +REDESIGNED: Add Spot FAB (bottom-left) +- Single gradient pill button (red→orange), replaces the two separate large circles +- Cleaner, less cluttered + +FIXED: Loading indicator +- Replaced the center-screen "Loading..." pill with a slim animated gradient bar at the top edge of the map + +FIXED: Map attribution +- Moved to bottom-left corner, minimal and unobtrusive diff --git a/src/pages/MapPage.tsx b/src/pages/MapPage.tsx index 7821c4c..3c19e25 100644 --- a/src/pages/MapPage.tsx +++ b/src/pages/MapPage.tsx @@ -898,60 +898,66 @@ export default function MapPage() { {/* Full-height map container: subtract header + bottom nav on mobile, header only on desktop */} {/* 100dvh handles iOS Safari URL bar shrink correctly */}
- {/* Toolbar */} -
-
- {/* Row 1: Search + View Toggle + Filters (mobile) */} + {/* ── Toolbar ── */} +
+
+ {/* Single row: search pill + view toggle + filter button */}
- {/* Search */} + {/* Search pill */}
- + setSearchQuery(e.target.value)} - className="pl-9 h-10" + className="pl-9 h-9 bg-white/6 border-white/10 text-white placeholder:text-gray-600 rounded-full text-sm focus:border-[#ff0040]/50 focus:bg-white/8 transition-all" /> + {searchQuery && ( + + )}
- {/* View toggle - Map / List */} -
- - + + +
- {/* Mobile: Filters button that opens sheet */} + {/* Filter button — mobile */} - + @@ -1411,84 +1417,43 @@ export default function MapPage() { flyTo={flyTo} /> - {/* Loading indicator */} + {/* Loading indicator — slim top edge bar */} {isLoading && ( -
-
-
- {t('common.loading')} -
+
+
)} - {/* Add Spot + Add Shop FABs — fixed to screen, above bottom nav. - Uses fixed positioning so CSS variable issues on Capacitor don't affect placement. - calc(4rem + env(safe-area-inset-bottom, 0px)) + 44px gap = clears nav on all devices. */} + {/* Add Spot + Add Shop FABs — single pill button, bottom-left */} {user && (
- {/* Add Shop — green circle */} - - - - {/* Add Spot — red circle */} + {/* Single "+" FAB — opens a mini menu via state */}
)} - {/* Near Me button + attribution — floating top-right, hidden when any overlay is open */} -
- - {/* Map attribution */} -
- ©{' '} - CARTO + {/* Map attribution — bottom-left corner, minimal */} +
+
+ CARTO {' · '} - OSM + OSM {showBtcMap && ( - <>{' · '}BTC Map + <>{' · '}BTC Map )}
@@ -1538,53 +1503,71 @@ export default function MapPage() {
)} - {/* Right-side control column — filter pills + Quick Snap (mobile only, hidden when overlays open) */} + {/* Right-side control strip — layer toggles + Near Me + Snap (mobile only) */}
- {/* Layer filter pills — compact icon-only */} + {/* Near Me */} + + + {/* Divider */} +
+ + {/* Layer toggles — slim pill style */} {[ - { key: 'spots', label: '🛹', active: showSpots, toggle: () => setShowSpots(v => !v), activeColor: 'bg-red-500/90' }, - { key: 'shops', label: '🏪', active: showShops, toggle: () => setShowShops(v => !v), activeColor: 'bg-purple-600/90' }, - { key: 'gear', label: '🛒', active: showGear, toggle: () => setShowGear(v => !v), activeColor: 'bg-orange-500/90' }, - { key: 'tours', label: '🗺️', active: showTours, toggle: () => setShowTours(v => !v), activeColor: 'bg-cyan-500/90' }, - ].map(({ key, label, active, toggle, activeColor }) => ( + { key: 'spots', emoji: '🛹', active: showSpots, toggle: () => setShowSpots(v => !v) }, + { key: 'shops', emoji: '🏪', active: showShops, toggle: () => setShowShops(v => !v) }, + { key: 'gear', emoji: '🛒', active: showGear, toggle: () => setShowGear(v => !v) }, + { key: 'tours', emoji: '🗺️', active: showTours, toggle: () => setShowTours(v => !v) }, + ].map(({ key, emoji, active, toggle }) => ( ))} - {/* Divider */} - {user &&
} - - {/* Quick Snap */} + {/* Divider + Quick Snap */} {user && ( <> - - - Snap - + + )}