Reading tracker and book recommendation Android application
Flutter App <=> Monolith Backend API Server <=> Database
No need for proxy yet since at this stage we're not creating microservices
In the backend, there are logically separate features — physically in one service.
-
User sign-up/login
-
Get random suggestions (nothing to do with ML)
-
Get curated suggestions (using ML)
-
Update preferences (for the ML component to use for generating suggestions)
-
Play a game
a. Fill-In-The-Blanks b. Identify-the-book-from-the-dialogue c. Match-the-authors-with-the-books
- Auth Domain
- Recommendation Domain
- Game Domain
- Users
id (UUID)
username
email
password_hash
created_at
- Books
id
title
author
genre
theme
trope
era
setting
pub_year
- Quotes
id
book_id (foreign key)
quote_text
difficulty_level
- Games
id
user_id
score
started_at
ended_at
![]() |
![]() |
![]() |
-
Tic-Tac-Toe
-
Rock-Paper-Scissors
-
Coin-Toss
-
Quiz game teaching the user about women in literature
-
Card game
-
There are two players that play against each other: the user and Biblo
-
Both the players have a counter measuring their health in a number. The counter changes colours to depict the current health of the player. It's colours are:
a. Green if the player's health is above a certain threshold, indicating that it is good
b. Yellow if the player's health is within a certain range, indicating that it is low
c. Red if the player's health is below a certain threshold, indicating that it's poor and the player could lose soon -
The game or "battle" is timed with a timer on screen.
-
The user has a stack of cards from which they'll select one. On the screen you'll see two boxes, one displaying the current card and the other displaying the stack with just "stack" displayed on top of it.
-
The can see what cards they have in a pop with left and right moving buttons to show them their collection of cards, and they can select one of them to play next.
-
Biblo's card selection will be random.
-
Both the user's and Biblo's card selection will be randomly decided. While the user can select the next card to play, Biblo will randomly select a card from its randomly selected collection.
-
The cards are about popular mythical characters like vampires, werewolves, elves, dragons, pegasuses, goblins, etc. with different stats.
-
There are 3 group of cards:
a. "Common": Normal stats, not too high, not too low
b. "Rare": Underpowered characters, low stats
c. "Legendary": Overpowered characters, high stats
NOTE: All the characters stats are balanced
-
- The stats of both the players get balanced out based on differences between their different stats.
- If a player has legendary cards, against the other player's non-legendary cards, then their health will increase by a small number (apart from the balancing out between their respective stats)
- If a player has a rare card, against the other player's non-rare cards, their health will decrease by a small number (apart from the balancing out between their respective stats)
- Common cards have no special effects similar to the legendary and rare cards
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |












