# TheNoiseClock - Product Requirements Document ## Overview TheNoiseClock is a SwiftUI-based iOS application that combines a customizable digital clock display with white noise playback and alarm functionality. The app is designed with a dark theme and focuses on providing a clean, distraction-free interface for time display and ambient sound management. ## Core Features ### 1. Digital Clock Display - **Real-time clock** with automatic updates every second - **Customizable time format**: 12-hour or 24-hour display - **Optional seconds display** with toggle control - **AM/PM badge** for 12-hour format (optional) - **Segmented time display** with colon separators that adapt to orientation - **Dynamic scaling** that fits available screen space - **Portrait and landscape orientation support** ### 2. Clock Customization - **Color customization**: User-selectable digit colors with color picker - **Background color**: Customizable background with color picker - **Glow effects**: Adjustable glow intensity (0-100%) - **Size control**: Manual scaling (0-100%) or auto-fit mode - **Opacity controls**: Separate opacity for clock digits and overlays - **Random color mode**: Automatically changes digit color every minute - **Preset themes**: Quick "Night" (black/white) and "Day" (white/black) themes ### 3. Display Modes - **Normal mode**: Standard interface with navigation and settings - **Display mode**: Full-screen clock activated by long-press (0.6 seconds) - **Automatic UI hiding**: Tab bar and navigation elements hide in display mode - **Smooth transitions**: Animated transitions between modes ### 4. Information Overlays - **Battery level display**: Real-time battery percentage with icon - **Date display**: Current date in "d MMMM EEE" format (e.g., "7 September Mon") - **Overlay opacity control**: Independent opacity for battery/date overlays - **Automatic updates**: Battery and date update in real-time ### 5. White Noise Player - **Multiple sound options**: - White Noise (`white-noise.mp3`) - Heavy Rain White Noise (`heavy-rain-white-noise.mp3`) - Fan White Noise (`fan-white-noise-heater-303207.mp3`) - **Continuous playback**: Sounds loop indefinitely - **Simple controls**: Play/Stop button with visual feedback - **Sound selection**: Dropdown picker for sound selection ### 6. Alarm System - **Multiple alarms**: Create and manage multiple alarms - **Time selection**: Wheel-style date picker for alarm time - **Sound selection**: Choose from system sounds (default, bell, chimes, ding, glass, silence) - **Enable/disable toggles**: Individual alarm control - **Notification integration**: Uses iOS UserNotifications framework - **Persistent storage**: Alarms saved to UserDefaults - **Alarm management**: Add, delete, and modify alarms ## Technical Architecture ### App Structure - **Main App**: `TheNoiseClockApp.swift` - Entry point with WindowGroup - **Tab-based navigation**: Three main tabs (Clock, Alarms, Noise) - **SwiftUI framework**: Modern declarative UI framework - **Dark theme**: Preferred color scheme set to dark ### Data Models - **ClockStyle**: Codable struct for clock customization settings - Time format preferences (24-hour, seconds, AM/PM) - Visual settings (colors, glow, scale, opacity) - Overlay settings (battery, date, opacity) - Background settings - **Alarm**: Codable struct for alarm data - UUID identifier - Time and enabled state - Sound name - **Sound**: Simple struct for noise file management - Display name and file name ### Data Persistence - **AppStorage**: ClockStyle settings persisted as JSON - **UserDefaults**: Alarm data persisted as JSON - **Bundle resources**: Audio files stored in app bundle ### Audio System - **AVFoundation**: AVAudioPlayer for noise playback - **Looping playback**: Infinite loop for ambient sounds - **Error handling**: Graceful handling of missing audio files ### Notification System - **UserNotifications**: iOS notification framework - **Permission handling**: Automatic permission requests - **Calendar triggers**: Daily alarm scheduling - **Sound customization**: System sound selection ## User Interface Design ### Navigation - **TabView**: Three-tab interface (Clock, Alarms, Noise) - **NavigationStack**: Modern navigation with back button support - **Toolbar integration**: Settings and add buttons in navigation bars ### Visual Design - **Rounded corners**: Modern iOS design language - **Smooth animations**: 0.28-second easeInOut transitions - **Color consistency**: Blue accent color throughout - **Accessibility**: Proper labels and hidden decorative elements ### Settings Interface - **Form-based layout**: Organized sections for different setting categories - **Interactive controls**: Toggles, sliders, color pickers - **Real-time updates**: Changes apply immediately - **Sheet presentation**: Modal settings with detents ## File Structure ``` TheNoiseClock/ ├── TheNoiseClockApp.swift # App entry point ├── ContentView.swift # Main tab navigation ├── ClockView.swift # Clock display and settings ├── ClockSettingsView.swift # Settings interface ├── ClockStyle.swift # Data model and color utilities ├── AlarmView.swift # Alarm management ├── AddAlarmView.swift # Alarm creation ├── NoiseView.swift # White noise player ├── NoisePlayer.swift # Audio playback logic ├── Sound.swift # Sound data model └── Resources/ # Audio files ├── white-noise.mp3 ├── heavy-rain-white-noise.mp3 └── fan-white-noise-heater-303207.mp3 ``` ## Key User Interactions ### Clock Tab 1. **View time**: Real-time clock display 2. **Access settings**: Tap gear icon in navigation bar 3. **Enter display mode**: Long-press anywhere on clock (0.6 seconds) 4. **Exit display mode**: Long-press again to return to normal mode ### Settings 1. **Time format**: Toggle 24-hour, seconds, AM/PM display 2. **Appearance**: Adjust colors, glow, size, opacity 3. **Overlays**: Control battery and date display 4. **Background**: Set background color and use presets ### Alarms Tab 1. **View alarms**: List of all created alarms 2. **Add alarm**: Tap + button to create new alarm 3. **Toggle alarm**: Use switch to enable/disable 4. **Delete alarm**: Swipe to delete ### Noise Tab 1. **Select sound**: Choose from dropdown menu 2. **Play/Stop**: Single button to control playback 3. **Continuous playback**: Sounds loop until stopped ## Technical Requirements ### iOS Compatibility - **Minimum iOS version**: iOS 15.0+ (SwiftUI features) - **Target devices**: iPhone and iPad - **Orientation support**: Portrait and landscape ### Dependencies - **SwiftUI**: Native iOS UI framework - **AVFoundation**: Audio playback - **UserNotifications**: Alarm notifications - **Combine**: Timer publishers for real-time updates ### Performance Considerations - **Efficient timers**: Separate timers for seconds and minutes - **Memory management**: Proper cleanup of audio players - **Battery optimization**: Efficient update mechanisms - **Smooth animations**: Hardware-accelerated transitions ## Future Enhancement Opportunities - **Additional sound types**: More white noise variants - **Volume control**: Adjustable playback volume - **Sleep timer**: Auto-stop noise after specified time - **Widget support**: Home screen clock widget - **Apple Watch companion**: Watch app for quick time check - **In-app purchases**: Premium sound packs - **Custom sounds**: User-imported audio files - **Snooze functionality**: Enhanced alarm features - **Multiple time zones**: World clock functionality ## Development Notes - **Created**: September 7, 2025 - **Framework**: SwiftUI with iOS 15+ target - **Architecture**: MVVM pattern with SwiftUI - **Testing**: Includes unit and UI test targets - **Version control**: Git repository with staged changes