Skip to content
arieltysonPublic

About

A couples-focused Pomodoro study app for iOS. Synchronized timers, mutual app blocking via Screen Time API, and Live Activities on Dynamic Island. Built with Swift 6, SwiftUI, Firebase real-time sync, and a local-first architecture designed to stay within Firebase's free tier at scale. β™₯οΈπŸ“š

Resources

Accessibility

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

283 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

PomoDuo β™₯οΈπŸ“š

Project Description 🎨

"PomoDuo" is an iOS app built with SwiftUI that turns Pomodoro focus sessions into a shared commitment between two people. Instead of running two independent timers, PomoDuo uses a synchronized session state machine ("The Tethered Timer") so both users experience the same focus, break, pause, and completion states in real time.

The app combines Apple's Screen Time API stack (FamilyControls, ManagedSettings, DeviceActivity) with a real-time sync layer (Firebase Auth + Firestore + FCM) to support collaborative focus sessions, optional partner-triggered lock flows, and social accountability while preserving user consent and privacy.

Highlights πŸ’«

Session Architecture (Protocol-Driven) πŸ—οΈ

  • Pure State Machine manages session logic, ensuring predictable state transitions and robust error handling.
  • Protocol-oriented design decouples the domain layer from the UI, maximizing testability and modularity.

Focus Engine & Shielding πŸ›‘οΈ

  • Local-first Pomodoro timer built with Swift Concurrency for high-precision, background-safe timing without network dependency.
  • Screen Time integration (via FamilyControls and ManagedSettings) provides system-level app shielding to enforce deep focus periods.

Real-Time Synchronization πŸ”„

  • Firebase backend enables seamless two-device synchronization, keeping session data and timer states consistent across multiple devices instantly.

Live Activities & Dynamic Island 🏝️

  • ActivityKit support brings live timer updates and session status directly to the Dynamic Island and Lock Screen.
  • Provides immediate glanceability and quick controls without requiring the user to unlock their device or open the app.

Accessibility 🦾

  • Full Accessibility Nutrition Label coverage across all nine App Store categories β€” VoiceOver, Voice Control, Dynamic Type, Dark Mode, Increase Contrast (WCAG 2.1 AA), Differentiate Without Color, and Reduce Motion.
  • Trait-adaptive color system shifts brand colors to higher-contrast variants automatically based on user settings.
  • Voice Control input labels provide short spoken alternatives for every high-traffic control.

Production Hardening πŸ”©

  • MetricKit diagnostics capture hang rates, launch times, and crash reports in production.
  • Network path monitoring gracefully handles offline and constrained connectivity states.
  • Low Power Mode awareness suppresses cosmetic animations to conserve battery.

Screenshots:

Solo-Focus Pairing Flow Active Session
History Live Activity Leaderboard

Technologies Used πŸ’»

This project leverages modern Swift, SwiftUI, and Apple platform APIs for a native, privacy-first collaboration experience.

Language & Frameworks

  • Swift 6
  • SwiftUI
  • UIKit (App Delegate, Quick Actions, Trait-Adaptive Colors)
  • Observation framework
  • Swift Concurrency (async/await, actors)

Screen Time

  • FamilyControls
  • ManagedSettings
  • ManagedSettingsUI (Shield Customization)
  • DeviceActivity

Live Activities & Widgets

  • ActivityKit + WidgetKit (Dynamic Island & Lock Screen)
  • AppIntents + Shortcuts

Data & Networking

  • SwiftData (Local Persistence)
  • FirebaseAuth
  • Firestore (Real-Time Sync)
  • FirebaseMessaging (FCM)
  • Network framework (Connectivity Monitoring)
  • CryptoKit (Secure Pairing)

Notifications & Auth

  • UserNotifications
  • AuthenticationServices (Sign in with Apple)

Accessibility

  • UIAccessibility (Labels, Hints, Traits, Input Labels, Announcements)
  • Dynamic Type & Scalable Fonts
  • Trait-Adaptive Colors (UITraitCollection β€” Dark Mode, Increase Contrast)
  • Reduce Motion & Differentiate Without Color Environment Support

Performance & Diagnostics

  • MetricKit (Hang Rate, Launch Time, Crash Reports)
  • OSLog (Structured Logging)
  • ProcessInfo (Low Power Mode Monitoring)

UI & Data Visualization

  • Charts (Weekly Focus Streak)
  • StoreKit (App Rating)

Testing

  • Swift Testing + XCTest UI Testing
  • WCAG 2.1 AA Contrast Ratio Tests

Skills Demonstrated πŸ₯‹

This project is designed to showcase high-quality iOS engineering practices:

  • SYSTEM DESIGN: Local-first architecture with real-time synchronization for a shared state machine.
  • STATE MANAGEMENT: Explicit session events and deterministic transitions across two devices.
  • PLATFORM INTEGRATION: Deep integration with Screen Time APIs and Live Activities.
  • PERFORMANCE/COST AWARENESS: Transition-based Firestore sync (not per-second timer writes). MetricKit diagnostics and Low Power Mode awareness.
  • ACCESSIBILITY: Full App Store Nutrition Label coverage β€” VoiceOver, Voice Control, Dynamic Type, Dark Mode, Increase Contrast (WCAG AA), Differentiate Without Color, and Reduce Motion.
  • PRIVACY & CONSENT: Collaborative control model aligned with Apple policy constraints.
  • TESTABILITY: Protocol-oriented abstractions, pure domain logic, and automated WCAG contrast verification.

Contributing βš™οΈ

Contributions are welcome. If you have ideas for features, architecture improvements, or bug fixes, open an issue or submit a pull request. Please keep changes aligned with the project's local-first and consent-first design principles.

License πŸͺͺ

This project is licensed under the MIT License. See LICENSE for details.

About

A couples-focused Pomodoro study app for iOS. Synchronized timers, mutual app blocking via Screen Time API, and Live Activities on Dynamic Island. Built with Swift 6, SwiftUI, Firebase real-time sync, and a local-first architecture designed to stay within Firebase's free tier at scale. β™₯οΈπŸ“š

Resources

Accessibility

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages