From 8fd4ed22f9e73327385124695eecf4de00ab9d9e Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Thu, 19 Feb 2026 00:20:30 +0000 Subject: [PATCH] Add floating QR code button on map for easy room joining MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tap the QR icon (bottom-right on mobile, top-right on desktop) to show an inline QR code overlay. Scan-to-join — tapping the QR dismisses it. Co-Authored-By: Claude Opus 4.6 --- src/app/[slug]/page.tsx | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/app/[slug]/page.tsx b/src/app/[slug]/page.tsx index 77e56b1..eca4a69 100644 --- a/src/app/[slug]/page.tsx +++ b/src/app/[slug]/page.tsx @@ -17,6 +17,7 @@ import ImportModal from '@/components/room/ImportModal'; import type { ImportedPlace } from '@/components/room/ImportModal'; import InstallBanner from '@/components/room/InstallBanner'; import JoinForm from '@/components/room/JoinForm'; +import { QRCodeSVG } from 'qrcode.react'; import type { Participant, ParticipantLocation, LocationSource, Waypoint } from '@/types'; // Dynamic import for map to avoid SSR issues with MapLibre @@ -39,6 +40,7 @@ export default function RoomPage() { const [showParticipants, setShowParticipants] = useState(true); const [showMeetingPoint, setShowMeetingPoint] = useState(false); const [showImport, setShowImport] = useState(false); + const [showQR, setShowQR] = useState(false); const [currentUser, setCurrentUser] = useState<{ name: string; emoji: string } | null>(null); const [selectedParticipant, setSelectedParticipant] = useState(null); const [selectedWaypoint, setSelectedWaypoint] = useState(null); @@ -428,6 +430,41 @@ export default function RoomPage() { )} + {/* Floating QR button */} + + + {/* QR code overlay */} + {showQR && ( +
setShowQR(false)} + > + +

Scan to join

+
+ )} + {/* Connection status indicator */} {!isConnected && (