All projects

Cà Phê Tý Mập (Rạch Giá)07/2026 - present

Cà Phê Tý Mập — POS & Shop Management

A complete system to run a coffee shop: a public website, an admin panel, two native iPhone apps for staff and the owner, and one API behind them. It will replace the commercial POS the shop uses today before its licence runs out.

Cà Phê Tý Mập — POS & Shop Management
Client
Cà Phê Tý Mập (Rạch Giá)
Period
07/2026 - present
Built with
.NET 8EF CoreSQL ServerNext.js 16Swift 6SwiftUIiOSESC/POSVietQRSSE

The problem

The shop paid for a commercial POS, tracked staff hours by hand and had no website of its own. The goal was one system they own that covers ordering, payment, printing, attendance, payroll and stock.

What I built

  • ASP.NET Core API (.NET 8, EF Core, SQL Server): about 215 endpoints for admin, staff, POS, manager and the public site.
  • Tý Mập Staff (iPhone): table and takeaway orders with size, sugar and topping options, sending to the bar and kitchen in batches, split bills, discounts, cash or bank transfer with a VietQR code for the exact amount.
  • Thermal printing over the shop's LAN with ESC/POS to bar, kitchen and receipt printers, with reprint of failed tickets.
  • Till sessions with note-by-note cash counts, expense slips and a Live Activity on the lock screen showing open tables.
  • Tý Mập Manager (iPhone/iPad): sales reports exported as PDF, menu and tables, staff and permissions, payroll, inventory with recipes and stock counts, loyalty points, Face ID lock and home-screen widgets.
  • GPS attendance: the server checks the phone's distance to the shop and flags check-ins outside the radius.
  • Next.js admin panel and a bilingual landing page with local SEO.

Engineering highlights

  • Two auth systems: database-backed sessions with Argon2id and TOTP for admins; rotating JWT refresh tokens for the staff apps, re-checked against the employee's status on every request.
  • Personal data encrypted with AES-256; the audit log stores HMAC fingerprints instead of values.
  • Server-sent events keep every till in sync; idempotency keys stop duplicate orders; a unique index allows only one open till.
  • A fake printer renders tickets to PNG so UI tests run without hardware.
  • 196 API tests, 134 Swift package tests and 43 UI tests including accessibility audits.