# Project export: AlarmGemini - Agentic AI on Android

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: UC Berkeley AI Hackathon 2025
- Tagline: Agentic android alarm app using Gemini API with voice input. Say 'set 5 backup alarms' - AI autonomously calculates intervals, resolves conflicts. First truly independent alarm assistant.
- Devpost: https://devpost.com/software/alarmgemini
- GitHub: https://github.com/somesh-bagadiya/AlarmGemini
- Video: https://www.youtube.com/embed/en3SYS2HcoQ?enablejsapi=1&hl=en_US&rel=0&start=&version=3&wmode=transparent
- Team: 1 GitHub contributor(s) — Somesh Bagadiya (2 commits)

## Devpost submission (written by the team)

### Overview

🚀 What It Does AlarmGemini demonstrates the future of conversational AI integration - showing how any app can implement intelligent chat and voice interactions using modern LLMs. The MVP Concept: This isn't just an alarm app - it's a proof-of-concept for conversational AI patterns that any application can adopt. Traditional App Interaction: User: Navigates through menus and forms App: Executes predefined actions Conversational AI Integration Examples: Natural Language Variations: User: "Set alarm at 7 in morning" → AI creates 7:00 AM alarm User: "Set alarm 5 min from now" → AI calculates current time + 5 minutes User: "Set 3 alarm at 7 in the morning 10 mins apart" → AI creates 7:00, 7:10, 7:20 AM Core Integration Patterns Demonstrated: Voice-to-Action Pipeline: Speech → AI Processing → App Functions Natural Language Understanding: Converting conversational commands to app actions Agentic Decision Making: AI autonomously calculates optimal solutions Contextual Responses: AI explains its reasoning and provides feedback 🛠 How We Built It Technology Stack: Android: Kotlin + Jetpack Compose + Material Design 3 AI: Gemini 2.0 Flash API (Direct REST integration) Voice: Android Speech Recognition + Text-to-Speech Architecture: MVVM with Coroutines and StateFlow Speech-to-Speech Pipeline: Key Technical Innovations: Natural Language Parsing: Handles variations like "7 in morning", "5 min from now", "10 mins apart" Contextual Time Processing: Converts relative times ("from now") using current system time Autonomous Interval Calculation: AI computes spacing for "3 alarms 10 mins apart" automatically Intelligent Command Recognition: Understands intent from informal speech patterns 💡 What We Learned Agentic AI is the Future: Moving beyond reactive chatbots to proactive AI that analyzes, decides, and acts autonomously represents a fundamental shift in human-computer interaction. Context is Everything: The difference between "set alarm" and "set backup alarms for important meeting" requires understanding semantic context, temporal awareness, and user intent. Voice + AI = Magic: When speech recognition, natural language processing, and text-to-speech work seamlessly together, the interaction feels truly magical. 💪 Challenges We Overcame 1. SDK Migration Crisis: Started with Google's deprecated Generative AI SDK that caused crashes. Pivoted to direct REST API integration using OkHttp. 2. Real-Time Voice Processing: Implemented optimized API calls and comprehensive visual feedback to ensure natural conversation flow. 3. Complex Command Parsing: Developed sophisticated prompt engineering and fallback patterns to handle multi-part voice commands reliably. 🎯 What Makes This Special This isn't about alarms - it's about demonstrating conversational AI integration patterns: Compared to existing approaches: Alarmi focuses on specific alarm features AI Voice Alarm provides basic voice reminders Most apps still rely on traditional UI/UX patterns AlarmGemini's Integration Patterns: Reusable Architecture: Speech-to-speech pipeline that any app can implement LLM Integration Framework: Shows how to connect Gemini API to app functions Conversational UX Paradigm: Demonstrates natural language as primary interface Agentic Behavior Templates: Patterns for autonomous AI decision-making in apps 🚀 Impact & Demo Value The Real MVP - Conversational AI Integration: Replicable Patterns: Any app can adopt these chat/voice integration techniques Framework Demonstration: Shows how to connect LLMs to app functionality UX Paradigm Shift: Natural language as primary interface, not just a feature Broader Implications for App Development: This project shows how any application can integrate conversational AI: E-commerce: "Find me a blue dress under $100 for a wedding" Finance: "Move $500 from savings to checking and pay my electricity bill" Healthcare: "Schedule my annual checkup and remind me about my medication" Productivity: "Create a project timeline for the Q2 launch with 5 milestones" Technical Integration Patterns: Voice-to-Function Pipeline: Speech → NLP → App Actions → Voice Response LLM-App Bridge: Converting natural language to structured app commands Agentic Decision Framework: AI reasoning patterns for autonomous app behavior Conversational State Management: Maintaining context across interactions Built with: Kotlin, Jetpack Compose, Gemini 2.0 Flash API, Android Speech Recognition, Text-to-Speech The MVP Demonstration: Natural language processing that handles real speech patterns: "Set alarm at 7 in morning" (informal grammar) "Set alarm 5 min from now" (relative time) "Set 3 alarm at 7 in the morning 10 mins apart" (complex multi-alarm) This shows how any app can implement conversational AI interactions! 🎤✨

