Privacy Policy for Petal Push
This Privacy Policy describes how Petal Push (“we,” “our,” or “the App”) handles your information.
1. Information Collection and Use Petal Push is a habit-tracking app designed for personal use. We do not collect, store, or share any personal information, habit data, or “Plant Power” progress on external servers. All data is stored locally on your device.
2. Permissions The App does not require access to your camera, contacts, or location.
3. Third-Party Services We do not use third-party analytics or advertising services that collect your data.
4. Contact Us If you have any questions, please contact us at kwekkweksociety@gmail.com.
Petal Push v2.0 | Project Documentation 🌿
This documentation provides an overview of the architecture, features, and technical implementation of Petal Push, a gamified habit tracker developed for Android.
### Technical Overview
- Language: Kotlin
- UI Framework: Jetpack Compose
- Data Persistence: Jetpack DataStore (Preferences)
- Audio Engine: Android MediaPlayer
### Core Features
- Persistent Habit Tracking: Uses DataStore to save habits and “Plant Power” points locally. Data persists even after the app process is terminated.
- Gamified Leveling System: A dynamic ranking system that evolves based on accumulated points:
- Sprout 🌱: 0–4 points
- Budding 🌿: 5–9 points
- Flowering 🌸: 10–19 points
- Ancient Tree 🌳: 20+ points
- Auditory Feedback: Milestones (ranks 5, 10, and 20) trigger a success sound (
level_up.mp3) to enhance user engagement. - Modern UI/UX:
- Dark Mode Support: Adapts colors automatically based on system settings.
- Animated Counter: Uses
AnimatedContentfor smooth transitions in point changes. - Sync Indicator: Displays a “Last Synced” timestamp showing the exact time data was last modified.
### Data Persistence Logic
The app utilizes a custom StoreAppData class to manage preferences. Habits are stored as a CSV (comma-separated values) string and parsed back into a list upon retrieval.
Kotlin
// Example DataStore Logicval getHabits: Flow<List<String>> = context.dataStore.data.map { preferences -> val habitsString = preferences[HABITS_KEY] ?: "" if (habitsString.isEmpty()) emptyList() else habitsString.split(",")}
### Development History
- Version 1.0: Initial release focusing on basic habit list functionality (January 2026).
- Version 2.0: Major update including DataStore persistence, rank systems, and sound effects (February 2026).
### Future Roadmap
- Success Sounds: Expand library for different milestones.
- Visual Evolution: Implement customized plant graphics that grow visually with rank progress.