QA Appliance
Appliance-store sales, inventory, installment accounts, payments, reports, and maintenance became one local-first desktop system.

How the project is put together
6 layers / 5 directed links
100%
- 01Interface
Dashboard, inventory, sales, accounts, payments, reports, imports, and maintenance screens.
React 19 / Vite 7 / Tailwind v4 / shadcn/ui - 02Application
Desktop state, forms, reports, exports, charts, and workflow helpers.
Zustand / React Hook Form / Zod / Recharts - 03Services/API
IPC commands handle sales, inventory, account operations, maintenance, import, and export.
Tauri 2 / Rust commands / Dialog/fs plugins - 04Data
Local app-data database with stock, serials, customers, sales, payments, and audit records.
SQLite / rusqlite / WAL / Migrations - 05Auth/Permissions
Not part of this local-first scope; the app is designed around single-device store operation.
No cloud auth / Local device scope - 06Runtime
Native desktop packaging with local data recovery, reset, and operational maintenance tools.
Tauri runtime / Cargo / NSIS / Backup/restore
From broken workflow to operating system
Inventory, serial numbers, receivables, payments, and backups were hard to keep consistent without a dedicated tool.
A Tauri/Rust/SQLite app runs locally with transactional sales, installment tracking, reports, and recovery tools.
The workflow constraint
The store needed a practical desktop tool for inventory and receivables without depending on a cloud backend, server setup, or always-on internet connection.
What changed
Decisions and trade-offs
Local-first Tauri over web app deployment
The business needed reliable desktop use without managing hosting, networking, or cloud database access.
Decision: Built a Tauri app with React UI and Rust/SQLite backend commands for all core workflows.
Trade-off: No built-in multi-branch sync, but installation and day-to-day operation stay simple.
Transactional sales workflow
A sale touches stock, serial numbers, receivables, payment schedules, audit data, and reports.
Decision: Use SQLite transactions through Rust commands so related updates succeed or fail together.
Trade-off: More careful backend command design, but fewer partial-state failures in real store use.
Maintenance tools inside the app
The target users need to handle backups and data exports without developer help.
Decision: Expose backup, restore, reset, PDF/Excel/CSV export, and import flows directly in the desktop UI.
Trade-off: More surface area to test, but the app is much more operationally useful.
Constraints, architecture, and proof
React, Vite, TypeScript, Tailwind, Zustand, forms, charts, and export helpers run in the UI. Tauri IPC calls Rust commands backed by rusqlite and SQLite in the OS app data directory, with migrations, WAL/foreign keys, pre-migration backups, spreadsheet import/export, and PDF/Excel reporting.
Deployment, security, and maintenance
SQLite runs with WAL and foreign keys, migrations create pre-migration backups, sales are transactional, app data stays local in the OS app directory, and maintenance screens expose backup/restore/reset workflows for recovery.