Overview
BookWorm lets readers track a personal library, review what they have read and rate it. Built with Expo, so one codebase reaches both platforms.
Mobile changes the assumptions. Connectivity drops, the viewport is small, and the input is a thumb. Each of those pushed the design somewhere a web version would never have gone.
- Role
- Sole engineer and designer: app, API, auth.
- Year
- 2025
- Stack
- React NativeExpoReduxMongoDBJWTNode.js
Engineering
The decisions that mattered.
- 01
Optimistic local state
Redux applies the action immediately and reconciles with the server afterwards. On a patchy connection the app keeps responding instead of freezing on a spinner.
- 02
Token refresh without visible sign-outs
JWT refresh happens quietly ahead of expiry, so a returning reader never gets bounced to a login screen mid-session.
Design decisions
Why it looks and behaves the way it does.
I designed this as well as built it. These are the interface calls I made and the reasoning behind each one.
Actions live in thumb reach
Primary actions sit in the lower third of the screen. Top-anchored buttons are a desktop habit that makes one-handed phone use awkward.
Covers carry the grid
Book covers are already strong, distinct identifiers, so the collection grid leans on them and keeps text down to a minimum.
Offline is shown
When writes are queued the app says so, with a quiet persistent indicator. Holding data silently is how a mobile app loses trust it cannot get back.
Outcomes
What shipped.
- One Expo codebase across iOS and Android
- Usable on unreliable connections through optimistic updates
- Sessions persist without visible re-authentication