TheNoiseClock/PRD.md

192 lines
7.8 KiB
Markdown

# 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