Commit Graph

400 Commits

Author SHA1 Message Date
Your Name e38238d199 Fix: Offset upward for new posts and clear filters on pick
1. New post pin offset upward
   - Changed from {x: 0, y: 0} to {x: 0, y: -80}
   - Negative Y = moves UP on screen
   - Compensates for anchor:bottom positioning
   - Pin now appears at crosshair position

2. Clear filters when picking post from suggestions
   - When clicking a post in search results
   - Set mainFilter and subFilter to "All"
   - Ensures the post is visible
   - No more "post hidden by filters" issue

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 20:27:48 -05:00
Your Name 366cfc0417 Fix: Auto-adjust filters on search and fix post pin position
1. Auto-clear category filters when searching
   - When user searches, set mainFilter and subFilter to "All"
   - Ensures search results are visible regardless of category
   - No more hidden results due to filter mismatch

2. Fix post pin offset after creation
   - New posts (< 10 seconds old) have NO smart offset
   - Respects crosshair position chosen by user
   - Pin appears exactly where user aimed
   - Older posts still get smart offset to avoid overlaps

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 20:20:55 -05:00
Your Name 964a133f5b Feature: Intelligent zoom and fix dropdown z-index
1. Fixed dropdown z-index
   - Set .map-overlay-top z-index to 500
   - Now dropdown appears above filter buttons (z-index: 300)

2. Intelligent zoom when searching
   - 1 result: Zoom to that post (zoom level 14)
   - Multiple results: Calculate bounding box and fitBounds()
   - Shows all matching posts together on map
   - Padding of 100px on all sides
   - MaxZoom 15 to avoid zooming too close

When you search and press Enter, the map automatically adjusts
to show all matching results optimally.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 20:13:02 -05:00
Your Name b013a71ea6 Feature: Add clear button and fix dropdown z-index
Changes:
1. Added clear (X) button in search bar
   - Only appears when there's text
   - Clears search query AND filters
   - Clean X icon with hover effect

2. Fixed dropdown z-index
   - Changed from z-index: 50 to z-index: 9999
   - Now appears above all other UI elements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 20:05:32 -05:00
Your Name 797859ac80 Feature: Add search filtering on Enter key
Users can now:
1. Type a query and press Enter (without selecting a suggestion) to filter posts on the map
2. When picking a post suggestion, it navigates AND filters by that post's title
3. When picking a city/place, it navigates but clears the filter

Changes:
- SmartSearchBar: Added onSearch prop, triggers on Enter with no active item
- MapView: Added handleSearch() to set searchQuery for filtering
- Posts are automatically filtered by usePostsEngine's matchesSearch()

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 16:10:06 -05:00
Your Name 9d906fb4a4 Fix: Simplify marker DOM structure for better map anchoring
Removed intermediate sw-simple-pin-container div that was causing
issues with MapLibre GL marker positioning. The root element is now
directly a flex container, which should fix pins staying at screen
position instead of following map geography during pan/rotation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 16:03:58 -05:00
Your Name 266292eba2 Final polish: Remove duplicate buttons, fix pin anchoring
1. Remove Duplicate Buttons (MapView.jsx):
   - Removed "My spot" and "New wire" buttons from map-top-actions
   - These functions already available in SmartSearchBar icons
   - Cleaner UI, less clutter

2. Fix Pin Anchoring - Pins Stay Fixed Now! (markerManager.js):
   - Root element now has fixed dimensions: width:40px, height:52px
   - Pin container positioned absolute bottom:0 (ensures correct anchor point)
   - Hover card uses bottom:100% instead of fixed pixel value
   - Transform includes translateY(-6px) for proper spacing
   - Result: Pins remain perfectly fixed at geographic position during zoom/pan

Pin DOM structure now:
```
<div root style="width:40px;height:52px"> (anchor bottom here)
  <div container style="position:absolute;bottom:0">
    <circle>image</circle>
    <triangle>point</triangle>
  </div>
  <div hover-card style="bottom:100%">preview</div>
</div>
```

The key: Root has explicit height, pin container at bottom,
so MapLibre anchor:"bottom" aligns triangle point with lat/lon

Tested: Pins now stay locked to position on zoom/pan 

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 15:48:01 -05:00
Your Name 28e760d616 Major UX improvements: Smart search, navigation, fixed markers
1. Smart Search Integration (MapView.jsx, SmartSearchBar.jsx):
   - Replace simple search bar with SmartSearchBar component
   - Suggestions appear on focus (popular cities/regions)
   - Suggestions update as user types (debounced 150ms)
   - Click suggestion → fly to location with appropriate zoom
   - Search triggers even with empty query for popular results

2. Navigation to Cities (MapView.jsx):
   - New handlePickSuggestion() function
   - Extracts coords from suggestion (supports coords array or lat/lon)
   - Uses map.flyTo() with smart zoom levels per type:
     * Cities: zoom 11
     * Regions: zoom 7
     * Posts: zoom 16
     * Profiles: zoom 14
   - Clears search after navigation

