Supermarket Inventory Management System
A full-stack, offline-first inventory management PWA for a supermarket chain — built with React, Supabase, and Capacitor for cross-platform deployment on web, Android, and iOS.
The Problem
The client's supermarket chain was managing inventory with manual processes. Stock counts were unreliable, popular items would go out-of-stock without warning, and warehouse staff in areas with poor connectivity had no way to record movements. They needed a custom-built system tailored to their workflows, with a full Hebrew/RTL interface — one that's easy to adopt and built incrementally to match the chain's evolving needs.
The Solution
I designed KT-RMS as an offline-first, mobile-native inventory system with real-time barcode scanning, an immutable transaction ledger, role-based access control, and background sync. Staff can scan, track, and manage inventory from any device — smartphones on the warehouse floor, tablets at the dock, or desktops in the back office.
Key Features
Real-time camera-based scanning with multiple modes — Stock In, Stock Out, Lookup, Direct-to-Shelf, Return to Supplier.
Immutable transaction ledger tracking every stock movement with a full audit trail.
Trigger-automated current_stock table for instant stock level queries without recalculating history.
Granular permissions system (Admin, Manager, Clerk, Trainee) with location-scoped role assignments.
IndexedDB storage with Dexie.js, operation queuing, and background sync for seamless transitions.
Complete internationalization with i18next, dynamic RTL/LTR layout switching.
Per-product configurable thresholds with parent-child pack aggregation.
Bulk product lookup and auto-population from supplier CSV files with Hebrew encoding support.
Architecture
Database Design
inventory_transactions is append-only with correction chaining via corrected_transaction_id. No edits, no deletes — full audit trail.
current_stock is automatically maintained by PostgreSQL triggers on every transaction insert — no recalculation needed.
Locations support unlimited nesting via self-referencing parent_id with materialized paths and short codes for barcode labels.
Clean, incremental database evolution tracked in version control — from initial schema to production-grade RLS policies.
Key User Flows
Staff selects mode (IN/OUT/Direct-to-Shelf), scans barcode, system identifies product, opens transaction form with context-aware location filtering.
Scan unknown barcode → system checks database then CSV → auto-populates form with available data → staff completes and saves.
Real-time stock levels with low-stock highlighting, filterable views, and parent-child aggregation toggle.
This is an active, production-targeted project for a real business client. Code is private. Screenshots and live demo available on request.
Request a DemoGet in Touch