Flinkis helps kids build healthy routines through gamification and parental guidance. Created with love for kids worldwide.
- 🎯 Track Activities — Morning, school, afternoon, evening, and bedtime routines
- ⭐ Earn Rewards — Collect points and unlock weekly achievements
- 📋 Smart Templates — Pre-built templates or create custom routines
- 🖨️ Print Support — Generate printable routine sheets for family discussions
- 👨👩👧👦 Multiple Profiles — Manage routines for each child separately
- 🌍 14 Languages — English, Norsk, العربية, Dansk, Deutsch, Français, Indonesia, 日本語, 한국어, Melayu, Nederlands, Svenska, ไทย, Türkçe
- 🎨 3 Themes — Boy (Blue), Girl (Pink), Neutral (Green)
- 📵 Completely Offline — No ads, no tracking, no internet permission required
- 🔐 Privacy First — All data stored locally on device
| Component | Technology |
|---|---|
| Language | Kotlin 2.1.0 |
| UI Framework | Jetpack Compose + Material Design 3 |
| Architecture | MVVM + Clean Architecture |
| Dependency Injection | Hilt 2.56.2 |
| Database | Room (SQLite) with Flow |
| State Management | ViewModel + DataStore |
| Navigation | Jetpack Navigation Compose |
| Min SDK | 26 (Android 8.0) |
| Target SDK | 35 (Android 15) |
- Android Studio Ladybug or later
- JDK 11 or later
- Android SDK API 35
- Git
git clone https://github.com/halallens-no/Flinkis.git
cd Flinkis./gradlew assembleDebugOutput: app/build/outputs/apk/debug/app-debug.apk
Install on device:
adb install app/build/outputs/apk/debug/app-debug.apkFor Play Store or other distribution, you need a signing key.
keytool -genkey -v \
-keystore flinkis-release.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias flinkisThis will prompt for keystore and key passwords.
FLINKIS_KEYSTORE_FILE=/full/path/to/flinkis-release.jks
FLINKIS_KEYSTORE_PASSWORD=your_store_password
FLINKIS_KEY_ALIAS=flinkis
FLINKIS_KEY_PASSWORD=your_key_passwordlocal.properties to .gitignore (already included) — never commit signing credentials.
APK:
./gradlew assembleRelease
# Output: app/build/outputs/apk/release/app-release.apkAAB (for Google Play):
./gradlew bundleRelease
# Output: app/build/outputs/bundle/release/app-release.aabapp/src/main/
├── java/com/halallens/flinkis/
│ ├── MainActivity.kt # Main activity entry point
│ ├── MyRoutineApp.kt # Application class (Hilt setup)
│ ├── data/
│ │ ├── local/ # Room database setup
│ │ ├── dao/ # Database access objects
│ │ ├── entity/ # Database entities
│ │ ├── preferences/ # DataStore preferences
│ │ └── repository/ # Repository pattern
│ ├── di/ # Hilt dependency injection modules
│ ├── domain/
│ │ ├── model/ # Domain models
│ │ └── usecase/ # Business logic use cases
│ ├── ui/
│ │ ├── screens/ # Composable screens
│ │ │ ├── splash/ # Splash screen
│ │ │ ├── onboarding/ # Onboarding flow
│ │ │ ├── today/ # Today's activities
│ │ │ ├── weekly/ # Weekly progress
│ │ │ ├── rewards/ # Rewards screen
│ │ │ ├── settings/ # Settings
│ │ │ └── templates/ # Template selection
│ │ ├── components/ # Reusable composables
│ │ ├── navigation/ # Navigation graph
│ │ ├── theme/ # Theme and colors
│ │ └── util/ # UI utilities
│ └── util/
│ ├── PrintHelper.kt # Printing functionality
│ ├── LocaleHelper.kt # Localization helper
│ ├── DateUtils.kt # Date utilities
│ └── ...
└── res/
├── drawable/ # Vector drawables and images
├── mipmap/ # App icon (adaptive)
├── values/ # English strings
├── values-ar/ # Arabic translations
├── values-da/ # Danish translations
├── values-de/ # German translations
├── values-fr/ # French translations
├── values-in/ # Indonesian translations
├── values-ja/ # Japanese translations
├── values-ko/ # Korean translations
├── values-ms/ # Malay translations
├── values-nb/ # Norwegian translations
├── values-nl/ # Dutch translations
├── values-sv/ # Swedish translations
├── values-th/ # Thai translations
├── values-tr/ # Turkish translations
└── xml/ # XML configs
Flinkis is fully translated into 14 languages. Translations are managed in Android values-*/strings.xml directories.
To add a new language:
- Create
res/values-[code]/strings.xml(e.g.,values-it/strings.xmlfor Italian) - Copy all strings from
res/values/strings.xml - Translate each string value
- Add language code to
LocaleHelper.ktSUPPORTED_LANGUAGESset - Add language card to
LanguageSelectionScreen.kt
| Code | Language | Flag |
|---|---|---|
| en | English | 🇬🇧 |
| nb | Norsk | 🇳🇴 |
| ar | العربية (Arabic) | 🇸🇦 |
| da | Dansk (Danish) | 🇩🇰 |
| de | Deutsch (German) | 🇩🇪 |
| fr | Français (French) | 🇫🇷 |
| in | Indonesia (Indonesian) | 🇮🇩 |
| ja | 日本語 (Japanese) | 🇯🇵 |
| ko | 한국어 (Korean) | 🇰🇷 |
| ms | Melayu (Malay) | 🇲🇾 |
| nl | Nederlands (Dutch) | 🇳🇱 |
| sv | Svenska (Swedish) | 🇸🇪 |
| th | ไทย (Thai) | 🇹🇭 |
| tr | Türkçe (Turkish) | 🇹🇷 |
Contributions are welcome! Whether it's bug fixes, new features, translations, or documentation improvements.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Kotlin: Follow Kotlin Coding Conventions
- Formatting: Use Android Studio's built-in formatter (Ctrl+Alt+L)
- Naming: Clear, descriptive names for variables, functions, and classes
- Comments: Add comments for complex logic; keep code self-documenting
Before submitting:
# Build debug APK
./gradlew assembleDebug
# Run unit tests
./gradlew test
# Build with ProGuard (release build)
./gradlew assembleRelease- Keep PRs focused (one feature/fix per PR)
- Add descriptive commit messages
- Reference related issues (
Fixes #123) - Test on multiple device sizes/Android versions
- Verify all 14 languages don't break layout
This project is licensed under the MIT License — see the LICENSE file for details.
When redistributing or creating derivative works, you MUST maintain attribution to HalalLens:
- Include "Created by HalalLens" in app's About screen
- Link to https://halallens.no in documentation
- Keep original license notices intact
This app uses open source libraries licensed under Apache License 2.0. See NOTICE file for complete attribution and license text.
Created by: HalalLens Inspired by: Nafisa, who wanted to share kid-friendly apps globally Contact: mac@halallens.no
- The Android Open Source Project (Jetpack libraries)
- Google (Compose, Material Design 3, Hilt)
- JetBrains (Kotlin)
- The open source community
/myroutine command and superpowers plugins from the HalalLens project environment. While extensive testing and manual verification have been performed, please be aware that:
- The code may contain AI-generated patterns that require careful review
- Edge cases and unusual scenarios may not be fully covered
- Future maintenance should include careful testing and validation
- Contributions should be thoroughly tested before merging
For bug reports or unexpected behavior, please open an issue with detailed reproduction steps.
Found a bug? Please open an issue on GitHub with:
- Device model and Android version
- Steps to reproduce
- Expected vs actual behavior
- Screenshots (if applicable)
Have an idea? Open an issue with:
- Clear description of the feature
- Why it would be useful
- Example use case
- Check existing issues and discussions
- Read through code comments
- Contact us at mac@halallens.no
- F-Droid distribution
- Widget support
- Wear OS companion app
- Cloud sync (optional)
- More themes
- Additional languages
- Performance optimizations
See ROADMAP.md for detailed development history and future plans.
- Upload AAB from
app/build/outputs/bundle/release/app-release.aab - Complete store listing (description, screenshots, category)
- Set content rating
- Review privacy policy
- Submit for review
Flinkis is open source and can be submitted to F-Droid:
- Fork F-Droid repository
- Add metadata in
metadata/com.halallens.flinkis.yml - Submit pull request
Latest Release: Flinkis v1.0.1 (7.8 MB)
- Signed APK (ready to install on Android devices)
- Version: 1.0.1
- Target SDK: Android 15 (API 35)
- Minimum SDK: Android 8.0 (API 26)
- All 14 languages included
- Ad-free, offline-first
Temporary download link — Direct installation available for early testing
Flinkis collects zero data:
- ✅ No internet permissions
- ✅ No analytics
- ✅ No ads
- ✅ No tracking
- ✅ All data stored locally on device
- ✅ No backend servers
Made with ❤️ by HalalLens — https://halallens.no
