Desktop POS app for a restaurant: inventory/registry + sales tracking, built with React + Vite and packaged as a Tauri app (SQLite).
vid-1.mp4
- Registry / inventory management
- Products CRUD + import/export (CSV/XLSX)
- Sales tracking and filtering
- Sales reports by non-logged users (flag icon + reason, min 20 chars)
- Admin report actions in sale detail: cancel report or delete sale
- Totals exclude reported sales from the main Sales summary
- Local database via SQLite (Tauri SQL plugin)
- Autocomplete search — typing in the name field shows matching products in a dropdown; click or press Enter to select
- Code lookup — enter a product code and press Enter/Tab to fill the row automatically
- Duplicate detection — selecting an already-added product increments its quantity instead of creating a duplicate row
- Quick submit — press Enter on an empty row to submit the sale (works from both code and name fields)
- Auto-focus — after confirming a product, a new empty row is created and focused automatically
- Frontend
- React + TypeScript
- Vite
- Tailwind CSS
- shadcn/ui (Radix)
- Desktop
- Tauri (Rust)
- SQLite via
tauri-plugin-sql
src/
app/ App shell + router entry
components/ Shared components (Header, ui/*)
constants/ App-level configuration (e.g. GitHub links)
database/ DB helpers / initialization
features/ Domain modules (products, registry, sales, users)
pages/ Route-level pages (Products, Registry, Sales, login/*)
store/ Global stores (userStore)
src-tauri/ Tauri (Rust) backend + app packaging
assets/ Screenshots
- pnpm
- Rust toolchain (for Tauri builds)
- OS supported by Tauri (Windows/macOS/Linux)
pnpm install
pnpm exec tauri dev# web dev
pnpm dev
# typecheck + web build
pnpm run build
# desktop dev
pnpm exec tauri devThis app uses SQLite through Tauri.
Recent schema additions include sale_reports to persist:
sale_id(unique per sale)reasonreported_attimestamp
If you need to add the SQL plugin (already included in this repo):
cd ./src-tauri/
cargo add tauri-plugin-sql --features sqliteInside the app, the Login screen shows links to:
- Repo
- GitHub profile
You can edit them in src/constants/config.ts.
The following is a reference of the steps/packages used when scaffolding the project.
pnpm create vite app-pos
cd ./app-pos
pnpm add -D tailwindcss @tailwindcss/vite --save-exact
pnpm add -D shadcn-ui --save-exact
pnpm add react-hook-form zod --save-exact
pnpm add react-router-dom --save-exact
pnpm add @tauri-apps/plugin-sql --save-exact
pnpm add papaparse @types/papaparse --save-exactpnpm dlx shadcn init
pnpm dlx shadcn@latest add form input button checkbox
pnpm dlx shadcn@latest add table pagination
pnpm dlx shadcn@latest add dialog button-group
pnpm dlx shadcn@latest add popover dropdown-menu
pnpm dlx shadcn@latest add combobox calendarpnpm add -D @tauri-apps/cli@latest
pnpm add @tauri-apps/api
pnpm exec tauri init