## README (from the GitHub repository)

No README available.

## Detected evidence (automated analysis)

Indexed codebase: 47 recognized source files, 131 KB.
- Kotlin (language) — detected in the code
- AI coding agent: Cursor — evidence: config files committed to the repository

## Codebase structure (from repository index)

### Files (60 of 60)

```
.cursor/rules/alarm-core.mdc
.cursor/rules/alarmgemini-project.mdc
.cursor/rules/chat-ai.mdc
.gitignore
.idea/.gitignore
.idea/AndroidProjectSystem.xml
.idea/codeStyles/codeStyleConfig.xml
.idea/codeStyles/Project.xml
.idea/compiler.xml
.idea/deploymentTargetSelector.xml
.idea/deviceManager.xml
.idea/gradle.xml
.idea/inspectionProfiles/Project_Default.xml
.idea/migrations.xml
.idea/misc.xml
.idea/runConfigurations.xml
.idea/studiobot.xml
app/.gitignore
app/build.gradle.kts
app/plan.md
app/proguard-rules.pro
app/src/androidTest/java/com/example/alarmgemini/ExampleInstrumentedTest.kt
app/src/main/AndroidManifest.xml
app/src/main/java/com/example/alarmgemini/ai/SimpleNlp.kt
app/src/main/java/com/example/alarmgemini/alarm/AlarmReceiver.kt
app/src/main/java/com/example/alarmgemini/alarm/AlarmScheduler.kt
app/src/main/java/com/example/alarmgemini/alarm/AlarmTools.kt
app/src/main/java/com/example/alarmgemini/AlarmListScreen.kt
app/src/main/java/com/example/alarmgemini/AlarmListViewModel.kt
app/src/main/java/com/example/alarmgemini/AlarmRingActivity.kt
app/src/main/java/com/example/alarmgemini/chat/ChatMessage.kt
app/src/main/java/com/example/alarmgemini/chat/ChatScreen.kt
app/src/main/java/com/example/alarmgemini/chat/ChatViewModel.kt
app/src/main/java/com/example/alarmgemini/chat/VoiceChatScreen.kt
app/src/main/java/com/example/alarmgemini/MainActivity.kt
app/src/main/java/com/example/alarmgemini/MainViewModel.kt
app/src/main/java/com/example/alarmgemini/services/McpService.kt
app/src/main/java/com/example/alarmgemini/ui/theme/Color.kt
app/src/main/java/com/example/alarmgemini/ui/theme/Theme.kt
app/src/main/java/com/example/alarmgemini/ui/theme/Type.kt
app/src/main/java/com/example/alarmgemini/UiState.kt
app/src/main/res/drawable/ic_launcher_background.xml
app/src/main/res/drawable/ic_launcher_foreground.xml
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
app/src/main/res/values/colors.xml
app/src/main/res/values/strings.xml
app/src/main/res/values/themes.xml
app/src/main/res/xml/backup_rules.xml
app/src/main/res/xml/data_extraction_rules.xml
app/src/test/java/com/example/alarmgemini/alarm/AlarmSchedulerTest.kt
app/src/test/java/com/example/alarmgemini/ExampleUnitTest.kt
build.gradle.kts
dependencies.txt
gradle.properties
gradle/libs.versions.toml
gradle/wrapper/gradle-wrapper.properties
gradlew
gradlew.bat
settings.gradle.kts
```

### Dependencies

No dependency index available.

### Recent commits (newest first)

- Update gradle.properties
- Chat and voice working and at same stage
- first commit

## Key source files (fetched from GitHub, selected and truncated for size)

### app/plan.md

