Skip to content
VED.EXE

300Retail, point of sale

Vinny's Atelier

The retail operating system a working fashion boutique runs its counter on.

Role
Sole developer. Client deployment through SNOWBROS.
Year
2026
Status
In daily use at Vinny's Fashion Hub since August 2026, on the web and as a signed Windows app.
Stack
Next.js 16, React 19, TypeScript, PostgreSQL, Drizzle ORM, Supabase, Tauri 2, Rust, SQLite, Razorpay, Vitest, Playwright
Vinny's Atelier till: a new invoice with three garments, a 10% discount and Razorpay dynamic QR selected.
PostgreSQL tables, Drizzle migrations, RLS
35
Vitest tests, plus Playwright end to end in CI
268
authority that can settle an invoice: a signed webhook
1
payment secrets on the till
0

(57) Abstract

A keyboard-first till that takes garments from the catalogue on a keystroke, applies line and invoice discounts, settles to cash, the shop's UPI QR or a Razorpay dynamic QR, and prints a PDF or a thermal receipt. Behind it: variant-level inventory, customer profiles, staff roles and revenue reporting derived from settled bills.

Background

A boutique counter is a busy, interrupted place, and its internet is not always there. Staff need to bill fast, take UPI without mistakes, and trust the stock count at the end of the day. The shop runs two rails under one name, occasion and bridal wear at the boutique and everyday pieces at the Fashion Hub, and needed one system that fits both.

Drawings

  1. FIG. 1The till. Every action has a key; the command palette reaches the rest.
  2. FIG. 2Reports, derived from settled bills and net of discounts.
  3. FIG. 3Variant-level inventory. Counts come from the same rows the till deducts against.
The Atelier till with a draft invoice.
  1. 302Command palette, ⌘K
  2. 304Line items with per-line discount
  3. 306Invoice discount
  4. 308Razorpay dynamic QR for the exact amount
  5. 310Keyboard actions: new, hold, recent bills
FIG. 1The till. Every action has a key; the command palette reaches the rest.
Atelier trade reports screen.
FIG. 2Reports, derived from settled bills and net of discounts.
Atelier inventory screen with variant-level stock.
FIG. 3Variant-level inventory. Counts come from the same rows the till deducts against.

Detailed description

Keyboard first

⌘K opens the command palette, ⌘N starts an invoice, ⌘F adds an item, H holds a bill, ⌘B shows recent bills and ⌘P prints. A cashier can bill a customer without touching the mouse.

Only the webhook can say a bill is paid

Razorpay UPI is integrated end to end: QR checkout for the exact net amount, then status, cancel and reconciliation APIs. An HMAC-verified webhook is the sole authority that can settle an invoice, so the point of sale never holds a payment secret and cannot mark a bill paid on its own.

A till that keeps selling offline

The Tauri desktop till records sales to local SQLite through rusqlite and queues them in a durable outbox. A background sync engine pushes and pulls in both directions and resolves conflicts, so the counter keeps working when the connection doesn't.

One guard for every action

A 35-table PostgreSQL schema with Drizzle migrations and row-level security policies in the database, plus a single server-side guard that every Server Action passes through. Authorization never lives in the UI layer.

Money is integer paise

Amounts are a Money type in integer paise from the database to the receipt, so no float ever touches a rupee and discounts never drift by a paisa.

Tested like it handles money

268 Vitest tests and a Playwright end-to-end suite run in CI on every push, and the same codebase ships to the web and as a signed Windows build.

What is claimed is:

  1. 1.

    A point-of-sale system in which every amount is an integer number of paise.

  2. 2.

    The system of claim 1, wherein an invoice can be settled only by an HMAC-verified webhook from the payment provider.

  3. 3.

    The system of claim 1, wherein the desktop till records sales to local SQLite and syncs them through a durable outbox.

  4. 4.

    The system of claim 1, wherein every Server Action passes one server-side authorization guard, backed by row-level security.

  5. 5.

    The system of claim 1, delivered as a web app and as a signed Windows app from one codebase.