A spaced-repetition flashcard app built with Jetpack Compose and the FSRS-6 scheduling algorithm. Decks, folders, cloud sync, daily study queue, reverse cards, and a daily-goal tracker — backed by Firebase.
Status: active development. This is the Android port of the iOS app.
- UI: Jetpack Compose + Material 3
- Language: Kotlin
2.3.0 - Build: Android Gradle Plugin
9.2.1,minSdk 24,targetSdk 36 - DI: Koin
- Local storage: Room + DataStore (Preferences)
- Backend: Firebase Auth (Google Sign-In), Cloud Firestore, Cloud Storage
- Scheduling: FSRS-6
- Background work: WorkManager (daily study/goal reminders)
- Android Studio (latest stable) or the Android SDK + JDK 17+
- An Android device/emulator running API 24+
This repo does not include google-services.json — each developer connects their own
Firebase project so the public code is never tied to a specific backend.
- Create a Firebase project at https://console.firebase.google.com.
- Add an Android app with package name
nart.simpleanki. - Enable the products the app uses:
- Authentication → Sign-in methods → Google and Anonymous
- Cloud Firestore
- Cloud Storage
- For Google Sign-In, add your debug keystore's SHA-1 to the Android app
(
./gradlew signingReportprints it). - Download the generated
google-services.jsonand place it at:Seeapp/google-services.jsonapp/google-services.json.templatefor the expected shape. The Google Sign-In web client ID is read automatically from this file (R.string.default_web_client_id) — nothing else to configure.
./gradlew installDebug # build + install on a connected device/emulator
./gradlew testDebugUnitTest # JVM unit tests
./gradlew connectedDebugAndroidTest # instrumented (Compose) tests — needs a devicegoogle-services.json,local.properties, and any keystores (*.jks,*.keystore,keystore.properties) are git-ignored and must never be committed.- A Firebase client config is not a private credential, but data is only as safe as your Firestore/Storage Security Rules — lock them down and consider enabling App Check.
Please be respectful and follow the Code of Conduct.
Licensed under the Apache License 2.0.