A modern Android flashcard application designed to help you learn and retain information effectively using spaced repetition techniques.
- Smart Flashcards: Create and manage flashcards organized by categories
- Spaced Repetition: Cards are reviewed based on your performance (Bad, OK, Good ratings)
- Progress Tracking: Monitor your learning with detailed statistics and charts
- Streak Counter: Stay motivated with daily streak tracking
- Cloud Backup: Sync your flashcards across devices using Firebase Storage
- Google Sign-In: Secure authentication with your Google account
- Offline Support: Study your cards even without internet connection using local Room database
- Beautiful UI: Clean, intuitive interface with smooth animations
Coming soon
- Language: Kotlin
- Architecture: Android Activity-based architecture
- Local Database: Room (SQLite)
- Cloud Storage: Firebase Storage
- Authentication: Google Sign-In
- Charts: MPAndroidChart
- Image Loading: Glide
- JSON Parsing: Gson
- Minimum SDK: 28 (Android 9.0)
- Target SDK: 35
Before you begin, ensure you have the following installed:
- Android Studio (Latest stable version recommended)
- JDK 8 or higher
- Android SDK with API level 28 or higher
- A Firebase project (for cloud backup functionality)
git clone https://github.com/a-y-a-n-das/flashcard.git
cd flashcard- Go to the Firebase Console
- Create a new project or use an existing one
- Add an Android app with package name
com.example.flashcard - Download the
google-services.jsonfile - Place it in the
app/directory (already included in this repo) - Enable Firebase Storage in your Firebase project
- Enable Google Sign-In in Authentication settings
Open the project in Android Studio and let it sync the Gradle files. Then:
./gradlew assembleDebugOr simply click the Run button in Android Studio.
flashcard/
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/example/flashcard/
│ │ │ │ ├── MainActivity.kt # Home screen with categories
│ │ │ │ ├── Card.kt # Flashcard review activity
│ │ │ │ ├── Stats.kt # Statistics and profile screen
│ │ │ │ ├── CategoriesActivity.kt # Category management
│ │ │ │ ├── addCard.kt # Add new flashcard
│ │ │ │ ├── ViewCategory.kt # View cards in category
│ │ │ │ ├── SignInActivity.kt # Google Sign-In
│ │ │ │ ├── AppDatabase.kt # Room database configuration
│ │ │ │ ├── CardDao.kt # Card data access object
│ │ │ │ ├── CategoryDao.kt # Category data access object
│ │ │ │ ├── CardDataClass.kt # Data models
│ │ │ │ ├── BackupManager.kt # Firebase backup/restore
│ │ │ │ └── UsageTracker.kt # Time tracking
│ │ │ └── res/ # Resources (layouts, drawables, etc.)
│ │ ├── androidTest/ # Instrumentation tests
│ │ └── test/ # Unit tests
│ └── build.gradle.kts # App-level build configuration
├── build.gradle.kts # Project-level build configuration
├── settings.gradle.kts # Gradle settings
└── gradle/ # Gradle wrapper files
The app uses a simple but effective spaced repetition system:
- New cards are shown immediately
- After reviewing a card, rate your recall:
- Bad (0): Card will be shown again soon
- OK (1): Card will be shown in moderate intervals
- Good (2): Card will be shown less frequently
- Cards are filtered based on score and last review date to optimize learning
- Local: Room database stores all flashcards, categories, and progress locally
- Cloud: Firebase Storage backs up your data for cross-device sync
- Offline-first: The app works offline and syncs when connectivity is available
| Library | Purpose |
|---|---|
| Room | Local SQLite database |
| Firebase Storage | Cloud backup |
| Firebase Analytics | Usage analytics |
| Google Play Services Auth | Google Sign-In |
| MPAndroidChart | Statistics visualization |
| Glide | Image loading and caching |
| Gson | JSON serialization |
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Ayan Das
- GitHub: @a-y-a-n-das
- MPAndroidChart for beautiful charts
- Glide for efficient image loading
- Firebase team for excellent backend services
⭐ If you find this project useful, please consider giving it a star!