XR Cowork Hub is a Mixed Reality coworking experience for Meta Quest where multiple users can work together in the same real room using Passthrough, spatial XR panels, collaborative tools, instant private โFocus Bubblesโ, and fully isolated 3D Private Bubble Spaces.
Designed for the Meta Start Developer Competition, the project focuses on:
- ๐ง Collaboration
- ๐ Real-time voice groups
- ๐ Shared panels (Notes, PDFs, To-Dos, Sticky Notesโฆ)
- ๐ซง Private Bubbles (audio + visual isolation)
- ๐ฐ Private 3D Bubble Spaces
- โก Smooth MR user experience
- ๐ Zero-backend architecture (100% serverless)
-
๐บ๐ธ English Version
Read the English feature list -
๐ต๐น Portuguese Version (Portugal)
Ler a lista de funcionalidades
- See your real environment using Quest Passthrough.
- XR panels anchored in real space.
- Persistent workspace layout.
- Kanban Board
- Sticky Notes Wall
- NotePad
- PDF Viewer
- Pomodoro Timer
- To-Do List
- Snapshots
- AI Summary Panel
- Image Viewer
- Whiteboard Blocks
- Shared Calendar
- Website Preview
- Bookmark List
- World Clock
- Mind Map
- Mini Chat
Panels are movable / resizable / rotatable in 3D space.
-
Firestore sync for:
- Panel data
- Panel transforms
- Edits
- Participants
-
Presence indicators (online, typing, bubble group)
Private audio + visual isolation:
- Ghosting of other users (fade / desaturation)
- Only members of the bubble hear each other
- Ultra-simple implementation:
voiceGroupId
A fully separate, immersive private 3D meeting room that appears only for the selected users, combining:
- isolated voice communication
- a custom environment
- private spatial panels
- visual isolation from the main MR room
- dedicated Firestore state
This system extends the existing Focus Bubble logic by adding a premium private environment, making it feel like users are stepping into an actual separate meeting room, without ever leaving the XR coworking space.
- true private meeting room
- premium โbreakout roomโ feeling
- deeper collaboration zone
- real environment separation
- audio + visual + data isolation combined
- all while staying inside the same MR space
This transforms the Focus Bubble (audio-only) into a fully immersive private collaboration module, similar to stepping into a separate, high-end meeting room - but appearing instantly around the users.
rooms/{roomId}/participants/{userId}
rooms/{roomId}/panels/{panelId}
{
"type": "note",
"title": "Pitch Notes",
"content": "text...",
"visibility": "room", // room | owner | bubble
"bubbleGroupId": 0
}No separate โbubblesโ collection needed.
long newGroupId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
await participantRef.UpdateAsync("voiceGroupId", newGroupId);await participantRef.UpdateAsync("voiceGroupId", 0);bool SameGroup(Participant a, Participant b)
=> a.voiceGroupId == b.voiceGroupId;
avatar.SetGhost(!SameGroup(other, me));
audio.Mute(other) if (!SameGroup(other, me));
audio.Unmute(other) if ( SameGroup(other, me));BubbleSpaceManager.SpawnBubbleDome(groupMembers);Firestore.Update("inBubbleSpace", true);visibility = "bubble";
bubbleGroupId = currentGroupId;BubbleSpaceManager.DespawnCurrentBubble();/Assets
/Scripts
/Managers
RoomManager.cs
PanelManager.cs
ParticipantManager.cs
FocusBubbleManager.cs
BubbleSpaceManager.cs
FirestoreService.cs
AgoraVoiceManager.cs
/Prefabs
/Panels
/Avatars
/BubbleDome
/Scenes
MainScene.unity
- Unity 6000 / 2023 LTS
- URP
- OpenXR + Meta XR
- XR Interaction Toolkit
- Modular C#
- TextMeshPro
- Firestore
- Storage
- Realtime DB (optional)
- Auth (Anon)
- Agora Multichannel Voice
- React / Next.js
- Upload PDFs / Images
- Firebase Web SDK
git clone https://github.com/P-and-A-Dev/xr-cowork-hub.gitOpen unity-client/ in Unity Hub.
- XR Interaction Toolkit
- Firebase Unity SDK
- Agora SDK
Add google-services.json
Add your APP ID.
Open MainScene โ Play.
-
๐บ๐ธ English Version
Read the English tasklist -
๐ต๐น Portuguese Version (Portugal)
Ler a lista de tarefas
- Notes / To-Do / PDF panels
- Focus bubbles
- Private 3D Bubble Spaces
- Multi-user sync
- Web console uploads
- Multi-room
- AI assistants
- Persistent anchors
- Live screen sharing
- Gesture interactions
- Custom bubble themes
Apache 2.0
- Pietro Giacomelli
- Antonin Do Souto





{ "displayName": "Antonin", "voiceGroupId": 0, "isOnline": true, "inBubbleSpace": false, "lastSeen": "timestamp" }