A macOS menubar app that displays inspirational quotes every time you unlock your Mac.
DailyWisdom transforms every screen unlock into an opportunity for inspiration. A beautifully designed floating panel displays a carefully curated quote from history's greatest minds—then gracefully fades away, letting you start your session with renewed focus.
- Automatic Quote Display – Shows an inspirational quote every time you unlock your Mac
- 370+ Curated Quotes – Wisdom from thinkers like Marcus Aurelius, Charlie Munger, Naval Ravikant, and more
- 8 Categories – Mental Models, Stoicism, Leadership, Focus, Growth, Strategy, Business, Wisdom
- Favorites System – Save quotes that resonate with you
- Smart Selection – Prioritizes quotes you haven't seen, ensuring variety
- Customizable – Adjust display duration (5-30 seconds), toggle categories, launch at login
- Privacy First – Works entirely offline, no data collection
| Quote Display | Menubar | Settings |
|---|---|---|
![]() |
![]() |
![]() |
Note: Add screenshots to DailyWisdom/fastlane/screenshots/en-US/ directory
- macOS 14.0 (Sonoma) or later
- Xcode 15.0 or later (for building from source)
Download on the Mac App Store (coming soon)
-
Clone the repository:
git clone https://github.com/rockywuest/daily_wisdom.git cd daily_wisdom -
Open in Xcode:
open DailyWisdom/DailyWisdom.xcodeproj
-
Build and run (⌘R)
DailyWisdom/
├── App/
│ ├── DailyWisdomApp.swift # Main app entry, MenuBarExtra
│ ├── AppDelegate.swift # Screen lock monitoring, panel management
│ └── Constants.swift # App-wide constants
├── Models/
│ ├── Quote.swift # SwiftData model
│ └── QuoteCategory.swift # Category enum
├── ViewModels/
│ └── QuoteViewModel.swift # @Observable business logic
├── Views/
│ ├── QuoteWindow/ # Floating quote panel
│ ├── MenuBar/ # Menubar dropdown
│ ├── Settings/ # Preferences window
│ └── Components/ # Reusable UI components
├── Services/
│ ├── ScreenLockMonitor.swift # Lock/unlock detection
│ ├── QuoteService.swift # Quote selection algorithm
│ └── DataImportService.swift # JSON seed data import
└── Resources/
├── quotes.json # 370+ quotes database
└── Assets.xcassets/ # App icons, colors
DailyWisdom uses DistributedNotificationCenter to listen for the com.apple.screenIsUnlocked notification, which macOS broadcasts when the user unlocks their screen.
DistributedNotificationCenter.default().addObserver(
self,
selector: #selector(screenDidUnlock),
name: Notification.Name("com.apple.screenIsUnlocked"),
object: nil
)The quote window uses NSPanel with specific configuration to appear above other windows without stealing focus:
.nonactivatingPanelstyle mask – Won't activate the app or steal focus.floatingwindow level – Appears above normal windows.canJoinAllSpacescollection behavior – Visible on all desktop spaces
Quotes are selected using a weighted algorithm that:
- Filters by enabled categories
- Prioritizes never-seen quotes (
viewCount == 0) - For seen quotes, weights by
daysSinceLastShown / viewCount
This ensures variety while still allowing favorites to occasionally reappear.
Edit DailyWisdom/DailyWisdom/Resources/quotes.json:
{
"id": "custom-1",
"text": "Your custom quote here.",
"author": "Author Name",
"category": "wisdom"
}Valid categories: mental-model, stoicism, leadership, focus, growth, strategy, business, wisdom
Default is 15 seconds. Users can adjust from 5-30 seconds in Settings, or modify the default in Constants.swift:
static let defaultDisplayDuration: TimeInterval = 15.0Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
We especially welcome high-quality quote contributions! When adding quotes:
- Ensure accurate attribution
- Verify the quote is correctly worded
- Choose the most appropriate category
- Avoid duplicates
DailyWisdom respects your privacy:
- No network requests – Works entirely offline
- No analytics – No tracking or telemetry
- No accounts – No sign-up required
- Local storage only – All data stays on your device
See PRIVACY.md for our full privacy policy.
This project is licensed under the MIT License - see the LICENSE file for details.
- Quote sources include works from various philosophers, entrepreneurs, and thought leaders
- Built with SwiftUI and SwiftData
- Inspired by the practice of starting each day with intentional reflection
- This entire project was built with the help of Claude by Anthropic – from architecture and implementation to testing and CI/CD. Thank you, Claude!
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with contemplation by Rocky Wuest
If you find this useful, consider buying me a coffee ☕


