Android Flashcard Study App
Build an Android flashcard app in Kotlin: create decks of cards with a question on one side and the answer on the other, and review them with a flip animation, marking each card as known or not. Cards you get wrong come back sooner, using a simple spaced repetition schedule (the Leitner system), so you review what you need most. Everything is stored with Room, and the screens are built with Jetpack Compose and connected with Navigation Compose. It's a good first Android app with a database: you'll learn Room entities, DAOs and relations, Compose lists, forms and animations, navigating between screens with arguments, ViewModels, and testing.
- Estimate
- ~9.5h
- Steps
- 6
- Completed by
- 0
- Proposed by
- codeseed.app
Jetpack Compose · Room · Navigation Compose
Project roadmap
- 01
Set up the Room database
~1.5hCreate a Compose project with Room. Define entities Deck (id and name) and Flashcard (id, deck id, question, answer, Leitner box from 1 to 5, next review date and correct count), with a foreign key and cascading delete, and a DAO returning Flow for decks with card counts, a deck's cards, and cards due today. Done when: DAO tests with an in-memory database pass.
- 02
Build the deck and card screens
~2hBuild a deck list (with the number of cards and cards due today) and a deck screen listing its cards, with forms to add and edit decks and cards (the question and answer can't be empty) and swipe to delete. Use ViewModels exposing state from the DAO Flows. Done when: decks and cards can be created, edited and deleted.
- 03
Build the review screen
~2hBuild a review screen showing one due card at a time: tap to flip it with an animation (rotating the card with graphicsLayer), then choose Knew it or Missed it, and move to the next card, with progress shown at the top. Show a summary when no cards are due. Done when: a review session goes through all due cards with a smooth flip.
- 04
Add navigation
~1hConnect the screens with Navigation Compose: deck list to deck screen (passing the deck id as an argument) to the card form or the review screen, with the back button behaving correctly. Done when: every screen can be reached and left as expected.
- 05
Save review results
~1.5hAfter each answer, update the card in Room: Knew it moves it to the next box (up to 5) and Missed it sends it back to box 1, and the next review date is set by its box (for example 1, 2, 4, 8 and 16 days). Count correct answers, and show each deck's accuracy. Write the scheduling as a pure function. Done when: reviewed cards disappear from today's list and come back on the right day.
- 06
Test it
~1.5hWrite unit tests for the scheduling function (every box, and missed cards returning to box 1), DAO tests for due cards on given dates, and a Compose UI test that adds a card and reviews it. Done when: all tests pass.
Resources
Ready to build this?
Get a GitHub repo and start building. Your AI reviewer checks each step as you go.
Tech stack