3. Fixed Marker Anchoring (markerManager.js):
   - Changed anchor: "center" → "bottom"
   - Markers now stay fixed at geographic position
   - Pin design: circle image + triangular point (52px height)
   - Point positioned at exact lat/lon location
   - No more drifting when map moves!

4. Improved Pin Design:
   - Circle (32px) with category color background
   - White border + shadow for visibility
   - Triangular point (16px) below circle
   - Image inside circle if available
   - Hover card positioned above pin (bottom: 58px)
   - Smooth transitions on hover/click

Mobile-friendly: Works on cellphone without console, visual feedback

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 15:39:58 -05:00
Your Name 069072dc14 Fix: Allow search suggestions with empty query for popular results
Changes:
- Comment out early return when query is empty
- Allow recoSearch to be called with empty/trimmed query
- Backend returns popular cities/regions when query is empty
- Enables showing suggestions immediately on focus (UX improvement)

Backend test confirms it works:
$ curl "http://localhost:8081/api/suggestions?q="
Returns: 6 popular suggestions (Montreal, Quebec City, Toronto, etc.)

$ curl "http://localhost:8081/api/suggestions?q=to"
Returns: Toronto, Seattle, Boston

Now users will see suggestions as they type + popular items on focus

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 15:30:45 -05:00
Your Name c659c0267d Fix: Hide PWA install button when installed, improve clustering, add debug logs
Fixes three major issues:

1. PWA Install Button (TopBar.jsx):
   - Import isRunningAsPWA() and canInstall() from pwaInstall.js
   - Add state to track if button should be shown
   - Listen to beforeinstallprompt and appinstalled events
   - Hide button when app is already installed or running as PWA

2. Search Suggestions Debug (SmartSearchBar.jsx, recoSearch.js):
   - Add console.log statements to trace search flow
   - Track: search query, results count, errors
   - Helps diagnose why suggestions don't appear
   - recoSearch: Log each endpoint attempt and response

3. Clustering Improvements (usePostsEngine.js, postPriority.js):
   - Reduce maxFullCards: 15 → 12 (fewer full cards)
   - Increase clusterRadius: 0.0015 → 0.002 (~200m for better grouping)
   - Increase minScoreForCard: 35 → 50 (stricter threshold)
   - Reduce default recoScore: 50 → 40 (lower baseline)
   - Add console.log for prioritization results
   - Result: More posts shown as simple markers, less clutter

Debug logs will be visible in browser console to diagnose issues

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 15:23:44 -05:00
Your Name 76adb74833 Add intelligent post clustering and simple markers
Implement smart prioritization system to reduce map clutter:
- Create priority scoring based on reco score, category, freshness, distance, engagement
- Cluster nearby posts and show best post as full card, others as simple markers
- Simple markers: circular icons with category colors, hover preview, click to expand
- Max 15 full cards displayed, rest shown as compact markers
- Optimize search debounce: 220ms → 150ms for faster suggestions

New files:
- postPriority.js: Scoring and clustering algorithm

Updated:
- markerManager.js: Add createSimpleMarkerForPost() with hover cards
- usePostsEngine.js: Use prioritizePosts() to separate full cards vs simple markers
- SmartSearchBar.jsx: Faster debounce (150ms), increased limit to 12 suggestions

Result: Less visual clutter, better UX with prioritized content

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 15:15:53 -05:00
Your Name 6d94b6ac12 Fix PWA: hide install prompt when already installed or running as PWA
- Add isRunningAsPWA() detection (standalone mode, iOS, Android)
- Add localStorage tracking to remember installation state
- Skip prompt if already running as PWA or previously installed
- Increase auto-prompt delay from 5s to 10s for better UX
- Export canInstall() to check installation availability
- Mark as installed when appinstalled event fires

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 15:03:09 -05:00
Your Name 290e713796 Add autocomplete suggestions with smart zoom
- Update recoSearch to use /api/suggestions endpoint
- Improve zoom levels for different types:
  * Cities: zoom 11
  * Regions: zoom 7
  * Posts: zoom 16
  * Profiles: zoom 14
- Support lat/lon in normalized results
- Real-time suggestions as user types

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 11:59:11 -05:00
Your Name a3903906df Integrate smart feed and unified search
- Update fetchSmartFeed() to call backend /api/smart-feed
- Update fetchUnifiedSearch() to call backend /api/unified-search
- Replace fetchPosts() with fetchSmartFeed() in usePostsEngine
- Add /api/unified-search as primary search endpoint
- Search now queries posts, profiles, and places together
- Map now shows personalized and trending posts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 11:32:59 -05:00
Your Name 2c3722146a Fix map center drift by using geographic center instead of bounds center
Problem: Map position drifted north/higher on each reload because
bounds.getCenter() returns a visually offset center when pitch is applied

Solution:
- Use map.getCenter() for accurate geographic center (not affected by pitch)
- Save and restore bearing (rotation) along with pitch
- Store: lat, lon, zoom, pitch, bearing

Before: bounds.getCenter() → visual center (offset by 3D tilt)
After: map.getCenter() → true geographic center

