apiVersion: capsule.dev/v0.1 kind: Capsule name: f4c-realtime-core version: 0.1.0 type: subsystem purpose: summary: 'Provides core real-time communication logic and generic UI components for audio/video calls and participant management using Cloudflare RealtimeKit. It encapsulates the integration with the RealtimeKit SDK and offers hooks and types for building real-time features. ' owns: - RealtimeKit SDK integration and state management - Generic participant audio/video UI components (e.g., AudioVisualizer, UserCard) - Common types and utilities for real-time interactions does_not_own: - Specific chat UI components (e.g., TextChatCard) - Bot integration logic - Room creation and authentication APIs - Application-level branding or page layouts interfaces: provides: - kind: library name: useChatRoom description: React hook for managing real-time chat room state and interactions. - kind: library name: UserInfo description: TypeScript interface for participant information. - kind: library name: Message description: TypeScript interface for chat messages. requires: - kind: http_api name: /api/token from_capsule: f4c-room-api description: Requires an authentication token from the room API to join a meeting. - kind: env name: NEXT_PUBLIC_WORKER_URL description: URL for the Cloudflare Worker, used by GET_WORKER_URL utility. dependencies: capsules: - name: f4c-room-api version: '>=0.1.0' agent: summary_for_ai: 'This capsule handles all RealtimeKit client-side interactions. Agents should focus on enhancing real-time features, improving audio/video quality, or extending participant UI. Ensure adherence to RealtimeKit API changes and maintain generic component design. ' avoid: - Adding project-specific branding or hardcoded strings. - Introducing direct dependencies on other application-specific frontend capsules. verification: invariants: - The `useChatRoom` hook must correctly manage RealtimeKit meeting state. - UserCard and AudioVisualizer components must remain generic and only depend on `UserInfo` and `MediaStream` types. x-reuse: notes: 'app/src/common/consts.tsx: `LOCAL_PEER_ID` is a hardcoded string. `GET_WORKER_URL` assumes a Cloudflare Worker setup. app/src/common/utils.tsx: `umamiEvent` and `gtagEvent` are specific analytics calls that should be removed or replaced with a generic analytics interface. The `hashRoom` function is specific to FNV-1a hashing. ' x-reconstruct: install: install.json