Skip to content

PGADS-Dev/xr-cowork-hub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

55 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿงญ XR Cowork Hub

Mixed Reality Coworking Platform โ€“ Meta Quest / Unity / Firebase / Agora

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)

๐ŸŽจ UX Flow

UX Flow


๐Ÿ“ฆ Features

๐Ÿš€ Features list

๐Ÿงญ Passthrough MR Room

  • See your real environment using Quest Passthrough.
  • XR panels anchored in real space.
  • Persistent workspace layout.

๐Ÿ“‚ XR Spatial Panels

  • 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.


๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ Multi-user Real-Time Collaboration

  • Firestore sync for:

    • Panel data
    • Panel transforms
    • Edits
    • Participants
  • Presence indicators (online, typing, bubble group)


๐Ÿ”‡ Focus Bubbles

Basic Focus Bubbles

Private audio + visual isolation:

  • Ghosting of other users (fade / desaturation)
  • Only members of the bubble hear each other
  • Ultra-simple implementation: voiceGroupId

๐Ÿฐ Private 3D Bubble Spaces (Premium Private Rooms)

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.

What this achieves

  • 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.


๐Ÿ— Architecture Diagram

Architecture Diagram


๐Ÿ—„๏ธ Backend - Firestore Data Model

participants

rooms/{roomId}/participants/{userId}

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

panels

rooms/{roomId}/panels/{panelId}

{
  "type": "note",
  "title": "Pitch Notes",
  "content": "text...",
  "visibility": "room",     // room | owner | bubble
  "bubbleGroupId": 0
}

๐Ÿ”„ Panel Sync Sequence Diagram

Panel Sync


๐Ÿซง Focus Bubbles Sequence Diagram

Focus Bubbles


๐ŸŽค Focus Bubbles โ€“ Technical Design

โœ” Only one field: voiceGroupId

No separate โ€œbubblesโ€ collection needed.

Create a bubble

long newGroupId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
await participantRef.UpdateAsync("voiceGroupId", newGroupId);

Leave bubble

await participantRef.UpdateAsync("voiceGroupId", 0);

Unity logic

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));

๐Ÿฐ Private Bubble Spaces - Technical Details

Spawn bubble

BubbleSpaceManager.SpawnBubbleDome(groupMembers);

Mark participants inside

Firestore.Update("inBubbleSpace", true);

Bubble-only panels

visibility = "bubble";
bubbleGroupId = currentGroupId;

Leave bubble

BubbleSpaceManager.DespawnCurrentBubble();

๐Ÿงฉ Unity Architecture

/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 Class Diagram

Unity Class Diagram


๐Ÿงฑ Tech Stack

๐ŸŽฎ Unity Client

  • Unity 6000 / 2023 LTS
  • URP
  • OpenXR + Meta XR
  • XR Interaction Toolkit
  • Modular C#
  • TextMeshPro

๐Ÿ”ฅ Firebase Backend (Serverless)

  • Firestore
  • Storage
  • Realtime DB (optional)
  • Auth (Anon)

๐ŸŽค Voice

  • Agora Multichannel Voice

๐ŸŒ Web Console

  • React / Next.js
  • Upload PDFs / Images
  • Firebase Web SDK

๐Ÿš€ Getting Started (Developers)

1. Clone project

git clone https://github.com/P-and-A-Dev/xr-cowork-hub.git

2. Open Unity

Open unity-client/ in Unity Hub.

3. Install packages

  • XR Interaction Toolkit
  • Firebase Unity SDK
  • Agora SDK

4. Configure Firebase

Add google-services.json

5. Configure Agora

Add your APP ID.

6. Run

Open MainScene โ†’ Play.


๐Ÿ”ฎ Roadmap

๐Ÿ“‹ Tasklist

MVP

  • Notes / To-Do / PDF panels
  • Focus bubbles
  • Private 3D Bubble Spaces
  • Multi-user sync
  • Web console uploads

Future

  • Multi-room
  • AI assistants
  • Persistent anchors
  • Live screen sharing
  • Gesture interactions
  • Custom bubble themes

๐Ÿ“„ License

Apache 2.0


๐Ÿ‘ฅ Authors

  • Pietro Giacomelli
  • Antonin Do Souto

Releases

No releases published

Packages

 
 
 

Contributors