- Fix chat window going off-screen on mobile (was editing wrong file ChatWindow.jsx instead of ChatWindowNew.jsx)
- Add max-h-[65dvh] constraint to prevent overflow
- Replace scrollIntoView with scrollTop to prevent parent scroll
- Add keyboard detection with visualViewport API to move chat above keyboard
- Add missing translations for chat status (sending, sent, read)
- Add common.offline translation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add user-scalable=no to viewport meta
- Add touch-action: none to map containers and markers
- Prevents pinch-zoom triggering browser zoom instead of map zoom
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add top: 100% to dropdown to position below search bar
- Increase z-index to 9000 to ensure visibility above map elements
- Add overflow: visible to parent containers to prevent clipping
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When user searches, show all matching results regardless of time filter.
The time filter should only apply to normal map browsing, not explicit searches.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The load() function was using searchQuery from a stale closure,
causing it to skip fetches even after search was cleared.
Now uses searchResultsRef which is always current.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix search bar: single X button, form submit for Enter key
- Fix search clearing to properly refetch normal posts
- Hide native browser search cancel button with CSS
- Add island post support with island_username context
- Interactive island terrain with click-to-place posts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Island terrain now interactive like a map
- Click anywhere on your island to place a post at that position
- Pending post marker shows where you clicked with confirm/cancel buttons
- Posts saved with island_x and island_y coordinates (0-100%)
- PostComposer accepts islandX/islandY and includes in payload
- Posts display at their saved coordinates, fallback to random if not set
- Added translations for new UI elements (EN/FR)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- FAB (+) button now context-aware - includes island_username when on island
- PostComposer accepts islandUsername prop and includes in payload
- Removed custom post buttons from island terrain view
- Global __activeIslandContext set when viewing an island
- App.jsx handles sw:openPostCreator event for island posts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- "Mon île" badge appears on user's own island with home icon
- Floating FAB button to create post when viewing own island
- Badge has pulse animation to stand out
- FAB positioned bottom-right with pop animation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Removed auto-rotation, enabled drag/pan/zoom navigation
- Added navigation controls (zoom buttons)
- Islands placed in a grid with jitter (25° spacing)
- Clicking island opens full-screen overlay with island terrain
- Island shape rendered as SVG background (ocean, sand, grass, trees)
- Posts displayed scattered on the island terrain
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Islands now scattered across 300° world area using seeded random positions
- When clicking island, zooms to fill screen (zoom 16, pitch 0)
- Full-screen terrain overlay shows posts scattered on the island
- Posts positioned pseudo-randomly based on island seed
- Loading state while fetching island posts
- Empty state with "create first post" CTA for island owner
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Islands: clicking zooms camera to island position using flyTo()
- Planets: same zoom behavior + Create Planet button with modal
- Search bar repositioned higher (top: 52px, z-index: 600)
- Removed unnecessary Create Island button (islands auto-create with profiles)
- Added zoomed overlay UI with back button, info, and post actions
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When clicking an island or planet:
- Zooms into a full-screen terrain view
- Shows the island/planet surface as an interactive map
- Posts are displayed as markers on the terrain
- Back button to return to world view
- Post button for authenticated users (on own island)
Changes:
- Fixed search bar position to fixed top: 56px (below topbar)
- Removed Create Island button (islands auto-create with profile)
- Removed planet detail modal (replaced with terrain view)
- Added Island/Planet TerrainCanvas components
- Added fetchIslandPosts API function
- Added terrain CSS styles
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add profile button to view user profile from island marker
- Add edit button (owner only) to modify island
- Style island action buttons with hover animations
- Fix planets API endpoint to use /planets/nearby
- Fix create planet endpoint to use /planets/create
- Match search bar positioning with map overlay (0.7rem top)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove top world nav bar
- Add Islands/Planets buttons to Map search bar
- Add Map/Planets buttons to Islands search bar
- Add Map/Islands buttons to Planets search bar
- Move search bars to fixed position just below topbar
- Compact button styling matching map design
- v0.0.107
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add world navigation bar with 3 buttons to switch between worlds
- Create IslandsWorld component: personal metaverse with floating islands
- Create PlanetsWorld component: group metaverse with orbiting planets
- Each world has full-screen immersive MapLibre visualization
- Add search functionality with icon badges in Islands/Planets views
- Always start on Map view on page load
- Add translations for EN, FR, ES
- v0.0.104
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Documents Islands (personal spaces) and Planets (group spaces)
architecture, API endpoints, data models, and TODO roadmap.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Display planets as ringed spheres in outer ring
- Add getPlanetColor helper for planet themes
- Planet markers show name and member count
- Click handler ready for future navigation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fetch planets alongside islands with error handling
- Add filter tabs (All/Islands/Planets)
- Show planets count in header
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add planet API functions to client.js (fetchPlanets, createPlanet, etc.)
- Add updateIsland function for island customization
- Add sociowire:create-post event listener in App.jsx
- Add planets translations (EN, FR, ES)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix race condition between content filter effect and general filter effect
- Map content filters to proper content_type values for backend
- Links → link, Image → image/picture/photo, Text → post/system/news_enriched
- Live → live/camera/stream, Video → video
- Ensure forceFetch fires moveend to trigger refetch
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use event_tags (API field) instead of tags
- Add impact-based coloring (green positive, red negative, default neutral)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update renderTagPills to accept topicImpacts and apply color classes
- Tags colored by impact: negative=red, neutral=blue, positive=green
- Add CSS for tag color classes (sw-tag-negative, sw-tag-neutral, sw-tag-positive)
- Tags display below title in post modals
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Extract filename only (not full path) for deduplication
- Same image as https://domain/path/file.jpg and /path/file.jpg
were not being deduplicated because full paths differ
- Updated both PostDetailModal.jsx and markerManager.js
- Added fetchPostById to get full post data with image_urls
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
media_urls is for video files, image_urls is for images.
Updated PostDetailModal.jsx and markerManager.js to exclude
media_urls from gallery image collection.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix duplicate CSS rule that was overriding card size
- Increase scale from 0.45 to 0.52 (desktop) and 0.38 to 0.42 (mobile)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Handle _l, _m, _s size suffixes in addition to _large, _medium, _small
- Prevents carousel from showing duplicate images in different sizes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Larger padding, dot, and text for compact markers
- max-width increased from 180px to 220px
- font-size increased from 11px to 13px
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Position at 64px from top (desktop & mobile)
- z-index 830 (above FAB, below searchbar dropdown)
- Throttle map updates to 2 seconds
- Click outside to close expanded view
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Weather widget in top-left slot with compact pill display
- Click to expand 7-day forecast
- Uses apps system via Pulsar with Open-Meteo fallback
- Click outside to close expanded view
- Throttled updates (1/sec) when moving map
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add EventClustersLayer component with convex hull algorithm
- Clusters appear as organic shapes around member posts
- Only visible when Clusters filter is selected
- Add fetchEventClusters API function
- Update ContentFilters with cluster filter option
- Filter posts by cluster membership when filter active
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added detection for posts with images when content_type is empty
- Posts with images now correctly show as polaroid style instead of news
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Unknown content types (systems, news-scrapper) treated as text
- Filter "text" now includes news and unknown types
- Add KNOWN_CONTENT_TYPES set for type detection
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Always dispatch live-post-deleted when stream ends (removes marker)
- If saved, also dispatch live-post-created with video post
- Add commenter avatar fetching from profile API
- Display profile pictures in live chat comments
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fullscreen video preview with gradient overlays
- Pre-live: Collapsible settings panel for title/category
- Live: Floating comments section with toggle
- Modern pill-style badges for LIVE/viewers/timer
- Camera switch and settings buttons on right side
- End stream confirmation with Save/Discard/Continue options
- Websocket events for live-post-updated/deleted already handled
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add liveData state to MapView for title/category/subCategory
- Pass initialTitle, initialCategory, initialSubCategory to LiveKitBroadcast
- Skip form in LiveKitBroadcast when data provided from PostCreateModal
- Show ready state with title/category instead of redundant form
- Fix auto-scroll only on new comment (v0.0.90)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add justCommentedRef to track when user submits a comment
- Only scroll to comments bottom when user adds new comment
- Don't auto-scroll when modal opens with existing comments
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fetch profile avatars for commenters
- Apply post category gradient to comment avatars
- Add events, friends, market to CATEGORY_CONFIG
- Fix first comment race condition with setTimeout
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Category icon shown when post has no image (with gradient background)
- Author avatar fetched from profile API and displayed
- Logo position adjusted (6px down, 1px left)
- Comments auto-open when existing comments present
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
TopBar:
- Responsive logo size (adapts to mobile)
- Logo positioned correctly (+5px down, +2px right)
- Brand text "SOCIOWIRE" visible on all sizes
- Tagline "Wired to Life" hidden on mobile
- Smaller action buttons on mobile (w-7 → w-9 responsive)
- Friends button always visible (opens login if not auth)
- Removed duplicate search bar and location button
PostDetailModal:
- Truth score block made more compact
- Comments use correct API fields (username, body)
- Comments auto-open when there are existing comments
- Fixed comment API response handling (ok at end of spread)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add unified getPostType() detection for 6 post types: link, story, picture, video, live, camera
- Create dedicated Hero components for each post type
- Quebec511 cameras now use proxy stream /live/api/stream/{id}
- Fix media URLs to use relative paths (same origin)
- Add scroll lock when modal is open
- Generic link display (domain name instead of "Read article")
- Stories with images show gallery, text-only shows gradient
- Support long text content with proper scrolling
- Add i18n keys for modal (EN/FR/ES)
- markerManager.js now dispatches React event for all post types
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove old truthBadge click handler that cycled through votes
- Add check to skip vote if already voted that way (no double-click bug)
- Fetch initial vote state and show active button
- Update button styles to show current vote
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove duplicate truth vote section (was showing 2 truth scores)
- Add thumbs up/down buttons to existing truth badge
- Fix client.js to use truth_score (final score) instead of user_score (vote effect)
- Both regular and cluster modals have voting in the badge
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>