{"id":45446436,"url":"https://github.com/sysadmindoc/alarmclockxtreme","last_synced_at":"2026-04-30T00:01:18.974Z","repository":{"id":339877700,"uuid":"1163695448","full_name":"SysAdminDoc/AlarmClockXtreme","owner":"SysAdminDoc","description":"A feature-rich, open-source alarm clock app for Android with dismiss challenges, weather dashboard, bedtime tracking, and a deep dark theme. No ads, no tracking, no accounts.","archived":false,"fork":false,"pushed_at":"2026-04-29T15:37:13.000Z","size":3930,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-29T15:39:59.628Z","etag":null,"topics":["alarm-clock","android","dark-theme","jetpack-compose","kotlin","material3"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SysAdminDoc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-22T02:03:08.000Z","updated_at":"2026-04-29T15:29:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"dbdcdfd5-4b6d-4898-87e2-94d1ef934d03","html_url":"https://github.com/SysAdminDoc/AlarmClockXtreme","commit_stats":null,"previous_names":["sysadmindoc/alarmclockxtreme"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/SysAdminDoc/AlarmClockXtreme","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SysAdminDoc%2FAlarmClockXtreme","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SysAdminDoc%2FAlarmClockXtreme/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SysAdminDoc%2FAlarmClockXtreme/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SysAdminDoc%2FAlarmClockXtreme/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SysAdminDoc","download_url":"https://codeload.github.com/SysAdminDoc/AlarmClockXtreme/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SysAdminDoc%2FAlarmClockXtreme/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32448882,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T22:27:22.272Z","status":"ssl_error","status_checked_at":"2026-04-29T22:10:49.234Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alarm-clock","android","dark-theme","jetpack-compose","kotlin","material3"],"created_at":"2026-02-22T04:02:07.709Z","updated_at":"2026-04-30T00:01:18.967Z","avatar_url":"https://github.com/SysAdminDoc.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AlarmClockXtreme\n\n![Version](https://img.shields.io/badge/version-1.9.0-blue)\n![License](https://img.shields.io/badge/license-Apache%202.0-green)\n![Platform](https://img.shields.io/badge/platform-Android%208.0+-3DDC84?logo=android\u0026logoColor=white)\n![Kotlin](https://img.shields.io/badge/Kotlin-2.1-7F52FF?logo=kotlin\u0026logoColor=white)\n![Jetpack Compose](https://img.shields.io/badge/Jetpack%20Compose-Material%203-4285F4)\n\n\u003e A feature-rich, open-source alarm clock for Android with 50+ alarm fields, 19 dismiss challenges, smart wake intelligence, a built-in YouTube alarm-sound downloader, and a deep dark theme. No ads, no tracking, no accounts.\n\n\u003cimg width=\"772\" height=\"568\" alt=\"image\" src=\"https://github.com/user-attachments/assets/01e2e354-3905-4dd2-bb86-112282ae1346\" /\u003e\n\n## Download\n\n**Latest signed APK** — [Releases page](https://github.com/SysAdminDoc/AlarmClockXtreme/releases/latest)\n\n```\nadb install AlarmClockXtreme-v1.9.0-play.apk\n```\n\nThe Play-flavor APK includes the YouTube alarm-sound downloader (yt-dlp + NewPipe Extractor). The F-Droid flavor strips that downloader for an unencumbered build.\n\n## Build From Source\n\n```bash\ngit clone https://github.com/SysAdminDoc/AlarmClockXtreme.git\ncd AlarmClockXtreme\n./gradlew assemblePlayDebug\n# Install: adb install app/build/outputs/apk/play/debug/app-play-debug.apk\n```\n\n**Requirements:** Android Studio Ladybug+, JDK 17, Android SDK 35\n\n## Features\n\n### Core Alarm Engine\n| Feature | Description |\n|---------|-------------|\n| Reliable Scheduling | `setAlarmClock()` for maximum reliability, survives Doze mode |\n| Solar-Relative Firing | Fire relative to sunrise/sunset with a configurable offset (NOAA approximation) |\n| Alarm Groups | Tag alarms (Work, School, Gym), filter with chips |\n| Alarm Profiles | Named configurations (Work, Travel, Weekend) for quick switching |\n| Date-Specific Alarms | Set alarm for a particular calendar date (overrides repeat days) |\n| Duplicate Alarm | Clone any alarm with all settings via overflow menu |\n| Skip Next | Skip one occurrence of a repeating alarm |\n| Vacation Mode | Date range auto-skip for all repeating alarms |\n| Holiday Auto-Skip | Skip public holidays via Nager.Date API (40+ countries) |\n| Templates | Power Nap, Early Bird, Weekday, Weekend presets |\n| Shareable Alarms | Share a single alarm as an `acx://alarm?data=` link; imports are disabled until reviewed |\n| Early Dismiss | Skip upcoming alarm from the persistent notification |\n| Calendar Auto-Alarm | Auto-create alarm before first calendar event daily |\n\n### Dismiss Challenges (19 Types)\n| Challenge | Description |\n|-----------|-------------|\n| Math (Easy/Medium/Hard) | Solve arithmetic problems with explicit operator precedence |\n| Shake Phone | Shake device N times (configurable) |\n| Number Sequence | Tap 6 numbers in ascending order |\n| Memory Pattern | Memorize and recreate a tile pattern on 3x3 grid |\n| Type a Phrase | Type a displayed phrase exactly (custom phrases supported) |\n| Walk Steps | Walk N steps using step counter sensor |\n| NFC Tag Scan | Tap a pre-registered NFC tag |\n| Barcode/QR Scan | Scan a pre-registered barcode |\n| Photo Match | Photograph a registered location (similarity scoring) |\n| Squats | Accelerometer-based squat detection |\n| Maze Puzzle | Navigate a randomized 5x5 maze |\n| Wi-Fi Connect | Connect to a specific Wi-Fi network |\n| Count the Sheep | Tap every drifting sheep; avoid the decoy goats (novel CAPTCHA) |\n| Simon Says | Watch a 4-pad color sequence and play it back in order |\n| Type Date Backwards | Type today's ISO date reversed character-by-character |\n| Stroop Test | Tap the INK color of a color-word, not the word itself |\n| Mission Chaining | Stack 2-5 challenges in sequence (e.g., Math + Shake + Typing) |\n| Adaptive Difficulty | Auto-escalates math difficulty based on snooze history |\n\n### Anti-Snooze Arsenal\n| Feature | Description |\n|---------|-------------|\n| Progressive Snooze | Each snooze shortens by 1 minute (10 -\u003e 9 -\u003e 8 -\u003e ...) |\n| Backup Sound Escalation | Ultra-loud volume boost if no interaction within configurable delay |\n| Max Snooze Count | Auto-dismiss after N snoozes reached |\n| Guardian Angel | Emergency contact SMS + phone call if alarm not dismissed |\n| Wake Confirmation | Re-fires alarm if user doesn't confirm they're awake |\n| Flashlight Strobe | Camera flash LED strobe during alarm |\n| Repeat Missed Alarms | Auto-silenced alarm re-fires briefly on next unlock (configurable) |\n| Cover-to-Snooze | Hold a hand over the proximity sensor for ~1.5s to snooze |\n| Hardware Button Action | Map volume / headset / camera keys to snooze or dismiss per alarm |\n\n### Wake Experience\n| Feature | Description |\n|---------|-------------|\n| Flash Wake | Gradual screen brightness increase alongside volume |\n| Sunrise Simulation | Screen transitions from deep red to warm yellow |\n| TTS Announcement | Speaks time, date, and weather after dismissal |\n| Morning Briefing | Full-screen good morning card with weather + calendar |\n| Morning Routine | Post-alarm checklist (stretch, water, journal, etc.) |\n| Motivational Quotes | Random inspirational quotes on alarm firing screen |\n| Swipe Gestures | Swipe right to dismiss, left to snooze |\n| Custom Snooze | Pick 1/3/5/15/30 minute snooze from firing screen |\n\n### Sound \u0026 Vibration\n| Feature | Description |\n|---------|-------------|\n| Ringtone Picker | Browse and preview system ringtones |\n| YouTube Alarm Sounds | Search YouTube or paste a URL, preview before downloading, save the audio straight to your alarm library (Play flavor only) |\n| Random Ringtone Pool | Per-alarm pool of URIs; a random one is picked each fire (anti-habituation) |\n| Dismiss at Ringtone End | Auto-dismiss when the chosen song/tone finishes (Spotify-friendly) |\n| Spotify Integration | Play Spotify tracks/playlists as alarm sound |\n| Internet Radio | Stream any HTTP/HTTPS radio station URL |\n| Gradual Volume | Configurable fade-in (15s to 5 min) |\n| Custom Vibration | 5 patterns: Default, Gentle, Heartbeat, Escalating, SOS |\n| Silent Mode | Fire alarm with notification only, no sound |\n\n### Smart Features\n| Feature | Description |\n|---------|-------------|\n| Smart Alarm | Accelerometer-based light sleep detection, fires early during optimal window |\n| Sonar Sleep Tracking | Experimental ultrasonic breathing/movement detection |\n| Philips Hue Sunrise | Gradually ramp smart lights before alarm fires |\n| Webhook / Tasker | POST JSON on alarm fire/snooze/dismiss/miss events |\n| Flip-to-Snooze | Place phone face-down to snooze |\n\n### Dashboard \u0026 Utilities\n| Feature | Description |\n|---------|-------------|\n| Weather Tab | Centered weather hero, 3-day vertical forecast, sunrise/sunset, UV index with EPA bands, hourly strip with rain probability — Open-Meteo, free, no API key |\n| Live Radar | Animated precipitation radar embedded from Windy.com (no key, no SDK) — auto-centers on your weather location |\n| Time-of-Day Sky | The Today tab background follows your real sunrise/sunset through a 15-keyframe gradient — deep night, civil dawn, sunrise, midday peak, golden hour, dusk |\n| Weather-Aware Theme | Storms swap the sky to overcast blue-gray; night storms drop to near-black with subtle lightning flashes; tornado warnings render a rotating funnel cloud silhouette + warning banner |\n| Tornado Alerts (US) | NWS active-alerts integration via api.weather.gov — no key, free, US-only — drives the on-screen warning |\n| News Tab | Public RSS reader (Google News, BBC, NPR, Hacker News presets) — pull-to-refresh, tap to open in browser, no accounts |\n| Calendar Integration | Today's events from device calendar |\n| World Clock | Live time zones with UTC offset, 24h format support, persistent saved cities |\n| Multiple Timers | Run several countdown timers concurrently (monotonic clock) |\n| Stopwatch | Lap tracking with best/worst marking |\n| Bedtime Tracking | Sleep goal, sleep cycle calculator, bedtime reminders, sleep sounds |\n| Statistics | Dismiss streaks, snooze rate, day-of-week breakdown, response times, searchable alarm history |\n| Night Clock | Always-on bedside display with minimal brightness |\n| Home Widget | Glance-based widget showing next alarm countdown |\n| Persistent Notification | Always-visible next alarm countdown in shade |\n| Quick Settings Tile | Skip the next alarm from the system shade with one tap |\n| Tab Visibility Toggles | Hide Weather / Timer / World / News tabs from the bottom nav (Alarms + Settings always visible) |\n| Accent Color | Customizable accent color within dark theme |\n| Material You | Opt-in dynamic color from wallpaper palette (Android 12+) |\n| Wind-Down Checklist | Pre-sleep checklist rendered on the Bedtime tab |\n| Configurable Sleep Timer | Sleep-sound fade-out with 5s-10min taper and configurable hold |\n\n### Data \u0026 Reliability\n| Feature | Description |\n|---------|-------------|\n| Backup/Restore | JSON export/import of all 50+ alarm fields and 35+ settings, with optional AES-256 passphrase encryption (v5 format) |\n| Shareable Alarms | Export a single alarm to a copy/paste-able `acx://` link |\n| Boot Reschedule | All alarms re-registered after device reboot |\n| Manufacturer Compat | Onboarding warnings for Xiaomi/Samsung/Huawei battery killers |\n| Crash Logger | Automatic crash log files for debugging |\n| Auto-Silence | Configurable timeout (0/5/10/15/30 min), records as missed |\n| Webhook Reliability | Application-lived dispatch scope guarantees Tasker events fire even when the alarm service stops mid-flight |\n\n## Architecture\n\n```\n+---------------------------------------------------------+\n|                    UI Layer (Compose)                     |\n|  Screens \u003c- ViewModels \u003c- StateFlow                      |\n|  19 challenge views, 8 alarm edit sections               |\n+---------------------------------------------------------+\n|                   Domain Layer                           |\n|  AlarmScheduler | NextAlarmCalculator | SolarCalculator  |\n|  Date-specific + holiday + vacation + solar-anchor logic |\n+---------------------------------------------------------+\n|                    Data Layer                            |\n|  Room DB v8 | DataStore | Retrofit (Open-Meteo, Nager)  |\n|  50+ field Alarm entity | 35+ field AppSettings          |\n|  YouTubeAudioDownloader (yt-dlp + NewPipe Extractor)     |\n+---------------------------------------------------------+\n|                   Android Platform                       |\n|  AlarmManager | 3 ForegroundServices | 8 Workers         |\n|  6 BroadcastReceivers | Glance Widget | QS Tile          |\n+---------------------------------------------------------+\n```\n\n**Tech stack:** Kotlin 2.1, Jetpack Compose (Material 3), Room, Hilt, Retrofit + Moshi (codegen), DataStore, Glance widgets, OkHttp, Coroutines/Flow, WorkManager, yt-dlp, NewPipe Extractor (Play flavor)\n\n## Configuration\n\n### Signing\n\n1. Generate a keystore: `keytool -genkey -v -keystore release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias alarm`\n2. Copy `keystore.properties.template` to `keystore.properties`\n3. Fill in your keystore path and credentials\n4. Build: `./gradlew assembleRelease`\n\n### Build Variants\n\n| Variant | Description |\n|---------|-------------|\n| `playDebug` | Google Play flavor, debug signing |\n| `playRelease` | Google Play flavor, release signing, R8 minified |\n| `fdroidDebug` | F-Droid flavor, debug signing |\n| `fdroidRelease` | F-Droid flavor, release signing, R8 minified |\n\n## Permissions\n\n| Permission | Purpose | Required |\n|------------|---------|----------|\n| `USE_EXACT_ALARM` | Fire alarms at exact time | Yes |\n| `POST_NOTIFICATIONS` | Show alarm alerts | Yes |\n| `FOREGROUND_SERVICE` | Reliable alarm playback | Yes |\n| `FOREGROUND_SERVICE_MEDIA_PLAYBACK` | Alarm audio | Yes |\n| `FOREGROUND_SERVICE_DATA_SYNC` | Smart alarm monitoring | Yes |\n| `FOREGROUND_SERVICE_MICROPHONE` | Sonar sleep tracking | Yes |\n| `RECEIVE_BOOT_COMPLETED` | Reschedule after reboot | Yes |\n| `WAKE_LOCK` | Keep CPU during alarm | Yes |\n| `VIBRATE` | Alarm vibration | Yes |\n| `INTERNET` | Weather, holidays, webhooks, radio | Yes |\n| `ACCESS_COARSE_LOCATION` | Weather for your area | Optional |\n| `READ_CALENDAR` | Dashboard events + auto-alarm | Optional |\n| `NFC` | NFC tag dismiss challenge | Optional |\n| `CAMERA` | Barcode scan + photo match challenges | Optional |\n| `RECORD_AUDIO` | Sonar sleep tracking | Optional |\n| `ACTIVITY_RECOGNITION` | Walk steps + smart alarm | Optional |\n| `SEND_SMS` / `CALL_PHONE` | Guardian Angel emergency contact | Optional |\n| `WRITE_EXTERNAL_STORAGE` (≤ Android 9) | Save downloaded YouTube alarm sounds to MediaStore | Optional (Play flavor only) |\n\n## Privacy\n\nNo analytics. No ads. No tracking. No accounts. No data leaves your device except:\n- Weather API calls to Open-Meteo (latitude/longitude only)\n- Active-alerts calls to api.weather.gov / NWS (latitude/longitude only, US-only)\n- Holiday API calls to Nager.Date (country code only)\n- Live radar embed from Windy.com on the Weather tab (latitude/longitude only — Windy's privacy policy applies inside the embed)\n- News RSS calls to your configured feed source (Google News / BBC / NPR / etc. — no auth, no fingerprinting)\n- Webhook calls to your own configured URL\n- Internet radio streaming to your configured station\n\nFull privacy policy: [PRIVACY_POLICY.html](PRIVACY_POLICY.html)\n\n## FAQ\n\n**How does the YouTube alarm-sound downloader work?**\nOn the Alarms tab tap \"Download alarm sound from YouTube.\" A dialog opens with two modes: search YouTube directly (powered by NewPipe Extractor) or paste a video URL. Each result has a play/stop button to preview the audio before committing. Tap the row to download — yt-dlp resolves the best-audio stream, OkHttp streams it to your alarm library via MediaStore (`IS_ALARM=1`), and the ringtone picker re-enumerates so the new sound is immediately selectable. F-droid builds ship without this feature for licensing reasons.\n\n**Why does the alarm not fire on my Xiaomi/Samsung/Huawei?**\nThese manufacturers aggressively kill background apps. The app shows a manufacturer-specific warning during onboarding with steps to whitelist it. Generally: Settings \u003e Battery \u003e App Launch \u003e AlarmClockXtreme \u003e Manual \u003e enable all toggles.\n\n**Why does the weather show the wrong temperature?**\nCheck Settings \u003e Dashboard \u003e Temperature unit. The app defaults to Fahrenheit. You can also set a manual location if GPS isn't available.\n\n**Can I use this without Google Play Services?**\nYes. The app has zero Google dependencies. Weather uses Open-Meteo (free, open-source). The F-Droid build variant excludes any Play-specific code.\n\n**How does Mission Chaining work?**\nIn alarm edit, set the \"Challenge chain\" field to a comma-separated list of challenge types (e.g., `MATH_EASY,SHAKE,TYPING`). The alarm will require you to solve each challenge in order before dismissing.\n\n**What is Guardian Angel?**\nIf enabled on an alarm, and you don't dismiss within the configured delay (default 5 minutes), the app sends an SMS and attempts to call your emergency contact. Requires SEND_SMS and CALL_PHONE permissions.\n\n## Contributing\n\nIssues and PRs welcome. Please open an issue before starting major work to discuss approach.\n\n## License\n\nApache License 2.0 - see [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsysadmindoc%2Falarmclockxtreme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsysadmindoc%2Falarmclockxtreme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsysadmindoc%2Falarmclockxtreme/lists"}