- Add truth vote section with thumbs up/down buttons and progress rail
- Fix image gallery deduplication in map overlay (add image_urls support)
- Both regular and cluster modals now have the truth voting UI
- Score display with color-coded rail (green/amber/red)
- Interactive button feedback on vote
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace complex truth rail with simple badge in post modal
- Truth score now displays like small cards (colored circle with number)
- Remove API calls that were overwriting correct truth scores
- Add vote functionality to badge (click to cycle vote)
- Fix truth score not updating due to WebSocket race conditions
- Various UI color and style improvements
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Islands Universe:
- Grid-based positioning to prevent overlap
- Much bigger islands (120px) with detailed SVG
- Beach rings, palm trees, huts, sparkles
- Info cards with username, post count, terrain type
- Zoomed out view to see all islands
Island Viewer:
- Bigger island visualization (320-400px)
- Terrain-specific decorations (emoji)
- Add Post button for island owners
- Share Island button with native share API
Post Modal:
- Hide "Open source" button when no URL
- Changed to link instead of disabled button
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add share menu with 3 options: Copy URL, Copy with coords, Share via
- Share URL includes lat/lon/zoom/category/time filters
- Restore shared view from URL params on page load
- Fix videos ALWAYS using simple markers (blue pin + play button)
- Camera pins: blue 64x48 with red LED pulse
- Video pins: blue 64x48 with play button overlay (no LED)
- Polaroid cards: reduced from 180x230 to 150x190
- Force camera/video to simple markers in fallback scoring
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Camera posts now use small blue pins with red flashing dot
- Fixed carousel gallery arrows for posts with multiple images
- Added title and source text to polaroid mini cards
- Bumped version to 0.0.21
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Live filter sends live,camera content types to API
- Camera pin border and pointer changed to sky blue (#0ea5e9)
- Camera pin background is sky blue when no thumbnail
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace LIVE badge with small pulsing red dot (6px)
- Hide camera marker entirely if no thumbnail available
- Cleaner, less intrusive design
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Camera markers show thumbnail preview from live stream
- Red LIVE badge with pulsing indicator
- Fallback to video icon if thumbnail unavailable
- Blue glow effect for camera pins
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Simple pins (hover card): z-index 150 on hover
- Compact cards: z-index 200 on hover
- Ensures hover cards are always above other markers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix truth voting: add error logging, prevent duplicate event listeners,
guard against concurrent votes
- Add real-time friends list updates in chat via custom event
- Make mobile contact dropdown narrower (260px) and stay on right side
- Add data-vote-bound attribute to prevent duplicate vote handlers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added toggleable sidebar showing friends list on right side of chat
- Small avatars with online status and unread badges
- Click friend to switch conversation
- Toggle button in chat header
- Hidden on mobile (use contacts dropdown instead)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Left FAB: category selection with expandable subcategories
- Right FAB: time filter (1h/6h/24h/7d/2w) + weather toggle
- Multi-select support for categories with split-color FAB
- Category rotation to keep subcategories on-screen
- Simplified search bar (+ and Island buttons only)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Skip marker refresh when post modal is open (update UI in-place)
- Add stopPropagation to vote buttons to prevent event bubbling
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Change Password popup modal in Island profile
- Convert avatar URLs to small variant (160x160) for thumbnails
- Add toSmallImageUrl utility function in client.js
- Update markerManager, IslandViewer, FriendsList, TopBar to use small images
- Backend now stores small variant for avatar uploads
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add 'validated' to the list of accepted URL params for email verification,
since Keycloak sends validated=1 instead of verified=1.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Weather posts display as compact blue pills with emoji + temperature
- Weather posts forced to 'simple' type (never full card) to avoid duplicates
- Parse temperature from title when not available in data
- Z-index set to 10 (just above regular posts, below UI elements)
- Add fetchWeatherPosts and fetchMapPins API functions
- Add Weather modal components (WeatherModal, HourlyForecast, DailyForecast)
- Add DayNightTerminator component for map
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add WebSocket-based chat with presence indicators
- Add message delivery status (sending/sent/read)
- Add notification badges for unread messages
- Add body scroll lock on mobile to prevent keyboard issues
- Add visibility change handling to refresh data on browser resume
- Add internationalization (i18n) with English/French support
- Add timezone-aware message timestamps
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Set autoWidenRef.current = true when user changes filter to prevent auto-widen
- Time filter now stays as user selected when changing category/subcategory
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update favicon and icons with new 2026 branding
- Fix video content display - skip hero replacement for video posts
- Add video_url to asset resolution in client.js
- Update LiveKit broadcast with egress recording
- Fix auth context and topbar styling
- Update PostCard and map styling
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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>
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>
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>
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>