Mimir
| Type | Android Reading App |
| Status | Active Development |
| Language | Kotlin |
| Framework | Jetpack Compose |
| License | MIT |
| Repository | GitHub |
| Download | APK (Android) |
Overview
Mimir is an Android app built for reading CS interview-prep notes, not quizzing on them. Instead of scattering theory across YouTube playlists, PDFs, and random websites, it pulls everything into one clean, offline-first reader.
Content and app are fully decoupled: notes live as plain Markdown
files in a separate GitHub repository, and the app fetches and
caches them at runtime. New topics can be added at any time with
nothing more than a git push, with no rebuild and no
reinstall.
Features
- Clean, distraction-free Markdown reader for CS topics
- Subject → category → topic navigation, three taps to any note
- Full-text search across every topic in the index
- Offline-first, reads from local cache after the first sync
- Pull-to-refresh to manually re-sync new content
- Adjustable text size and mark-as-read tracking per topic
- Dark-first Material 3 theme
Requirements
- Android 7.0 or higher
- Internet connection for the initial content sync
- A GitHub repository hosting the Markdown notes and index files
- Android Studio (only if building from source)
Usage
- Open the app, it syncs the topic index on first launch
- Browse by subject, then category, then topic
- Or tap search and jump straight to any topic by name
- Pull down on the home screen anytime to check for new content
Content Format
The app expects two files at the root of the content repository:
-
index.json, the navigation tree (subjects → categories → topics), with each topic pointing to a relative Markdown file path -
meta.json, containing{ "version": N }, bumped on every content update, which the app checks to decide whether to re-sync
Setting a custom content source is a single line in
Config.kt:
const val CONTENT_BASE_URL = "https://raw.githubusercontent.com/<user>/<repo>/main/"
Tech Stack
- Kotlin + Jetpack Compose
- Material 3 (dark-first theme)
- Navigation Compose
- OkHttp for fetching content
- kotlinx.serialization for JSON
- Markwon for Markdown rendering
- DataStore for lightweight local state (read/unread tracking)
Known Limitations
Mimir favors simplicity over feature bloat. It is intentionally just a reader, not a quiz engine or a note-taking tool.
- No in-app content editing, notes are written and pushed via GitHub
- Sync is not real-time; it checks on launch and on pull-to-refresh
- Relies on GitHub's raw content CDN, which can briefly serve a stale response for a few minutes right after a push
- No account system, so read/unread progress does not sync across devices
Future Enhancements
- Spaced-repetition based revision scheduling
- Per-subject progress tracking
- Custom app icon and branding
- Public release with a starter content pack
Development Notes
Mimir started as a way to stop losing track of interview prep across a dozen scattered PDFs and playlists. The core design decision was keeping content completely separate from the app itself. GitHub acts as a free, versioned CMS, and the app is just a thin reader on top of it.
That split means adding a new topic is as fast as writing a Markdown file, and the app itself rarely needs to change once the reading experience is right.