utsav@homelab:~$
cd ~/projects/khatiwada-pos
KHATIWADA POS SAAS
> U1 · CPU, FROM ONE FAMILY SHOP TO A MULTI TENANT PLATFORM
utsav@homelab:~/projects/khatiwada-pos$ cat README.md
My family runs a small grocery store in Kathmandu. Sales used to live on pen and paper, no product
database, no sales history, no way to know what was actually selling. I built a browser based point
of sale for it, served from a Raspberry Pi in Sydney over a private Tailscale VPN, and it has been
in daily use at the shop since July 2026. This year I took the same codebase and rebuilt it into a
proper multi tenant SaaS product, so any small shop owner in Nepal can get their own isolated store
on the same platform.
utsav@homelab:~/projects/khatiwada-pos$ ./features --list
▸ Camera based barcode scanning, works on Chromebook and iPhone
▸ Bilingual English / Nepali cashier interface
▸ Live Bikram Sambat calendar and Kathmandu clock
▸ Weighed goods sold per kilogram or litre
▸ Password protected admin panel with CSV sales reports
▸ Isolated Docker container per SaaS customer
▸ Signed token handoff login, no shared sessions between tenants
▸ Master dashboard for onboarding and managing customers
utsav@homelab:~/projects/khatiwada-pos$ docker inspect khatiwada-pos --format stack
RUNTIMEPython · Flask · SQLite
FRONTENDPlain HTML / CSS / JavaScript, no framework
ORIGINAL HOSTRaspberry Pi 4, Sydney, family shop only
SAAS HOSTOracle Cloud VPS, Docker per customer, Caddy reverse proxy
AUTHSigned short lived tokens handing a login off to its own container
SECURITYRate limiting, CORS allowlist, security headers, no wildcard origins
utsav@homelab:~/projects/khatiwada-pos$ git log --reverse --milestones
2026-07-02Project start. Flask and SQLite scaffold, cashier screen with scan, search and running bill, admin panel, quick tap categories, Quick Add for unknown barcodes
2026-07-03Hardened and deployed. A 54 check test suite, Dockerised with gunicorn, live behind Caddy with real HTTPS over Tailscale
2026-07-04Made it Nepali. English/Nepali toggle, live Bikram Sambat date, Nepali product names, pinned quick buttons
2026-07-09Full UI redesign, weighed and measured goods generalised to litres, automatic cache busting for shop devices
2026-07-20Commercialisation begins. Landing site and login flow scoped out to turn the single family deployment into a SaaS product
2026-07-22Login flow live. Store name plus password, signed handoff token, redirect into the customer's own container
2026-07-25Forgot password flow shipped, plus real security hardening: rate limiting on auth routes, CORS allowlist, no more public .git folder
2026-08-06Master dashboard, health monitoring and VPS resilience work all live. Ongoing, still the primary source of truth for the family shop plus the pilot SaaS tenants
utsav@homelab:~/projects/khatiwada-pos$