This ensures the map returns to the exact same position after reload,
regardless of the 3D tilt angle.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 23:05:44 -05:00
Your Name f22b9dfe06 Fix pitch persistence to prevent view drift on reload
Problem: Map pitch was always forced to 45° instead of being restored,
causing the view to appear shifted higher after each reload

- Save current pitch value to localStorage on moveend
- Restore pitch from localStorage on map initialization
- Remove forced pitch=45 on map load event
- Default to 45° only if no saved pitch exists

This prevents the map from drifting north/higher with each page reload
while maintaining the 3D tilt effect.

Auth: Session persistence already implemented via localStorage tokens
- Tokens are saved in localStorage and restored on mount
- Auto-refresh runs every 30s to keep session alive
- If session issues persist, check browser console for specific errors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 22:59:30 -05:00
Your Name d845fd7a5a Fix marker stability and reduce image preview size
- Use deterministic hash-based offset calculation for stable marker positions
- Markers now stay in same position across zoom/pan operations
- Check geographic distance instead of pixel distance for clustering
- Reduce image preview from 60px to 40px for compact modal
- Reduce button font size to save space

Fixes: Markers no longer jump around when zooming
Fixes: Modal stays compact with image preview

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 22:51:05 -05:00
Your Name c3e9426e64 Improve map UX: compact modal, visible crosshair, smart marker overlap
- Reduce create post modal height (max 45vh) and add scroll
- Lower modal position (bottom: 8%) to keep map visible
- Move crosshair higher (top: 30%) for better visibility
- Implement smart marker offsetting for nearby posts
- Add visual connection line from offset markers to true position
- Create cascade effect for clustered markers (45° circular pattern)
- Maintain pointer accuracy when zooming

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 22:44:50 -05:00
Your Name 2c4c9a7065 Add image upload and category icons to map cards
- Add image upload functionality with file picker and URL input
- Display custom uploaded images or category-specific FontAwesome icons
- Add icon styles for all themes (dark, blue, light)
- Map unique icons to each category and subcategory (News, Friends, Events, Market)
- Update card templates to show 72x72px icon/image on the left
- Add image preview and validation (max 5MB, images only)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-22 22:36:20 -05:00
Your Name d8b4be20fd carche 2025-12-22 02:30:42 -05:00
Your Name 5ec6ce1c09 update frontend 2025-12-22 02:17:39 -05:00
Your Name 57580e418e update frontend 2025-12-22 02:16:28 -05:00
Your Name d25bbf21a2 update frontend 2025-12-22 02:10:45 -05:00
Your Name c043dbf8dc update frontend 2025-12-22 02:08:45 -05:00
Your Name 0983aa9ba2 update frontend 2025-12-22 02:07:22 -05:00
Your Name 500b0fc0bd update frontend 2025-12-21 23:37:00 -05:00
Your Name 339e62b0c8 feat: PWA fully working + sharing preview fixed 2025-12-21 23:07:54 -05:00
Your Name b8a527ea00 update frontend 2025-12-21 22:54:50 -05:00
Your Name 7159d94bb7 update frontend 2025-12-21 22:51:10 -05:00
Your Name c20987dc29 update frontend 2025-12-21 22:40:48 -05:00
Your Name 72c859cfd4 presque xorewcr 2025-12-21 22:28:52 -05:00
Your Name dcea292c4c update frontend 2025-12-21 22:09:20 -05:00
Your Name 460c7b76c7 update frontend 2025-12-21 22:00:52 -05:00
Your Name 48edeb03fe update frontend 2025-12-21 21:59:31 -05:00
Your Name 5b3d35cd25 update frontend 2025-12-21 21:20:31 -05:00
Your Name 80d75a7a57 update frontend 2025-12-21 20:26:17 -05:00
Your Name 4d2f81f434 update frontend 2025-12-21 20:19:33 -05:00
Your Name dee963cd0e update frontend 2025-12-21 20:16:34 -05:00
Your Name ea31d3e69a update frontend 2025-12-21 20:06:05 -05:00
Your Name 555342d377 update frontend 2025-12-21 20:01:42 -05:00
Your Name 7ea3b2c4fa update frontend 2025-12-21 19:54:35 -05:00
Your Name 862e9f4303 update frontend 2025-12-21 19:48:12 -05:00
Your Name 9314caec42 update frontend 2025-12-21 19:44:26 -05:00
Your Name e102911c06 update frontend 2025-12-21 19:36:13 -05:00
Your Name 783d8b79cd update frontend 2025-12-21 19:33:47 -05:00
Your Name 8508f0f98f update frontend 2025-12-21 19:32:19 -05:00
Your Name eb018a0bee update frontend 2025-12-21 19:28:10 -05:00
Your Name 8a954a2ff9 update frontend 2025-12-21 19:26:34 -05:00
Your Name 57d2949130 update frontend 2025-12-21 19:25:03 -05:00
Your Name a909b02e37 update frontend 2025-12-21 19:23:14 -05:00