Case study 06 / 10ProductLive

KasRapi

Cashier and cash book for small businesses. Small shops need a cashier and a daily cash book that runs on an ordinary Android phone and keeps working when the signal drops.

At a glance

Liveon the web and Google Play, with real users
1.1ready for the next Play Store release: onboarding, WhatsApp receipts, over-the-air updates
140+commits across the API, web app and Android app since February 2026
Period
February 2026 – present
Role
Product owner and developer (with AI coding agents); runs the Play Store releases
Status
Live on the web and Google Play
Links
kasrapi.id
Public page The public landing page of kasrapi.id on desktop and phone (Indonesian).

01Problem

Small shops need a cashier and a daily cash book that runs on an ordinary Android phone and keeps working when the signal drops.

02What I built

A web app and an Android app on Google Play. The phone app is offline-first: sales and cash entries are stored on the device and synced when a connection is available. Version 1.1 adds guided onboarding with sample products and empty states, receipts shared to WhatsApp as an image or PDF straight from the phone, and over-the-air updates.

03How it works

  1. Layered phone app. Expo / React Native, layered as screens → services → repositories → SQLite, with pull/push sync to the API.
  2. Receipts on the device. API in Express 5 with Prisma; web app in Next.js. Receipts are rendered on the phone as PNG or PDF with the shop's name, address, header and footer (cached for offline use) and can be resent from the history screen.
  3. Two release lanes. JavaScript fixes ship over the air; native changes go through store builds.
KasRapi offline-first architectureOn the phone, screens call services, services call repositories, repositories write to SQLite. A sync step pulls and pushes changes to the Express and Prisma API with PostgreSQL when a connection is available. The web app uses the same API.ANDROID APP · EXPO / REACT NATIVE · WORKS OFFLINEScreenscashier · cash book · historyServicessales, receipts (PNG / PDF)Repositoriesone per tableSQLite on the phonesales and cash entriesSyncpull / pushwhen onlineHTTPSAPIExpress 5 · Prisma · PostgreSQLshop profile cached for receiptsweb app (Next.js) on the same APIJavaScript fixes ship over the air; native changes via store builds.
Swipe sideways to see the whole diagram. Offline-first: everything the cashier does is written to SQLite on the phone first, then synchronised with the API.

04Results and scale

  • Live on the web and Google Play with real users.
  • Version 1.1 is ready for the next Play Store release.
  • More than 140 commits since February 2026 across three repositories: API (Express 5, Prisma 6), web app (Next.js 16) and Android app (Expo SDK 54).

05Stack

  • TypeScript
  • Expo / React Native
  • SQLite
  • Express 5
  • Prisma
  • PostgreSQL
  • Next.js
  • Railway
  • Vercel
  • Cloudflare
Next case studyMeasuring terrain with a consumer droneResearch on one flight, three rounds of experiments