A cross-platform flashcard app with spaced repetition, built with Flutter.
This is a school project and is not accepting outside contributions. Pull requests, issues, and comments from non-team members will be closed without review.
- Spaced Repetition — FSRS algorithm for optimal review scheduling
- Nested Decks — Organize cards into hierarchical deck structures
- Offline-First — Local SQLite storage, study anywhere
- Cross-Platform — Linux, macOS, Windows, Android, iOS
- Custom Desktop UI — Frameless window with native-themed titlebar buttons
| Layer | Technology |
|---|---|
| Framework | Flutter |
| State Management | Riverpod |
| Routing | GoRouter (flat routes, platform-aware transitions) |
| Database | SQLite via sqflite |
| Scheduling | FSRS (Free Spaced Repetition Scheduler) |
| Desktop Titlebar | window_manager + modern_titlebar_buttons |
lib/
├── core/
│ ├── database/ # DatabaseHelper, constants
│ ├── routing/ # GoRouter config, page transitions
│ ├── theme/ # Material 3 dark theme, colors, spacing
│ └── widgets/ # Shared components (AppScaffold, dialogs, etc.)
├── features/
│ ├── cards/ # Flashcard CRUD
│ ├── decks/ # Deck management (nested hierarchy)
│ └── study/ # Study sessions, FSRS scheduling
└── main.dart
brew tap Pairadux/lapse
brew install --cask lapseyay -S lapse-appimageDownload the latest .zip from GitHub Releases, extract, and run lapse.exe.
Download the latest .AppImage from GitHub Releases, make it executable, and run it:
chmod +x lapse-*.AppImage
./lapse-*.AppImage- Flutter SDK
- Dart SDK
git clone https://github.com/Pairadux/lapse.git
cd lapse
flutter pub get
flutter runA dev drawer (swipe from left edge) is available in debug builds for navigating screens and loading mock data.
This project is in active development as a school project. See docs/ for AI usage logs and design documentation.
This project is licensed under the GNU General Public License v3.0.
