ShopKart — Android Storefront and Commerce API
A native Android shop in Kotlin and Jetpack Compose that keeps working offline, and the TypeScript commerce API behind it: catalogue, basket, favourites, accounts and checkout in one transaction.

See it running
The problem
A shopping app is judged in the moments it goes wrong: a basket that briefly shows the wrong items, a catalogue that disappears in a lift, a total that is a cent out, an app that crashes the day the server adds a field. On the server, two checkouts arriving together must not charge anyone twice, and a basket built as a guest should survive signing up.
How it’s built
The Android app is split into modules, and its domain is a plain Kotlin module, so the build itself stops business rules from touching Android code. Use cases own the rules (no out-of-stock item in a basket, zero means remove), money is integer minor units, and the cart computes its own totals. Room caches the catalogue for offline use, and only an unfiltered fetch may replace it, so a search never shrinks the offline catalogue. The companion API (RizTech-Academy/shopkart-api) is Next.js and TypeScript on SQLite: checkout writes the order and empties the basket in one transaction, and signing in moves a guest’s basket, favourites and orders onto the account.
What it does
- Storefront design: category banners, a Top rated carousel, photo grid with earned rating badges, product page with a sticky buy bar
- Browse offline: the catalogue is cached on the phone, and a search can never overwrite it
- Two simultaneous checkouts produce exactly one order
- A guest basket carries over when the shopper signs up or signs in
- Repository tests against real Room and MockWebServer; API tests against a real SQLite database
Learn to build software like this
The free courses teach the same craft — from the basics to a real, running project.







