# OpenSpeak Specifications This directory contains comprehensive feature specifications for the OpenSpeak project - an open-source TeamSpeak alternative built in Go. ## Overview These specifications define the architecture, design, and implementation details for all major components of OpenSpeak. They serve as reference documentation for development and ensure consistency across the project. ## Specification Files ### Core Features 1. **[001-audio-streaming.md](001-audio-streaming.md)** - AUDIO-001 - Real-time voice packet capture, encoding, transmission, and playback - Opus codec configuration and quality settings - Client and server audio pipeline architecture - Jitter buffer management and error handling - Performance targets and latency requirements 2. **[002-authentication.md](002-authentication.md)** - AUTH-001 - Authentication and authorization system - Phase 1: Admin token-based authentication - Phase 2: User accounts and password authentication (future) - Permission models and access control - Security requirements and token management 3. **[003-channel-management.md](003-channel-management.md)** - CHANNEL-001 - Voice channel creation, management, and lifecycle - Public/private channels with permission-based access - Member management and capacity control - Channel events and state tracking - Soft delete (archive) and hard delete operations 4. **[004-user-presence.md](004-user-presence.md)** - PRESENCE-001 - Online status and presence tracking - User session management - Idle detection and heartbeat handling - Mute status tracking (microphone and speaker) - Real-time presence event distribution ### Infrastructure & Implementation 5. **[005-client-application.md](005-client-application.md)** - CLIENT-001 - Desktop GUI client application - UI layout and screen design - User interactions and workflows - Audio subsystem integration - Configuration and settings management - Error handling and connection recovery 6. **[006-server-core.md](006-server-core.md)** - SERVER-001 - Server architecture and component design - Package structure and organization - Core managers: Auth, Channel, Presence, Voice - Concurrency model with goroutines and channels - Configuration management and logging - Graceful shutdown and error handling 7. **[007-protocol-definition.md](007-protocol-definition.md)** - PROTO-001 - Protocol Buffers definitions - gRPC service specifications - Message types for all services - Backwards compatibility strategy - Message versioning and evolution - Proto compilation instructions ### Operations & Development 8. **[008-deployment.md](008-deployment.md)** - DEPLOY-001 - Server deployment options (standalone, Docker, systemd) - Configuration management and environment variables - System requirements and resource planning - TLS and security configuration - Monitoring, logging, and health checks - Backup, recovery, and upgrade procedures 9. **[009-development-guidelines.md](009-development-guidelines.md)** - DEV-001 - Development environment setup - Build, test, and quality assurance commands - Code style and naming conventions - Testing standards and coverage goals - Git workflow and commit conventions - Debugging techniques and performance optimization ## Quick Start ### For Developers 1. Start with [009-development-guidelines.md](009-development-guidelines.md) for setup 2. Review [006-server-core.md](006-server-core.md) for architecture 3. Consult [007-protocol-definition.md](007-protocol-definition.md) for proto definitions 4. Read feature specs for implementing specific components ### For DevOps 1. Review [008-deployment.md](008-deployment.md) for deployment options 2. Check [006-server-core.md](006-server-core.md) for configuration 3. Consult for operational procedures and monitoring ### For Understanding Features 1. [001-audio-streaming.md](001-audio-streaming.md) - How voice works 2. [002-authentication.md](002-authentication.md) - How access control works 3. [003-channel-management.md](003-channel-management.md) - How channels work 4. [004-user-presence.md](004-user-presence.md) - How presence tracking works 5. [005-client-application.md](005-client-application.md) - How the UI works ## Key Design Decisions ### Architecture - **Client-Server Model:** Separate client and server applications - **gRPC+Protobuf:** Efficient binary protocol with streaming support - **Server Broadcast:** Server broadcasts voice packets to channel members (not P2P or SFU) - **Modular by Feature:** Packages organized around domain concepts ### Technology - **Language:** Go (server), Go with Fyne (client GUI) - **Audio:** Opus codec for low-latency, high-quality voice - **Concurrency:** Goroutines and channels for scalability - **Storage:** In-memory (MVP), database support (future) ### Performance Targets - **Voice Latency:** <100ms end-to-end - **Audio Bitrate:** 64 kbps default (8-128 kbps range) - **Jitter Buffer:** 50ms (configurable 20-100ms) - **Server Capacity:** 100+ concurrent users per server (scalable) ## Specification Conventions ### Status Levels - **Planned:** Feature specification complete, implementation scheduled - **In Progress:** Implementation started - **Complete:** Implementation done, tested, and deployed ### Priority Levels - **Critical:** Must have for MVP, foundation for other features - **High:** Important for initial release - **Medium:** Nice to have for v1.0 - **Low:** Future enhancement ### Phase Strategy - **Phase 1 (MVP):** Core voice communication with admin tokens - **Phase 2:** User accounts and persistent data - **Phase 3+:** Advanced features (video, screen share, etc) ## Updating Specifications When modifying specifications: 1. Update the version number and status 2. Add a changelog entry at the bottom 3. Maintain backwards compatibility notes 4. Update related specifications if needed 5. Verify implementation matches specification ## Questions? Refer to the specific specification file for detailed information, or consult the [project.md](../project.md) file for project-level context and conventions.