{"id":30715849,"url":"https://github.com/vishalv47/spatialmeet","last_synced_at":"2026-04-09T20:33:56.687Z","repository":{"id":309615007,"uuid":"1036947420","full_name":"vishalv47/SpatialMeet","owner":"vishalv47","description":"Java Spring Boot spatial audio conferencing platform with WebRTC, real-time communication, and 3D spatial audio positioning for virtual meetings. Features user management, guest mode and room creation.","archived":false,"fork":false,"pushed_at":"2025-08-12T22:17:42.000Z","size":5,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-12T22:27:01.958Z","etag":null,"topics":["h2-database","java","jwt-authentication","maven","spring-boot","webrtc","websocket"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vishalv47.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-12T20:29:12.000Z","updated_at":"2025-08-12T22:17:45.000Z","dependencies_parsed_at":"2025-08-12T22:27:04.930Z","dependency_job_id":"26a999b3-d368-4efe-84d5-c30445ea2b04","html_url":"https://github.com/vishalv47/SpatialMeet","commit_stats":null,"previous_names":["vishalv47/spatialmeet"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/vishalv47/SpatialMeet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vishalv47%2FSpatialMeet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vishalv47%2FSpatialMeet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vishalv47%2FSpatialMeet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vishalv47%2FSpatialMeet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vishalv47","download_url":"https://codeload.github.com/vishalv47/SpatialMeet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vishalv47%2FSpatialMeet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273403951,"owners_count":25099300,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["h2-database","java","jwt-authentication","maven","spring-boot","webrtc","websocket"],"created_at":"2025-09-03T07:03:07.086Z","updated_at":"2026-04-09T20:33:56.636Z","avatar_url":"https://github.com/vishalv47.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SpatialMeet - Spatial Audio Conferencing Platform\n\nA modern Java Spring Boot application for spatial audio conferencing with real-time communication capabilities.\n\n## Features\n\n- **User Management System**\n  - User registration and authentication\n  - JWT-based security\n  - Role-based access control (USER, MODERATOR, ADMIN)\n  - User presence tracking\n  - **Guest Mode**: Quick access without registration\n\n- **Room Management**\n  - Create and join conference rooms\n  - Room codes for easy access\n  - Public and private rooms\n  - Participant limits\n  - Real-time participant tracking\n\n- **Spatial Audio Support**\n  - 3D positioning system for participants\n  - Real-time position updates\n  - Audio settings management (microphone, speaker, volume)\n\n- **WebRTC Integration**\n  - WebRTC signaling server\n  - Peer-to-peer connection establishment\n  - ICE candidate exchange\n  - Offer/Answer model support\n\n- **Real-time Communication**\n  - WebSocket-based messaging\n  - Real-time position updates\n  - Audio settings synchronization\n  - User join/leave notifications\n\n## Technology Stack\n\n- **Backend**: Java 17, Spring Boot 3.2.8\n- **Security**: Spring Security, JWT\n- **Database**: H2 (development), MySQL (production)\n- **Real-time**: WebSocket, STOMP\n- **Frontend**: HTML5, CSS3, JavaScript, Font Awesome\n- **Build Tool**: Maven\n\n## API Endpoints\n\n### Authentication\n- `POST /api/auth/signin` - User login\n- `POST /api/auth/signup` - User registration\n- `POST /api/auth/signout` - User logout\n\n### Guest Access\n- `POST /api/guest/enter` - Enter as guest with optional display name\n- `GET /api/rooms/public` - Get public rooms (guest accessible)\n\n### Room Management\n- `GET /api/rooms` - Get public rooms\n- `GET /api/rooms/my` - Get user's rooms\n- `POST /api/rooms` - Create new room\n- `GET /api/rooms/{roomCode}` - Get room details\n- `POST /api/rooms/{roomCode}/join` - Join room\n- `POST /api/rooms/{roomCode}/leave` - Leave room\n- `GET /api/rooms/{roomCode}/participants` - Get room participants\n\n### WebSocket Endpoints\n- `/ws` - WebSocket connection endpoint\n- `/app/room/{roomCode}/offer` - WebRTC offer\n- `/app/room/{roomCode}/answer` - WebRTC answer\n- `/app/room/{roomCode}/ice-candidate` - ICE candidate\n- `/app/room/{roomCode}/position` - Position update\n- `/app/room/{roomCode}/audio-settings` - Audio settings\n\n## Getting Started\n\n### Prerequisites\n- Java 17 or higher\n- Maven 3.6 or higher\n\n### Running the Application\n\n1. Clone the repository\n2. Navigate to the project directory\n3. Run the application:\n   ```bash\n   mvn spring-boot:run\n   ```\n\nThe application will start on `http://localhost:8083/api/`\n\n### Accessing the Application\n- **Main Interface**: http://localhost:8083/api/\n- **Guest Mode**: Click \"Continue as Guest\" for quick access\n- **H2 Database Console**: http://localhost:8083/api/h2-console\n\n## Usage\n\n### For Users\n1. **Login**: Use existing credentials or register a new account\n2. **Guest Mode**: Click \"Continue as Guest\" for immediate access\n3. **Create Room**: Click the centered \"Create New Room\" button\n4. **Join Room**: Enter a room code or select from public rooms\n5. **Audio Settings**: Configure microphone, speaker, and volume settings\n6. **Spatial Positioning**: Move around the virtual space for spatial audio\n\n### For Developers\n1. **API Testing**: Use tools like Postman to test REST endpoints\n2. **WebSocket Testing**: Connect to `/ws` endpoint for real-time features\n3. **Database Inspection**: Use H2 console to view data structure\n4. **Frontend Development**: Modify files in `src/main/resources/static/`\n\n### Database Console (Development)\nAccess H2 console at: `http://localhost:8083/api/h2-console`\n- JDBC URL: `jdbc:h2:mem:spatialmeet`\n- Username: `sa`\n- Password: `password`\n\n## Configuration\n\n### Application Properties\nKey configuration properties in `application.properties`:\n\n```properties\n# Server Configuration\nserver.port=8083\nserver.servlet.context-path=/api\n\n# Database Configuration\nspring.datasource.url=jdbc:h2:mem:spatialmeet\nspring.datasource.username=sa\nspring.datasource.password=password\n\n# JWT Configuration\napp.jwt.secret=mySecretKey\napp.jwt.expiration=86400000\n\n# WebSocket Configuration\napp.websocket.allowed-origins=http://localhost:3000,http://localhost:8083\n```\n\n## Architecture\n\n### Frontend Features\n- **Responsive Design**: Mobile-friendly interface with CSS Grid and Flexbox\n- **Guest Mode**: Modal-based guest entry with optional display name\n- **Real-time UI**: Live updates for room participants and audio settings\n- **Modern Styling**: Font Awesome icons and professional color scheme\n- **WebSocket Integration**: SockJS and STOMP client for real-time communication\n\n### Entity Model\n- **User**: User account information and authentication\n- **Role**: User roles and permissions\n- **Room**: Conference room information\n- **UserRoom**: Participant data with spatial positioning\n\n### Security\n- JWT token-based authentication\n- Role-based authorization\n- CORS configuration for cross-origin requests\n\n### Real-time Features\n- WebSocket connections using STOMP protocol\n- Topic-based messaging for room-wide broadcasts\n- Queue-based messaging for peer-to-peer communication\n\n## WebRTC Integration\n\nThe platform provides WebRTC signaling through WebSocket messages:\n\n1. **Connection Establishment**: Users exchange offers and answers\n2. **ICE Candidate Exchange**: Network connectivity information\n3. **Spatial Audio**: 3D positioning for audio spatialization\n\n## Development\n\n### Project Structure\n```\nsrc/main/java/com/spatialmeet/\n├── config/           # Configuration classes\n├── controller/       # REST and WebSocket controllers\n├── dto/             # Data Transfer Objects\n├── entity/          # JPA entities\n├── repository/      # Data repositories\n├── security/        # Security configuration\n└── service/         # Business logic services\n\nsrc/main/resources/\n├── static/          # Frontend files (HTML, CSS, JS)\n│   ├── index.html   # Main application interface\n│   ├── styles.css   # Application styling\n│   └── script.js    # Frontend JavaScript logic\n└── application.properties\n\nfrontend/            # Development frontend files\n├── index.html\n├── styles.css\n└── script.js\n```\n\n### Building\n```bash\nmvn clean compile\n```\n\n### Testing\n```bash\nmvn test\n```\n\n### Packaging\n```bash\nmvn clean package\n```\n\n## Troubleshooting\n\n### Common Issues\n\n1. **Port Already in Use**\n   - Change the port in `application.properties`: `server.port=8084`\n   - Or kill existing Java processes: `taskkill /f /im java.exe`\n\n2. **404 Not Found**\n   - Make sure to use the correct URL: `http://localhost:8083/api/`\n   - The context path `/api` is required\n\n3. **WebSocket Connection Issues**\n   - Check CORS settings in `WebSocketConfig.java`\n   - Verify allowed origins match your frontend URL\n\n4. **Database Connection Issues**\n   - H2 database is in-memory and recreated on each restart\n   - Check H2 console URL: `http://localhost:8083/api/h2-console`\n\n5. **Guest Mode Not Working**\n   - Ensure guest endpoints are permitted in security configuration\n   - Check browser console for JavaScript errors\n\n### Performance Tips\n- Use browser developer tools to monitor WebSocket connections\n- Check network tab for failed API requests\n- Monitor application logs for errors and warnings\n\n## Preview\n\n![image alt](https://github.com/vishalv47/SpatialMeet/blob/9d219b1fae9002e5607e05181b79a9f3eef92e04/Screenshot.png)\n\n## License\n\nThis project is licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvishalv47%2Fspatialmeet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvishalv47%2Fspatialmeet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvishalv47%2Fspatialmeet/lists"}