Lucid.mp4
A macOS menu bar application with custom-designed UI components to help reduce eye strain, maintain good posture, and encourage healthy work habits through customizable reminders and overlays.
- 🔔 Eye Strain Reminders - Full-screen overlays following the 20-20-20 rule
- ✨ Mini Overlay Reminders - Non-intrusive animated wellness reminders
- 🌙 Bedtime Reminders - Custom-designed UI with system actions and color customization
- 🎥 Presentation Mode - Auto-pause during screen sharing
- 🔊 Sound Effects - Customizable audio notifications
- 🎨 Custom UI Components - Handcrafted interface elements throughout the app
Periodic full-screen overlay reminders to give your eyes a rest using the 20-20-20 rule (look at something 20 feet away for 20 seconds every 20 minutes).
-
Customizable intervals: Set reminder frequency in minutes
-
Personalized messaging: Customize title and message text
-
Auto-dismiss: Configurable auto-dismiss timer
-
Skip functionality: Randomly positioned skip button to prevent muscle memory
-
Keyboard shortcuts: Dismiss overlays with a customizable hotkey
-
Enable toggle: Turn eye strain reminders on/off
-
Preview button: Test reminders with current settings
Brief, non-intrusive animated reminders that appear at the bottom of your screen for quick wellness checks.
- Animated pill design: Smooth morphing animation from dot to pill and back
- Customizable messages: Set your own reminder text
- SF Symbol icons: Choose from a variety of wellness-themed icons
- Adjustable timing: Control both animation and display duration
- Multi-screen support: Appears on all connected displays simultaneously
- Custom colors: Choose background and foreground colors
- Vertical offset: Adjust distance from bottom of screen
- Enable toggle: Turn mini overlays on/off
- Preset suggestions: Quick access to common wellness reminders:
- Posture check
- Stay hydrated
- Blink more
- Stretch time
- Deep breath
- Look away
Screen.Recording.2025-10-01.at.21.13.25.mov
Intelligent bedtime notifications with a fully custom-designed UI to help maintain healthy sleep schedules.
- Visual timeline editor: Custom-built interactive time range selector with drag handles
- Customizable colors: Choose custom background and foreground colors for bedtime overlays (NEW)
- System action buttons: Quick access to Log Out, Sleep, and Shut Down directly from the bedtime overlay (NEW)
- Custom UI components: Handcrafted buttons and interface elements designed specifically for nighttime use
- Repeating reminders: Optional periodic reminders throughout bedtime hours
- Configurable intervals: Control how often reminders repeat
- Auto-dismiss option: Choose whether overlays auto-dismiss or require manual action
- Custom messaging: Personalize title and message for bedtime notifications
- Persistent mode: Continuously check and show overlay if past bedtime
- Launch at login: Automatically start the app when you log in
- Overlay opacity: Choose from multiple material thickness options:
- Ultra Thin
- Thin
- Medium
- Thick
- Ultra Thick
- Click to dismiss: Optional click-to-dismiss functionality for overlays
- Keyboard shortcuts: Customizable hotkey to dismiss any active overlay
- Preview functionality: Test overlays with current settings before committing
- Global alerts toggle: Master switch to enable/disable all reminders
Automatically pauses all reminders when you're presenting or screen sharing to avoid embarrassing interruptions.
- Auto-detection: Monitors for active screen sharing and presentation apps
- Supported apps: Zoom, Teams, Meet, Webex, Discord, Skype, and more
- Presentation software: Keynote, PowerPoint, Google Slides, Prezi
- Fullscreen detection: Recognizes when apps are in presentation mode
- Zero configuration: Works automatically in the background
- Toggleable: Can be disabled in General settings if needed
Supported Applications:
- Video conferencing: Zoom, Microsoft Teams, Google Meet, Webex, Skype, Discord, RingCentral, GoToMeeting, BlueJeans
- Presentation: Keynote, PowerPoint, Google Slides, Prezi, PDF Expert, Preview
Add audio feedback to your reminders for better awareness.
- 10 system sounds: Glass, Hero, Morse, Ping, Pop, Purr, Sosumi, Submarine, Tink, or None
- Volume control: Adjustable from 0% to 100%
- Test button: Preview sounds before selecting
- Smart playback: Only plays for scheduled reminders (not preview buttons)
- Respects presentation mode: No sounds during presentations or when settings are open
- Live countdown: Menu bar icon displays time until next reminder
- Quick access: Single click to open settings
- Always available: Discrete presence in your menu bar
- macOS 14.6 or later
- Xcode 15.0+ (for building from source)
- Download the latest release from the releases page
- Move
Lucid.appto your Applications folder - Launch the app
- Grant necessary permissions when prompted
# Clone the repository
git clone https://github.com/yourusername/swift-macos-template.git
cd swift-macos-template
# Open in Xcode
open Lucid.xcodeproj
# Build and run (⌘R)- First Launch: Grant permission for the app to display notifications and overlays
- Configure Settings: Click the menu bar icon to access settings
- Customize Reminders: Set up eye strain, mini overlay, and bedtime reminders to your preference
- Enable Launch at Login: For consistent wellness reminders throughout your workday
- Dismiss Overlay: Customizable (default: none) - Set in General settings
- SwiftUI: Modern declarative UI framework with custom-built components
- AppKit: Native macOS window and menu bar integration
- Combine: Reactive state management
- UserDefaults: Persistent settings storage
- Custom UI Design: Handcrafted buttons, overlays, and interactive elements
- SettingsAccess (v2.1.0+) - Settings window utilities
- KeyboardShortcuts (v2.4.0+) - Keyboard shortcut management
Lucid/
├── Lucid.swift # App entry point
├── MainScene.swift # Main scene configuration
├── Models/
│ └── AppState.swift # Application state management
├── Settings/
│ ├── SettingsWindow.swift # Settings window container
│ ├── GeneralSettingsTab.swift
│ ├── EyeStrainSettingsTab.swift
│ ├── MiniOverlaySettingsTab.swift
│ └── BedtimeSettingsTab.swift
├── Menu Bar/
│ ├── MenuBarModel.swift # Menu bar state management
│ └── MenuBarView.swift # Menu bar UI
├── Components/
│ ├── Overlay.swift # Full-screen overlay component
│ ├── MiniOverlay.swift # Mini animated overlay
│ ├── TimelineEditor.swift # Visual time range editor
│ ├── Buttons.swift # Reusable button components
│ ├── TextFields.swift # Custom text field components
│ ├── UIDropdown.swift # Dropdown component
│ ├── SettingItems.swift # Settings UI components
│ └── InfoBox.swift # Info box component
├── Services/
│ ├── Notifier.swift # Notification scheduling service
│ ├── PresentationModeDetector.swift # Screen sharing detection (NEW)
│ └── SoundManager.swift # Sound effect management (NEW)
└── Utilities/
└── Styles.swift # Shared styling constants
All settings are stored in UserDefaults with the following keys:
launchAtLogin: BooleanoverlayMaterial: String (material type)eyeStrainClickToDismiss: Boolean
eyeStrainEnabled: BooleaneyeStrainInterval: Integer (minutes)eyeStrainTitle: StringeyeStrainMessage: StringeyeStrainDismissAfter: Integer (seconds)
miniOverlayEnabled: BooleanminiOverlayText: StringminiOverlayIcon: String (SF Symbol name)miniOverlayDuration: Double (seconds)miniOverlayHoldDuration: Double (seconds)miniOverlayInterval: Integer (minutes)miniOverlayBackgroundColor: Data (NSColor archived)miniOverlayForegroundColor: Data (NSColor archived)miniOverlayUseCustomColors: BooleanminiOverlayVerticalOffset: Integer (pixels)
bedtimeEnabled: BooleanbedtimeStartTime: DatebedtimeEndTime: DatebedtimeTitle: StringbedtimeMessage: StringbedtimeDismissAfter: Integer (seconds)bedtimeRepeatReminders: BooleanbedtimeRepeatInterval: Integer (minutes)bedtimeAutoDismiss: BooleanbedtimePersistent: BooleanbedtimeBackgroundColor: Data (NSColor archived)bedtimeForegroundColor: Data (NSColor archived)bedtimeUseCustomColors: Boolean
soundEffectsEnabled: BooleanreminderSoundEffect: String (sound name)soundEffectsVolume: Double (0.0-1.0)disableDuringPresentation: Boolean
Contributions are welcome! Please feel free to submit a Pull Request.
- ✅ Custom Bedtime UI - Fully redesigned bedtime overlay with custom colors
- ✅ System Action Buttons - Log out, sleep, and shut down from bedtime overlay
- ✅ Presentation Mode Detection - Auto-pause during screen sharing
- ✅ Sound Effects - 10 customizable notification sounds
- ✅ Enhanced Mini Overlays - Custom colors and vertical offset
- ✅ Eye Strain Toggle - Enable/disable eye strain reminders
- ✅ Persistent Bedtime Mode - Continuous bedtime monitoring
- ✅ Improved Animation - Smoother mini overlay transitions
- ✅ Smart Behavior - Respects settings window and presentation state
- Skip button position randomization is intentional to prevent muscle memory development
- Presentation detection requires apps to be active/frontmost
- Some web-based conferencing (in browsers) may not be detected
- Statistics tracking for reminder engagement
- Multiple reminder profiles (work, home, weekend)
- Pomodoro timer integration
- Stretch routine reminders with guided exercises
- Calendar integration for smart scheduling
- Export/import settings
- Custom sound upload
- Activity detection improvements
For questions, issues, or feedback:
- Open an issue.
- Email: enochlauenoch@gmail.com
- Built with SwiftUI
- Icons from SF Symbols
- Dependencies: SettingsAccess, KeyboardShortcuts