diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx
index e2bb1b2..8750bab 100644
--- a/src/components/Layout.tsx
+++ b/src/components/Layout.tsx
@@ -295,9 +295,9 @@ function MobileNav({
);
})}
- {/* Profile / Login tab */}
+ {/* Profile / Login tab — goes straight to profile section when logged in */}
PILL_VISIBLE_DAYS ||
dismissed === latest.number
) {
diff --git a/src/pages/CommunityStatsPage.tsx b/src/pages/CommunityStatsPage.tsx
index e107b13..40f0f7d 100644
--- a/src/pages/CommunityStatsPage.tsx
+++ b/src/pages/CommunityStatsPage.tsx
@@ -50,6 +50,7 @@ function StatCard({
trustedValue,
color,
loading,
+ thisMonthDelta,
}: {
icon: React.ComponentType<{ className?: string }>;
value: number;
@@ -59,6 +60,8 @@ function StatCard({
trustedValue?: number;
color: string;
loading: boolean;
+ /** How many new items were added this month */
+ thisMonthDelta?: number;
}) {
return (
{value.toLocaleString()} {value.toLocaleString()}
@@ -155,6 +169,9 @@ export default function CommunityStatsPage() {
const recentMonthly = useMemo(() => stats?.monthly.slice(-12) ?? [], [stats]);
const recentCumulative = useMemo(() => stats?.cumulativeSpots.slice(-12) ?? [], [stats]);
+ // Current month delta — how many items were added this month
+ const thisMonth = useMemo(() => stats?.monthly[stats.monthly.length - 1], [stats]);
+
return (
{searchQuery || selectedCategory !== 'all' || trustFilter !== 'all'
- ? 'Try adjusting your filters or search query.'
- : 'Be the first to list your gear!'}
+ ? 'No gear matches your current filters. Try clearing them or searching something else.'
+ : 'Be the first to list your gear — decks, trucks, wheels, shoes, anything skate!'}
No listings found
{c.body}
- {user && ( +{c.body}
+ {user ? ( + ) : ( ++ Log in to create a profile +
)} + + Have questions? Check the FAQ → + ); } diff --git a/src/pages/MapPage.tsx b/src/pages/MapPage.tsx index ded1fe2..80608dd 100644 --- a/src/pages/MapPage.tsx +++ b/src/pages/MapPage.tsx @@ -33,6 +33,7 @@ import { useComments } from '@/hooks/useComments'; import { useStash, STASH_CATEGORIES, CONDITION_LABELS, RARITY_TIERS, type StashItem } from '@/hooks/useStash'; import { useAuthor } from '@/hooks/useAuthor'; import { useSatsToUsd } from '@/hooks/useExchangeRate'; +import { useLocalStorage } from '@/hooks/useLocalStorage'; import { genUserName } from '@/lib/genUserName'; import { useTranslation } from '@/contexts/LanguageContext'; import { SPOT_CATEGORIES, SPOT_TYPE_LABELS } from '@/lib/types'; @@ -326,37 +327,53 @@ function StashDrawer() { ); } -// Universal directions picker — works on GrapheneOS, iOS, any browser +// Detect iOS/macOS for smarter maps ordering +function isApplePlatform(): boolean { + if (typeof navigator === 'undefined') return false; + return /iPhone|iPad|iPod|Macintosh/.test(navigator.userAgent) && !/(Windows|Android)/.test(navigator.userAgent); +} + +// Universal directions picker — works on iOS, Android, desktop function DirectionsMenu({ lat, lon, label }: { lat: string; lon: string; label: string }) { const [open, setOpen] = useState(false); + const onApple = isApplePlatform(); - const options = [ + const allOptions = [ { - name: 'Maps (device default)', - sub: 'Opens your default maps app', - href: `geo:${lat},${lon}?q=${lat},${lon}(${label})`, - emoji: '📍', - }, - { - name: 'OpenStreetMap', - sub: 'Privacy-friendly, no account', - href: `https://www.openstreetmap.org/?mlat=${lat}&mlon=${lon}&zoom=17`, - emoji: '🗺️', + name: 'Apple Maps', + sub: 'iOS & macOS', + href: `https://maps.apple.com/?ll=${lat},${lon}&q=${label}&dirflg=d`, + emoji: '🍎', + appleOnly: true, }, { name: 'Google Maps', sub: 'Opens in browser or app', href: `https://maps.google.com/?q=${lat},${lon}`, emoji: '🔵', + appleOnly: false, }, { - name: 'Apple Maps', - sub: 'iOS & macOS', - href: `https://maps.apple.com/?ll=${lat},${lon}&q=${label}`, - emoji: '🍎', + name: 'OpenStreetMap', + sub: 'Privacy-friendly, no account', + href: `https://www.openstreetmap.org/?mlat=${lat}&mlon=${lon}&zoom=17`, + emoji: '🗺️', + appleOnly: false, + }, + { + name: 'Waze', + sub: 'Community-powered navigation', + href: `https://waze.com/ul?ll=${lat},${lon}&navigate=yes`, + emoji: '🔸', + appleOnly: false, }, ]; + // On Apple platforms: Apple Maps first. On others: Google first, no Apple. + const options = onApple + ? allOptions + : allOptions.filter(o => !o.appleOnly); + return ( <>