IndexCards is a simple app for learning anything, in particular languages, using the index card learning principle.
Click here to download the latest APK.
A picture says more than a thousand words. The home screen contains an overview of all boxes:
![]() When first opening the app it is empty. |
![]() A box can be added by tapping the '+' icon and its details can be entered. |
![]() The home screen after adding several boxes. |
From the options on the top right of the home screen you can access the settings screen and also start the tutorial (work in progress):
![]() The options available on the home screen. |
![]() The seetings screen. |
![]() The first tutorial dialog. |
Clicking on a box on the home screen reveals it contents:
![]() When first opening a box it is empty. |
![]() The dialog for adding a new card to the current box. |
![]() The box screen after adding several cards. |
Cards can be associated with tags and have a level according to how often in a row you have got them correct during training. When you get a card right, it moves up one level; getting a card wrong decreases its level. Higher levels have to be trained less often.
The options on the box screen let you search for a keyword, sort cards, enter training, and edit the box details:
![]() The options available on the box screen. |
![]() There are several sorting options available. |
![]() The screen for editing a boxes details. |
- Creating and editing index cards
- voice memos
- Reminders for training as notifications (still some bugs)
- Tutorial (work in progress)
- User preferences
- Exporting to and importing from CSV files
The UI of the app is available in English and German. The following languages are supported with flags to select as a language box:
- Albanian
- Arabic
- Chinese
- Croatian
- Danish
- English
- Estonian
- Finnish
- French
- German
- Greek
- Hebrew
- Hungarian
- Icelandic
- Italian
- Japanese
- Korean
- Latin
- Norwegian
- Persian
- Portuguese
- Russian
- Spanish
- Swedish
- Turkish
This app is written entirely in Kotlin. It uses Compose for the UI and Room for persistent storage of data. Other modules used are the colopicker-compose by skydoves and datastore for storing preferences.
Boxes, cards, tags, and categories are stored in a relational SQLite database.
Functions always take non-function arguments with no defaults first, then non-function arguments with defaults, and lastly function arguments which always must have an empty lambda as the default. The only exceptions to this rule are modifiers, which are always the first argument, and viewModels, which are always the last arguments.














