03
Kasly
Point-of-sale software
Point-of-sale (POS) software for a shop: checkout, stock, sales and reports. In production since October 2026.
- Role
- Backend Developer
- Disciplines
- Web / Backend
- Stack
- Next.js
- React
- TypeScript
- Tailwind CSS
- NextAuth
- PostgreSQL
- Supabase
- Prisma
- Zod
- Vercel
- Links
- Open the app ↗


01 / The problem
A shop needs to check out quickly, track its stock in real time and know what it sells — without a network error or a double click ever creating a duplicate sale.
02 / The solution
A complete point-of-sale app: checkout, product and category catalog, stock movements (in, out, adjustment, sale, return), sales history, dashboard and reports, user management and shop settings. Payments by cash, Wave, Orange Money, card or mixed.
03 / Architecture
Architecture
Next.js (App Router), React, TypeScript and Tailwind CSS for both the interface and the APIs; NextAuth (username, bcrypt password, JWT sessions); PostgreSQL on Supabase through Prisma; Zod validation; hosted on Vercel. Tables live in a private schema with two restricted PostgreSQL roles and row-level security (RLS), with no access for Supabase's public API.
04 / Technical challenges
Technical challenges
- 01Sales in serializable transactions: one checkout reference creates exactly one sale, even when retried
- 02Three roles (admin, manager, cashier) whose changes apply from the very next request
- 03Database isolation inside a shared Supabase project, with non-superuser PostgreSQL roles
05 / Highlights
Highlights
- 01Duplicate-free checkout thanks to serializable transactions
- 02Stock tracked through movements, reports and dashboard
- 03Admin, manager and cashier roles
06 / Results
Results
- 01In production at kasly.odacestudio.com since October 17, 2026
- 02Integration tests on a temporary PostgreSQL database and an end-to-end test in production
- 03Brand identity designed alongside: logo, color palette and app icon
Lesson learned
“On a point-of-sale system, the reliability of a sale matters more than anything else: guaranteeing that a checkout is never recorded twice shaped the whole data layer.”
Next project04
APROSI Tickets →
Have a similar project in mind?
Get in touch →