Help us measure site usage?

With your permission, we use self-hosted analytics to understand page usage. It is optional and does not affect the Service. Learn more.

KotlinbeginnermobileAI generated

Book Notes App

Build an Android app in Kotlin for keeping notes on the books you read: add a book (typing its details, or looking it up by title or ISBN from the free Open Library API), then write notes and quotes for it, each with tags such as favorite quote or idea, and filter notes by tag or search their text. Everything is stored on the phone with Room, so the app works fully offline; only the book lookup needs the internet, through the Ktor client. It's a good first Android app: you'll learn Jetpack Compose screens and navigation, Room entities and relationships, Kotlin coroutines and Flow, calling an API with Ktor, and testing.

Estimate
~11.5h
Steps
7
Completed by
0
Proposed by
codeseed.app

Jetpack Compose · Room · Ktor

Project roadmap

  1. 01

    Plan the data and screens

    ~1h

    Write README.md: a book has a title, author, year, ISBN and cover image URL; a note belongs to a book and has text, a page number (optional), tags and a created date. Describe the screens: books list, book details with its notes, add or edit a note, and add a book (with search). Create a project with Jetpack Compose, Room and the Ktor client. Done when: the app runs, and README.md describes the data and screens.

  2. 02

    Set up Room

    ~2h

    Create Room entities for books, notes, tags and a note-tag link table (many-to-many), and DAOs returning Flow: books with their note counts, a book's notes with tags, notes filtered by tag, and notes searched by text. Write a repository class the screens will use. Done when: DAO tests with an in-memory database pass.

  3. 03

    Build the books screens

    ~2h

    Build the books list (with note counts and covers loaded with Coil) and a book details screen showing its notes newest first, with Compose navigation between them. Add a form to add a book by hand (the title and author are required). Use a ViewModel collecting the repository's Flows. Done when: books can be added and opened, and the lists update by themselves.

  4. 04

    Write notes with tags

    ~2h

    Build a form to add and edit notes with the text (required), an optional page number (checked against a sensible range), and tags chosen from existing ones or typed as new. Swipe to delete a note with Undo. Done when: notes with tags can be created, edited and deleted.

  5. 05

    Filter and search notes

    ~1.5h

    Add tag chips on the book screen and on an all-notes screen to filter notes by tag, and a search box that searches note text across all books. Show which book each note belongs to on the all-notes screen. Done when: filtering by tag and searching return exactly the matching notes.

  6. 06

    Look up books online

    ~1.5h

    Use the Ktor client with kotlinx.serialization to search Open Library by title or ISBN, showing results with covers; choosing one fills in the book's details. Show clear messages when offline or when nothing is found, and never block adding a book by hand. Done when: searching finds real books, and the app still works in airplane mode.

  7. 07

    Test it

    ~1.5h

    Write unit tests for the ViewModels with a fake repository, DAO tests for tag filtering and search, and a test for the Open Library client using Ktor's MockEngine with a saved response. Done when: all tests pass.

Ready to build this?

Get a GitHub repo and start building. Your AI reviewer checks each step as you go.

~11.5h · 7 steps

Tech stack

Jetpack ComposeRoomKtor