Development Progress
Every commit, every fix, every feature — the complete development journey to WakeAct v1.0.
March 26, 2026
Today iOSv1.0 — App Store Submission & Website Launch
v1.0First-ever App Store submission. Resolved all Xcode validation issues, deployed promotional website at wakeact.com, and configured ASO-optimized metadata. Currently waiting for Apple review.
App Store Validation Fixes
- Icon alpha channel: Removed transparency via JPEG round-trip (App Store rejects alpha in icons)
- ExtensionKit plist format: Migrated from
NSExtensiontoEXAppExtensionAttributeswithEXExtensionPointIdentifierfor DeviceActivity and Shield extensions - ExtensionKit embedding: New “Embed ExtensionKit Extensions” build phase for DeviceActivity + Shield; Widget stays in PlugIns
- Missing plist key: Added
NSHomeKitUsageDescription(ITMS-90683) - Widget display name: Added
CFBundleDisplayName= “WakeAct Widget” - Build version sync: Set
CFBundleVersionto 2 across all extension plists
Promotional Website
- Deployed at wakeact.com via Cloudflare Pages
- Static HTML/CSS/JS with coral/warm color palette, light/dark mode
- 5 tabbed feature panels, comparison table, sleep tracking spotlight
- Secondary pages: team, privacy policy, terms of service, accessibility, progress
App Store Metadata (ASO-Optimized)
- Name: WakeAct — Puzzle Alarm Clock
- Subtitle: Sleep Tracker & Morning Streak
- Category: Health & Fitness (primary), Productivity (secondary)
March 25, 2026
iOSREADME Overhaul & Documentation Update
Pre-releaseComplete README rewrite with centered logo, badges, table of contents, structured feature tables, ASCII architecture diagram, and comprehensive technical documentation. Added build/ to .gitignore.
Highlights
- Centered app icon, title, and tagline header
- Developer, platform, Swift, Xcode, localization, and version badges
- Structured Table of Contents with deep links
- Features at a Glance summary table
- ASCII architecture diagram with key decisions
- Dedicated sections for Puzzle System, App Blocking, Gamification, HealthKit, Widgets, Localization
- Tech Stack table with 25+ frameworks
- Building & Running guide with prerequisites
Comprehensive Audit — 22 Issues Fixed
Pre-releaseFinal comprehensive audit covering data integrity, memory leaks, logic bugs, view performance, and wiring gaps. Fixed 22 issues across 20 files with zero errors and zero warnings.
Service/Data Fixes (11 files)
- Data race: Captured
gradualVolumeSecondslocally before audio render callback - Timer leak: Store testSunrise() timer in instance property, cleanup existing
- Dead code: Removed nonsensical conditional, simplified XP calculation
- Empty array guard: Guard for empty avgWakeMinutes before division
- Integer division: Changed percentage calc to Double-based math
- Timer deinit: Added negative duration guard in stopRecording()
- CloudKit race: Retry loop for CKError.serverRecordChanged conflicts
- Inverted logic: Fixed snooze/speed progress (lower = better), division-by-zero guards
- Range validation: Clamp windDown hours (0-23) and minutes (0-59) in init
- XP overflow: Cap multiplied XP at 10,000 per action
View Fixes (9 files)
- Timer leaks: Manual connect()/cancel() replacing .autoconnect() across HomeView, ClockFaceView, DailyChallengeView, AwakeVerificationView
- GeometryReader: Replaced 2 GeometryReaders in ScrollView with scaleEffect overlay
- Dead code: Removed hidden EmptyView button
- Timer cleanup: Added .onDisappear calling cancelNap()
- Keyboard: Added .submitLabel(.done) + .onSubmit
Full Localization — 10 Languages
Pre-releaseComplete localization infrastructure supporting 10 languages: English, Spanish, French, German, Japanese, Korean, Chinese (Simplified), Portuguese (Brazil), Hindi, and Arabic. All user-facing strings across the main app, widgets, and shield extension are now localizable via Apple String Catalogs (.xcstrings).
Infrastructure
- Created
Localizable.xcstrings(main app) — 120+ UI strings with translations for all 10 languages - Created
InfoPlist.xcstrings— 12 permission description strings translated - Created widget and shield extension .xcstrings files
- Updated
project.ymlwithknownRegionsfor all 10 locales
Languages Supported
- English (source), Spanish, French, German, Japanese
- Korean, Chinese (Simplified), Portuguese (Brazil), Hindi, Arabic (RTL)
Code Changes
- Converted ~400+ hardcoded English strings to
String(localized:) - Model enums (~65), achievements (~85), cosmetics (~90), notifications (~30), mascot (~74), missions (~37), programs (~65), scores (~25), templates (~10)
8 Competitive Features, 3-Tier Startup & 47-Issue Audit
Pre-releaseMassive release implementing 8 competitive features via parallel agents, 3-tier startup optimization, ThemeCache for frame-rate performance, and a comprehensive 47-issue audit covering data integrity, memory leaks, logic bugs, view bottlenecks, and wiring gaps. Build succeeds with 0 errors, 0 warnings.
New Competitive Features (16+ new files)
- Awake Verification: Post-alarm verification quiz to prevent falling back asleep
- Anti-Dismiss System: Backup alarm 30s after dismiss, orphaned alarm detection, audio session persistence
- Bedtime Enforcer: Full-screen overlay at configured bedtime with configurable aggressiveness
- Morning Routine: Post-alarm checklist with exercise, hydration, meditation steps
- Snore Detection: Audio analysis for snore detection with session history
- Exercise Puzzle: Motion-based puzzle requiring physical exercises to dismiss
- Sleep Programs: 4 multi-week guided sleep programs with daily check-ins and XP
- Sunrise Simulation: 6-stage color gradient sunrise overlay before alarm
Performance Optimization
- 3-Tier Startup: Tier 1 (critical, immediate), Tier 2 (deferred, 500ms), Tier 3 (background, 2s) — time-to-interactive reduced from ~5-8s to ~1-2s
- ThemeCache: Singleton caching UserDefaults reads, eliminating hundreds of reads per frame
- View-Level: AlarmInsightsView 12 O(n) properties to single computeStats(), HomeView timer 30s→60s, HealthKit 7 queries→1 batch
47-Issue Audit
- Data Integrity: Alarm.init() validation, safe enum fallbacks, bounds clamping
- Memory & Leaks: NotificationCenter observers, timer cleanup, @Transient cache
- Logic & Wiring: Timezone-aware streaks, deterministic notification IDs, alarm scheduler fixes
- Build & Warnings: @preconcurrency imports, deprecated API replacements, unused code removal
March 24, 2026
iOSBack Buttons on All 17 Sub-Pages
Pre-releaseAll 17 sub-pages pushed via NavigationLink were trapping users — the system back button was hidden by .toolbar(.hidden, for: .navigationBar) and no custom replacement existed. Added a consistent chevron.left dismiss button to every custom nav bar.
Affected Views (17)
- XPShopView, TrophyHallView, DailyMissionsView, ProgressionRoadmapView
- StreakView, BlockingStatsView, SleepInsightsView, AlarmInsightsView
- SleepSoundsView, NapTimerView, DailyChallengeView, WeeklyReportView
- ChallengesView, TrustedContactListView, MusicPickerView, PremiumView
- AlarmHistoryListView, DailyRewardsDestinationView
Streak Repair, Rank Tiers & Cosmetic Expansion
Pre-releaseFourth audit addressing 3 critical/likely bugs and 5 competitive gap features. Streak comeback mechanics with 48-hour repair window, monthly rank tiers (Bronze through Diamond), 14 new cosmetic shop items, image-rendered milestone share cards, and 4 new trackable weekly goals.
Critical Bug Fixes
- Budget audit filter: smart_alarm_ and prealarm_ prefixes misclassified during budget pruning — alarm notifications were being removed before engagement ones
- Race condition: .onChange(of: scenePhase) could fire before .task completed init — added isInitialized guard
- Bedtime reminder: Stale reminder not cleaned up when preference toggled off
New Features
- Streak Repair: 48-hour comeback window, XP cost to restore half streak (min 3 days)
- Rank Tiers: Bronze (0+), Silver (30+), Gold (55+), Platinum (75+), Diamond (90+)
- Cosmetic Expansion: 28 items across 5 categories (was 14/4), including alarm themes, accent colors, icons, badges
- Share Cards: Rendered image share card via ImageRenderer for streak milestones
- Goal Personalization: 4 new trackable goals — snooze, puzzle speed, consistency, weekly wake-ups
Difficulty Progression, Alarm Templates & CoreHaptics
Pre-releaseThird audit addressing 17 findings — alarm validation, difficulty progression system, CoreHaptics patterns for all 11 sounds, alarm templates for quick setup, guided onboarding expansion, and wiring gaps.
XP/Leveling, Daily Missions, Cosmetics Shop & Seasonal Challenges
Pre-releaseSecond audit addressing 38 findings — XP/leveling system with combo multipliers, daily missions, daily rewards, cosmetics shop with purchasable themes, seasonal challenges, sleep goals, habit scoring, guided first-week experience, and comprehensive feature wiring.
QR/Shake Puzzles, Streaks, Achievements & Sleep Sounds
Pre-releaseComprehensive 30-item audit implementation across 5 priority levels — critical bug fixes, engagement features, competitive edge puzzles, UX polish, and retention mechanics.
P1 — Critical Wiring Fixes
- UnlockChallengeView puzzle routing — fixed hardcoded MathPuzzleView to properly route all puzzle types
- TipKit parameter wiring, Focus Filter integration, FamilyActivityPicker added to editor
P2 — Engagement Features
- StreakManager: Consecutive wake-up streak tracking with freeze support, milestone detection (7/14/30/60/100/365)
- AchievementManager: 12 predefined achievements with progress tracking
- SleepSoundManager: 8 synthesized sleep sounds via AVAudioEngine with timer support
- Morning briefing: 15 motivational quotes, streak count display, smart alarm window picker
P3 — Competitive Edge
- QRCodePuzzleView: Camera-based QR/barcode scanner with 6+ format support
- ShakePuzzleView: CMMotionManager accelerometer shake detection (2.5g threshold, difficulty-scaled)
- AlarmInsightsView: 30-day alarm history analysis with Swift Charts
P4/P5 — UX & Retention
- Haptic feedback on alarm toggle/save, App Store review prompts, Spotlight deep linking
- NotificationEngagementManager for re-engagement, bedtime reminders
- StreakView, SleepSoundsView, NapTimerView added
11 Apple Framework Integrations
Pre-releaseIntegrated 11 additional Apple frameworks: AlarmKit (iOS 26+), BackgroundTasks, LocalAuthentication, Charts, CoreSpotlight, FoundationModels (on-device AI), Speech, EventKit, SmartWake sleep analysis, and more.
Frameworks
- AlarmKit: System-level alarms on iOS 26+ with WakeActAlarmMetadata
- BackgroundTasks: BGAppRefreshTask for alarm rescheduling, BGProcessingTask for data cleanup
- LocalAuthentication: Face ID / Touch ID for app unlock
- Charts: Weekly sleep bar chart with color coding
- CoreSpotlight: Alarm search indexing for system-wide search
- FoundationModels: On-device AI trivia puzzle generation (iOS 26+)
- Speech: Voice puzzle dismissal with SFSpeechRecognizer (70% match threshold)
- EventKit: Calendar integration for morning briefing “Today’s Schedule”
- SmartWake: 30-day HealthKit sleep pattern analysis with suggested wake/bedtime
Core Haptics, Step Dismissal, HealthKit, MusicKit & CloudKit
Pre-releaseMassive integration of 10 Apple frameworks: TipKit for feature discovery, Core Haptics with 5 distinct alarm patterns, CoreMotion step dismissal, HealthKit sleep tracking, WeatherKit morning briefing, Focus Filters, StoreKit 2 premium tier, MusicKit alarm tones, CloudKit sync, and interactive widgets.
Frameworks Integrated
- TipKit: 5 contextual tips (Siri, App Blocking, Widget, Step Dismissal, Sleep Tracking)
- Core Haptics: 5 distinct haptic patterns matching alarm sounds with graduated intensity ramps
- CoreMotion: Step dismissal requiring 10-100 steps after puzzle completion
- HealthKit: Read/write sleep analysis, last night’s sleep data, weekly averages
- WeatherKit: Morning briefing with temperature, condition, and forecast
- Focus Filters: Sleep Focus integration with gentle sound, app blocking, dim display
- StoreKit 2: Premium tier with monthly, yearly, lifetime options
- MusicKit: Apple Music alarm tones with search, browse, and 30-second preview
- CloudKit: Opt-in iCloud sync via SwiftData with automatic mode
- Interactive Widgets: Toggle alarm widget with App Intents
Siri & App Intents
Pre-releaseFull App Intents framework integration enabling voice control via Siri and the Shortcuts app. Set, toggle, show, and delete alarms via voice — all intents work without opening the app.
Siri Commands
- SetAlarmIntent: “Set an alarm in WakeAct” — creates alarm with time, name, repeating days
- ToggleAlarmIntent: “Enable/disable alarm in WakeAct”
- ShowAlarmsIntent: “Show my WakeAct alarms” — lists all alarms with smart dialog
- DeleteAlarmIntent: “Delete alarm in WakeAct” — removes alarm with notification cleanup
- All intents registered via
AppShortcutsProviderwith trigger phrases
March 23, 2026
iOSDevelopment Kickoff — Core Architecture & First Build
Day 1Core WakeAct app with SwiftUI MVVM architecture, alarm scheduling, 5 puzzle types, app blocking via DeviceActivityMonitor, onboarding flow, and 38 bug fixes and enhancements across 5 phases: critical fixes, stubbed implementations, UX enhancements, accessibility, and infrastructure.
Phase 1 — Critical Fixes (7)
- rescheduleAllAlarms(): Was completely empty — alarms were never rescheduled after app restart
- handleSnooze(): Only printed to console — snooze was non-functional
- PuzzleGenerator memory fallback: .memory case returned mathGenerator instead of handling memory puzzles
- Test alarm button: Used random UUID, no alarm matched
- Timed blocking midnight crossing: Date components missing day info for cross-midnight schedules
- Temporary unlock dies on background: DispatchQueue timer killed when backgrounded
- cancelAlarm() race condition: Fire-and-forget Task could conflict with rescheduleAll()
Phase 2 — Stubbed Implementations (5)
- No-snooze notification category, puzzle unlock config, lockout countdown timer
- Debug section hidden in production, cryptographic salt generation
Phase 3 — UX Enhancements (6)
- Pull-to-refresh on alarm list, context menu + delete confirmation
- Snooze indicator (used/max), puzzle haptic feedback
- 5 differentiated alarm sounds with gradual volume ramp
- 4-page swipeable onboarding flow
Phase 4 — Accessibility
- VoiceOver labels on alarm rows with computed accessibility strings
Phase 5+ — Infrastructure & Quality
- ModelContainer refactor, per-config app selection, inline permission requests in onboarding
- Memory game 3D flip animation, user-facing error banners
- Replaced all print() with os.log, notification permission checks, widget refreshes
- Force unwrap fixes, word scramble guarantees, overlap detection, loading states
- Accessibility labels on DayOfWeekPicker, PuzzleProgressBar, MathPuzzleView
No entries match your filters
Try adjusting your search or category filters.Codebase at a Glance
The numbers behind WakeAct's engineering.