--- name: sleeptrack-foundation description: This skill provides foundational knowledge about Asleep sleep tracking platform, covering core concepts, authentication, data structures, error handling, and platform-agnostic best practices. Use this skill when developers ask about Asleep fundamentals, API concepts, error codes, sleep data structures, or need to understand how the platform works before implementing platform-specific integration. This skill serves as prerequisite knowledge for sleeptrack-ios, sleeptrack-android, and sleeptrack-be skills. --- # Sleeptrack Foundation ## Overview This skill provides essential foundational knowledge for integrating the Asleep sleep tracking platform. It covers core concepts, authentication patterns, data structures, error handling, and platform-agnostic best practices that apply across all implementation approaches (iOS, Android, and backend API). Use this skill when developers need to understand: - What Asleep is and how sleep tracking works - API authentication and key management - Sleep session concepts and lifecycle - Data structures (Sessions, Reports, Statistics) - Error codes and troubleshooting - Platform-agnostic integration patterns ## Core Concepts ### What is Asleep? Asleep is a sleep tracking platform that analyzes sleep using audio-based monitoring through device microphones. The platform provides: - **Real-time sleep stage analysis**: Wake, Light, Deep, REM detection - **Comprehensive sleep metrics**: Efficiency, latency, total sleep time, wake after sleep onset - **Snoring detection and analysis**: Snoring stages and patterns - **Multi-platform SDKs**: Native iOS and Android SDKs plus REST API - **Dashboard analytics**: Web-based analytics and user management ### User Management Each application user must be registered with Asleep before tracking sleep. **Key Points**: - User ID is managed by the host application (not generated by Asleep) - One user can have multiple sleep sessions - User data persists across sessions for trend analysis - Users can be created, retrieved, updated, and deleted via API **Example User ID Schemes**: ``` - UUID: "550e8400-e29b-41d4-a716-446655440000" - Email-based: "user@example.com" - App-specific: "app_user_12345" ``` ### Sleep Sessions A session represents one complete sleep tracking period from start to stop. **Session Lifecycle States**: 1. **IDLE**: No tracking in progress 2. **INITIALIZING**: SDK preparing resources 3. **INITIALIZED**: Ready to start tracking 4. **TRACKING_STARTED**: Active tracking in progress 5. **TRACKING_STOPPING**: Ending session and uploading data **Session Requirements**: - Minimum tracking duration: 5 minutes for valid session - Microphone access required throughout tracking - Network connectivity needed for data upload - One active session per user at a time **Real-time Data Access**: - Available after sequence 10 - Check every 10 sequences thereafter - Provides preliminary sleep stage data during tracking ### Sleep Reports Reports contain comprehensive analysis of completed sleep sessions. **Report Structure**: ``` Report ├── Session Metadata │ ├── session_id │ ├── user_id │ ├── start_time │ └── end_time ├── Sleep Stages Timeline │ ├── Wake periods │ ├── Light sleep periods │ ├── Deep sleep periods │ └── REM sleep periods ├── Sleep Statistics │ ├── Total sleep time │ ├── Time in bed │ ├── Sleep efficiency (%) │ ├── Sleep latency (time to fall asleep) │ ├── Wake after sleep onset (WASO) │ ├── Sleep stage durations │ └── Sleep stage ratios └── Snoring Analysis ├── Snoring detected (yes/no) ├── Snoring stages timeline └── Snoring statistics ``` **Key Metrics Explained**: - **Sleep Efficiency**: (Total sleep time / Time in bed) × 100% - Good: > 85% - Fair: 75-85% - Poor: < 75% - **Sleep Latency**: Time from lying down to falling asleep - Normal: 10-20 minutes - Fast: < 10 minutes (may indicate sleep deprivation) - Slow: > 20 minutes (may indicate insomnia) - **WASO**: Total wake time after initial sleep onset - Lower is better (indicates fewer disruptions) ### Statistics Aggregated metrics across multiple sessions for trend analysis. **Available Statistics**: - Average sleep duration over time range - Average sleep efficiency - Sleep stage distribution averages - Trends and patterns **Statistics API**: ``` GET /users/{user_id}/statistics/average?from={date}&to={date} ``` ## Authentication ### API Key Management All Asleep integrations require an API key for authentication. **Obtaining an API Key**: 1. Sign up at https://dashboard.asleep.ai 2. Navigate to API key generation section 3. Create API key for the application 4. Store securely (never commit to version control) **Using API Keys**: For SDK Integration (iOS/Android): ```kotlin // Android AsleepConfig.init( apiKey = "your_api_key_here", userId = "user_unique_id", ... ) ``` ```swift // iOS AsleepConfig.init( apiKey: "your_api_key_here", userId: "user_unique_id", ... ) ``` For REST API Integration: ```http GET /sessions/{session_id} X-API-Key: your_api_key_here ``` **Security Best Practices**: - Store API keys in environment variables or secure storage - Never hardcode keys in source code - Use different keys for development and production - Rotate keys periodically - Monitor usage in Dashboard to detect unauthorized access - Revoke compromised keys immediately ## Error Handling Understanding error codes is critical for robust integration. ### Error Categories **Critical Errors** (must stop tracking): These errors indicate conditions that prevent continued tracking and require user intervention or code fixes. **Warning Errors** (can continue tracking): These are transient issues that the SDK handles automatically while tracking continues. ### Error Code Reference #### Critical Errors **ERR_MIC_PERMISSION** - **Cause**: App lacks microphone access permission - **Action**: Request microphone permission from user - **Platform Notes**: - Android: Check RECORD_AUDIO permission - iOS: Check NSMicrophoneUsageDescription and authorization status **ERR_AUDIO** - **Cause**: Microphone unavailable or in use by another app - **Action**: - Close conflicting apps using microphone - Check microphone hardware functionality - Verify no audio conflicts in device settings **ERR_INVALID_URL** - **Cause**: Malformed API endpoint URL in configuration - **Action**: Verify AsleepConfig URL format - **Example Fix**: Ensure base URL is valid HTTPS endpoint **ERR_COMMON_EXPIRED** - **Cause**: API rate limit exceeded or subscription plan expired - **Action**: - Check Dashboard for plan status - Review API usage patterns - Upgrade plan if needed - Implement rate limiting in application **ERR_UPLOAD_FORBIDDEN** - **Cause**: Multiple simultaneous tracking attempts with same user_id - **Action**: - Ensure only one device tracks per user at a time - Check for orphaned sessions - Implement proper session cleanup **ERR_UPLOAD_NOT_FOUND** / **ERR_CLOSE_NOT_FOUND** - **Cause**: Attempting to interact with non-existent or already-ended session - **Action**: - Verify session exists before operations - Handle session expiration properly - Implement session state management #### Warning Errors **ERR_AUDIO_SILENCED** - **Cause**: Audio temporarily unavailable but tracking continues - **Impact**: Minimal, SDK handles gracefully - **Action**: Log for monitoring, tracking continues **ERR_AUDIO_UNSILENCED** - **Cause**: Audio restored after silence period - **Impact**: Tracking resumes normally - **Action**: Log for monitoring **ERR_UPLOAD_FAILED** - **Cause**: Network connectivity issue during data upload - **Impact**: SDK will retry automatically - **Action**: - Verify network connectivity - Check for firewall/proxy issues - Monitor retry success ### Error Handling Patterns **Distinguish Error Severity**: ```kotlin // Android example when (errorCode) { in criticalErrors -> { // Stop tracking, notify user stopTracking() showErrorDialog(errorCode) } in warningErrors -> { // Log and continue logWarning(errorCode) } } ``` **Provide User-Friendly Messages**: ```kotlin fun getUserFriendlyMessage(errorCode: AsleepErrorCode): String { return when (errorCode) { ERR_MIC_PERMISSION -> "Please allow microphone access to track sleep" ERR_AUDIO -> "Another app is using the microphone. Please close it and try again" ERR_COMMON_EXPIRED -> "Your subscription has expired. Please renew to continue tracking" // ... more mappings } } ``` **Implement Retry Logic**: ```kotlin // For network-related errors suspend fun uploadWithRetry(maxRetries: Int = 3) { repeat(maxRetries) { attempt -> try { upload() return } catch (e: NetworkException) { if (attempt == maxRetries - 1) throw e delay(2.0.pow(attempt) * 1000) // Exponential backoff } } } ``` ## Data Plan Considerations Asleep operates on different data plans that affect API usage. **Plan Limits**: - Request rate limits - Total sessions per month - Data retention periods - Feature availability **Monitoring Usage**: - Check Dashboard regularly - Implement usage tracking in application - Set up alerts for approaching limits - Plan capacity for user growth ## Integration Workflows ### Typical Integration Flow 1. **Setup Phase**: - Obtain API key from Dashboard - Install SDK (iOS/Android) or configure REST API client - Configure authentication 2. **User Registration**: - Create user in Asleep system - Store user_id mapping in application 3. **Sleep Tracking Session**: - Request necessary permissions - Initialize SDK with user credentials - Start tracking session - Monitor session state - Handle real-time data (optional) - Stop tracking session 4. **Report Generation**: - Wait for report processing (automatic) - Fetch completed report - Display sleep analysis to user 5. **Statistics & Trends**: - Query historical sessions - Calculate aggregated statistics - Display trends over time ### Common Integration Scenarios **Scenario 1: First-Time User Setup** ``` User downloads app → Request microphone permission → Create Asleep user (POST /users) → Initialize SDK with API key + user_id → Guide user through first tracking session ``` **Scenario 2: Returning User** ``` User opens app → Load user_id from local storage → Initialize SDK with credentials → Check for existing running session (reconnect if found) → Display previous sleep reports ``` **Scenario 3: Background Tracking** ``` User starts tracking before sleep → Start foreground service (Android) / background mode (iOS) → Maintain microphone access → Handle app lifecycle events → Continue tracking through sleep → Stop tracking in morning → Process and display report ``` ## Platform Selection Guide Choose the appropriate integration approach based on application type: **Use iOS SDK (sleeptrack-ios)**: - Native iOS application - Need deep iOS integration (Siri, HealthKit, etc.) - Require iOS-specific UI patterns - Swift/SwiftUI development **Use Android SDK (sleeptrack-android)**: - Native Android application - Need Android-specific features (foreground service, etc.) - Require Android UI patterns - Kotlin/Jetpack Compose development **Use REST API (sleeptrack-be)**: - Backend/server-side integration - Multi-platform web application - Data aggregation and analytics - Webhook-based event processing - Cross-platform mobile framework (React Native, Flutter) with custom bridge ## Resources ### Official Documentation - **Main Documentation**: https://docs-en.asleep.ai - **LLM-Optimized Reference**: https://docs-en.asleep.ai/llms.txt - **Dashboard**: https://dashboard.asleep.ai ### Key Documentation Pages - **QuickStart Guide**: https://docs-en.asleep.ai/docs/quickstart.md - **Sleep Data Overview**: https://docs-en.asleep.ai/docs/sleep-data.md - **System Overview**: https://docs-en.asleep.ai/docs/system-overview.md - **API Basics**: https://docs-en.asleep.ai/docs/api-basics.md - **Webhook Guide**: https://docs-en.asleep.ai/docs/webhook.md - **Sleep Environment Guidelines**: https://docs-en.asleep.ai/docs/sleep-environment-guideline.md ### Platform-Specific Documentation **Android**: - Get Started: https://docs-en.asleep.ai/docs/android-get-started.md - Error Codes: https://docs-en.asleep.ai/docs/android-error-codes.md - AsleepConfig: https://docs-en.asleep.ai/docs/android-asleep-config.md - SleepTrackingManager: https://docs-en.asleep.ai/docs/android-sleep-tracking-manager.md **iOS**: - Get Started: https://docs-en.asleep.ai/docs/ios-get-started.md - Error Codes: https://docs-en.asleep.ai/docs/ios-error-codes.md - AsleepConfig: https://docs-en.asleep.ai/docs/ios-asleep-config.md - SleepTrackingManager: https://docs-en.asleep.ai/docs/ios-sleep-tracking-manager.md ### Reference Files This skill includes detailed API reference documentation: - `references/asleep_api_reference.md`: Comprehensive API endpoint reference, data structures, and integration patterns To load this reference for detailed API information: ``` Read references/asleep_api_reference.md ``` ## Best Practices Summary ### Security - Never expose API keys in client code - Implement secure storage for credentials - Use HTTPS for all API communications - Validate user permissions before operations ### Performance - Cache reports when appropriate - Batch API requests to respect rate limits - Implement efficient session state management - Monitor real-time data access patterns ### User Experience - Provide clear permission rationales - Show friendly error messages - Display progress during tracking - Handle app lifecycle gracefully ### Reliability - Implement comprehensive error handling - Add retry logic for transient failures - Log errors for debugging - Test edge cases (interruptions, low battery, etc.) ### Data Management - Clean up old sessions appropriately - Respect user privacy and data retention - Implement proper user deletion flows - Backup critical session data ## Next Steps After understanding these foundational concepts, proceed to platform-specific skills: - **iOS Development**: Use `sleeptrack-ios` skill - **Android Development**: Use `sleeptrack-android` skill - **Backend API Integration**: Use `sleeptrack-be` skill Each platform-specific skill builds on this foundation with implementation details, code examples, and platform-specific patterns.