```markdown
# AlarmGemini - **Hackathon MVP: Agentic AI Alarm Assistant**

## 🏆 **HACKATHON CONCEPT**

**Goal**: Demonstrate advanced agentic AI capabilities in an alarm app that thinks and acts autonomously
**Timeline**: Hackathon demo-ready (focus on impressive AI features, not production polish)
**Theme**: Show how AI can be truly "agentic" - making intelligent decisions, learning patterns, and acting proactively

Following [hackathon AI project planning strategies](https://medium.com/@lalarukh.1992/day-3-of-30-i-used-ai-to-plan-a-hackathon-project-from-start-to-finish-ec1f989b8b5f), this MVP demonstrates **agentic AI that revolutionizes user interaction** through natural language understanding and autonomous decision-making.

## 🎯 **CORE DEMO FEATURES (What Judges Will See)**

### **1. Advanced Agentic Intelligence** 🤖
**"Set 5 alarms in 5 minutes"** → AI automatically calculates optimal 1.25-minute intervals
**"Create backup alarms for my important meeting"** → AI proactively creates 3 smart backup alarms
**"Set alarms starting at 6 AM with increasing intensity"** → AI plans progressive alarm sequence

### **2. Context-Aware Decision Making** 🧠  
- **System time awareness**: "Set alarm in 2 hours" uses real current time
- **Intelligent conflict resolution**: AI detects overlapping alarms and suggests optimizations
- **Proactive suggestions**: "You usually snooze at 7 AM, want me to set it for 7:15 instead?"

### **3. Natural Language Mastery** 💬
- **Complex pattern recognition**: Understands multi-part commands
- **Conversational memory**: Remembers context within conversation
- **Graceful fallbacks**: Never fails - always finds a way to help

### **4. Autonomous Learning** 📈
- **Pattern detection**: Learns user habits and preferences
- **Proactive recommendations**: Suggests optimizations without being asked
- **Adaptive responses**: Gets smarter with each interaction

## 🚀 **HACKATHON DEVELOPMENT PHASES**

### **Phase 1: Core Agentic System** ✅ **COMPLETE**
- [X] **Advanced SimpleNlp.kt**: Multi-alarm intelligence with `AgenticCommand` architecture
- [X] **Smart ChatViewModel.kt**: Dual-layer AI processing with context awareness
- [X] **Intelligent scheduling**: Automatic interval calculation and conflict detection
- [X] **System time integration**: Real-time context for all operations
- [X] **Demo-ready UI**: Translucent chat popup showcasing AI interaction

### **Phase 2: Hackathon Demo Enhancements** ⭐ **CURRENT FOCUS**

#### **Week 1: Advanced Agentic Features** 🎪
**Goal**: Add impressive AI capabilities that wow judges

- [ ] **Proactive AI Suggestions** 
  - [ ] "You have 5 alarms at 7 AM this week, want me to optimize them?"
  - [ ] "Based on your pattern, I recommend setting a backup alarm"
  - [ ] Auto-suggest alarm improvements during chat

- [ ] **Smart Pattern Recognition**
  - [ ] Detect user habits: "You always set alarms on Sunday night for Monday"
  - [ ] Learn preferences: "You prefer 10-minute intervals between backup alarms"
[truncated — 7055 more characters]
```

### build.gradle.kts

```kotlin
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.kotlin.android) apply false
    alias(libs.plugins.kotlin.compose) apply false
    alias(libs.plugins.google.android.libraries.mapsplatform.secrets.gradle.plugin) apply false
}
```

### settings.gradle.kts

```kotlin
pluginManagement {
    repositories {
        google {
            content {
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.name = "AlarmGemini"
include(":app")

```

### .idea/compiler.xml

```xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CompilerConfiguration">
    <bytecodeTargetLevel target="21" />
  </component>
</project>
```

### .idea/studiobot.xml

```xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="StudioBotProjectSettings">
    <option name="shareContext" value="OptedIn" />
  </component>
</project>
```

### .idea/AndroidProjectSystem.xml

```xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="AndroidProjectSystem">
    <option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
  </component>
</project>
```

### .idea/migrations.xml

```xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectMigrations">
    <option name="MigrateToGradleLocalJavaHome">
      <set>
        <option value="$PROJECT_DIR$" />
      </set>
    </option>
  </component>
</project>
```

### .idea/deviceManager.xml

```xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="DeviceTable">
    <option name="columnSorters">
      <list>
        <ColumnSorterState>
          <option name="column" value="Name" />
          <option name="order" value="ASCENDING" />
        </ColumnSorterState>
      </list>
    </option>
  </component>
</project>
```

### .idea/misc.xml

```xml
<project version="4">
  <component name="ExternalStorageConfigurationManager" enabled="true" />
  <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
    <output url="file://$PROJECT_DIR$/build/classes" />
  </component>
  <component name="ProjectType">
    <option name="id" value="Android" />
  </component>
</project>
```

### .idea/deploymentTargetSelector.xml

```xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="deploymentTargetSelector">
    <selectionStates>
      <SelectionState runConfigName="app">
        <option name="selectionMode" value="DROPDOWN" />
        <DropdownSelection timestamp="2025-06-22T17:06:00.955693800Z">
          <Target type="DEFAULT_BOOT">
            <handle>
              <DeviceId pluginId="PhysicalDevice" identifier="serial=R3CW9020RTV" />
            </handle>
          </Target>
        </DropdownSelection>
        <DialogSelection />
      </SelectionState>
    </selectionStates>
  </component>
</project>
```

[37 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]