Dynamic Island meets deep work. Transform your MacBook's notch into a productivity powerhouse that actually helps you get stuff done.
Built as a weekend project by a UT Austin CSB student who got tired of losing focus every 20 minutes and wanted something better than basic timers that just... tick.
During my sophomore year at college, I kept bouncing between assignments and never felt like I was making real progress. Traditional productivity apps felt either too basic (just timers) or too complex (project management overkill). I wanted something that would:
- Actually use the MacBook Pro's notch instead of just tolerating it
- Follow time-blocking principles without the manual calendar tetris
- Implement progressive break scaling (longer projects = longer breaks)
- Show me visual progress through my work blocks
The result is a Dynamic Island-style focus timer that turns the Pomodoro Technique into something that feels native to macOS.
- π― Dynamic Island Integration - Your focus sessions live in the notch area, accessible but not distracting
- π Smart Session Planning - Visual timeline showing your upcoming work blocks and breaks
- β‘ Progressive Break System - Break lengths scale with goal complexity (longer goals = longer recovery)
- π Automatic Session Flow - Seamlessly transitions between focus blocks and breaks
- βοΈ Customizable Settings - Adjust focus durations, break lengths, and scaling factors
- π Menu Bar Controls - Quick access without disrupting your workflow
This project demonstrates several key engineering decisions I made while learning SwiftUI and macOS development:
- Reactive State Management: Used Combine framework with
@Publishedproperties to create a unidirectional data flow between UI and business logic - Separation of Concerns: Goals β Sessions β Timer pipeline keeps the data transformation logic separate from UI rendering
- Observer Pattern: Timer completion events trigger UI state changes without tight coupling between components
- Dynamic Island Integration: Forked and modified
DynamicNotchKitto handle custom notification overlays and smooth state transitions - Calendar Rendering: Built a custom time-based layout system that positions session blocks accurately across hour boundaries
- State Synchronization: Solved SwiftUI's async update challenges by centralizing timer/session state management in the AppDelegate
- Lazy Loading: Session generation only occurs when goals or settings change
- Efficient Rendering: Calendar view uses absolute positioning to avoid expensive layout recalculations
- Memory Management: Weak references and proper cleanup prevent retain cycles in timer callbacks
- Go to Releases
- Download the latest
FocusIsland.app.zip - Unzip and drag to Applications folder
- First launch: Right-click β "Open" to bypass Gatekeeper security
git clone https://github.com/renil-edu/FocusIsland-MacOS/
cd FocusIsland
open FocusIsland.xcodeproj
Requirements: macOS 13.0+, Xcode 15.0+
- Launch FocusIsland - Icon appears in your menu bar, interface in your notch
- Set up goals - Click the pencil icon to add focus sessions with time estimates
- Configure settings - Adjust focus block length and break scaling to match your work style
- Start focusing - Hit play and watch your progress in the timeline view
- Take breaks - Get notified when it's time to rest (and actually take the break!)
- SwiftUI - Modern declarative UI framework
- Combine - Reactive programming for state management
- DynamicNotchKit - Custom fork for notch integration
- UserDefaults - Lightweight persistence for settings
FocusIsland implements time-blocking with progressive recovery periods:
- Focus blocks are capped at manageable chunks (default 20min) to maintain deep work without burnout
- Standard breaks (10min) help with task switching and mental reset
- Scaled breaks increase proportionally with goal length - bigger projects need bigger recovery
- Visual timeline reduces cognitive load of tracking "what's next"
This approach combines the Pomodoro Technique's time structure with Timeboxing's goal-oriented planning, while avoiding the rigidity that makes both hard to stick with.
Found a bug? Have ideas for better productivity features? Contributions welcome!
- Fork the repo
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under a custom non-commercial license - see the LICENSE file for details.
- DynamicNotchKit - For making notch integration possible
- Apple's HIG - Design inspiration for the Dynamic Island UX
- Cal Newport - Deep Work principles that shaped the focus block approach
- Claude Sonnet 4.0
Designed by: Renil Gupta, August 2025
Current Version: v1.0.0
If FocusIsland helps you stay focused, consider starring the repo!


