7.8 KiB
7.8 KiB
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)
- White Noise (
- 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
- View time: Real-time clock display
- Access settings: Tap gear icon in navigation bar
- Enter display mode: Long-press anywhere on clock (0.6 seconds)
- Exit display mode: Long-press again to return to normal mode
Settings
- Time format: Toggle 24-hour, seconds, AM/PM display
- Appearance: Adjust colors, glow, size, opacity
- Overlays: Control battery and date display
- Background: Set background color and use presets
Alarms Tab
- View alarms: List of all created alarms
- Add alarm: Tap + button to create new alarm
- Toggle alarm: Use switch to enable/disable
- Delete alarm: Swipe to delete
Noise Tab
- Select sound: Choose from dropdown menu
- Play/Stop: Single button to control playback
- 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