"The Art of Stillness in Personal Safety"
An Android-native passive protection system built with MVI and Clean Architecture.
Still is a departure from traditional "Panic Button" safety apps. It operates on a Negative-Check-In protocol: instead of requiring the user to act during an emergency, it assumes an emergency is occurring if the user fails to act within a specific timeframe.
This application offers a refined suite of functionalities designed for quiet assurance and maximum reliability:
- ⏱️ The Safety Pulse: Set a custom safety interval (24h, 48h, or custom). The app maintains a silent background "Pulse" that watches over you.
- ✅ Passive Check-In: A simple, minimalist interface to reset your pulse. No loud noises, no complex menus.
- 🚨 Zero-Hour Protocol: If the timer reaches zero, Still automatically triggers emergency protocols, notifying your Inner Circle with your last known status.
- 👥 Inner Circle Management: Securely store and manage your most trusted contacts who will receive alerts during a protocol violation.
- 🔋 Battery Optimization Guard: Built-in intelligence to bypass Android "Doze Mode" and App Standby, ensuring your safety timer never stops.
- ☢️ Nuclear Wipe: A high-security feature to instantly purge all PII (Personally Identifiable Information), contact logs, and safety history with a single tap.
Still is engineered following Clean Architecture principles, ensuring a robust, scalable, and maintainable codebase that can be trusted in critical situations.
- 🏛️ Domain Layer: The core of the app. Contains platform-independent business logic,
UseCases(e.g.,StartTimerUseCase,TriggerZeroHourUseCase), and Repository interfaces. - 💾 Data Layer: Implements repository interfaces. Handles data via Encrypted DataStore for local persistence and Ktor for secure remote emergency dispatching.
- 🎨 Presentation Layer: Manages the UI using Jetpack Compose. It follows the MVI (Model-View-Intent) pattern for predictable, reactive state management.
The app uses a strict unidirectional data flow:
- User Intent: (e.g., Click Check-In)
- ViewModel: Processes intent and orchestrates business logic.
- State: ViewModel emits a new immutable state.
- UI: Compose UI renders the state instantly.
- 🌍 Platform: Android Native (Kotlin)
- 🎨 UI: Jetpack Compose (Glassmorphism / Twilight Theme)
- 💉 DI: Koin (Lightweight Dependency Injection)
- 📡 Networking: Ktor Client (Asynchronous HTTP)
- ⏰ Background: WorkManager & AlarmManager (High-precision timing)
- 🔐 Security: Jetpack Security (Crypto) & DataStore
- 📱 Analytics: Firebase Analytics & Crashlytics
- 📳 Haptics: Standardized
LocalHapticFeedbackfor tactile assurance
- Splash Screen: Initiates background safety protocols and setup.
- The Safety Contract: A premium onboarding experience defining the shared protocols of the app.
- The Timer Dial: The central hub showing your remaining "Stillness" and check-in actions.
- Profile Setup: Step-by-step configuration of your identity and your "Inner Circle."
- Settings: Control over intervals, permissions, and the "Nuclear Wipe" protocol.
- Android Studio Ladybug (2024.2.1) or higher.
- JDK 17 or 21.
- A physical Android device (recommended for Haptic Feedback testing).
- Clone the Repo:
git clone https://github.com/thezayin/still-safety-timer.git
- Firebase Setup: Place your
google-services.jsonin theapp/directory. - Sync & Build: Let Gradle download dependencies and hit Run.
Contributions to the Stillness protocols are welcome!
- Fork the repository.
- Create your feature branch (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -m 'feat: Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - Open a Pull Request.
Zain Shahid (thezayin) For professional inquiries regarding safety protocols or technical architecture:
- Email: thezayenshahid@gmail.com
- GitHub: @thezayin
