A production-ready, local-first Windows desktop application for warehouse inventory and order management with integrated packing video recording and tamper-proof evidence system.
- Modern SaaS-grade interface with dark/light themes
- Smooth animations and micro-interactions
- Touch-friendly buttons for warehouse use
- Responsive and accessible design
- Complete product CRUD operations
- SKU-based stock tracking
- Low stock alerts
- Stock movement history
- Search and filter capabilities
- Manual order creation
- Multi-item orders
- Order status workflow: NEW β PACKING β PACKED β SHIPPED β DELIVERED β RETURN β RTO
- Order details and history
- Live camera preview
- Video recording with watermark overlay
- Burn-in metadata: Order ID, Date/Time, Staff name
- SHA-256 hash generation
- File locking (read-only)
- Tamper detection
- Return/RTO tracking
- Video evidence viewer
- Tamper detection indicators
- Inspection notes and checklists
- User account management
- Role-based access control (Admin/Packer)
- Activity audit logs
- Last login tracking
- Role-based permissions
- Immutable audit logs
- Video integrity verification
- Local-first architecture
- Desktop Framework: Electron
- Frontend: React 18 + Vite
- UI Library: Tailwind CSS + shadcn/ui
- Icons: Lucide React
- Animations: Framer Motion
- Database: SQLite (better-sqlite3)
- Video Processing: MediaDevices API + FFmpeg
- Build: electron-builder
- Node.js 18+ and npm
- Windows 10/11
- Webcam (for video recording feature)
```bash npm install ```
```bash npm run dev ```
This will:
- Start the Vite dev server on
http://localhost:5173 - Launch the Electron app
- Enable hot module replacement
Use the default admin credentials:
- Username:
admin - Password:
admin
```bash npm run build:win ```
This will create a Windows installer in the dist-electron directory.
``` Build/ βββ electron/ # Electron main process β βββ main.js # Main entry point β βββ preload.js # Context bridge β βββ ipc/ # IPC handlers β βββ database.js # Database operations β βββ video.js # Video management β βββ auth.js # Authentication βββ src/ β βββ components/ # React components β β βββ ui/ # shadcn/ui components β β βββ layout/ # Layout components β βββ contexts/ # React contexts β βββ pages/ # Application pages β βββ lib/ # Utilities β βββ database/ # Database schema & config β βββ App.jsx # Main app component β βββ index.css # Global styles βββ package.json βββ vite.config.js βββ tailwind.config.js ```
All data is stored locally in:
``` %APPDATA%/InventoryApp/ βββ videos/ # Organized by date (YYYY-MM-DD) βββ images/ # Product images βββ backups/ # Database backups βββ logs/ # Application logs βββ inventory.db # SQLite database ```
- Navigate to Inventory
- Click Add Product
- Fill in SKU, name, description, quantity, price
- Set low stock threshold
- Click Create Product
- Navigate to Orders
- Click New Order
- Enter customer details
- Add order items (select products and quantities)
- Click Create Order
- Navigate to Packing Camera
- Select an order from the list
- Camera preview will start automatically
- Click Start Recording
- Pack the order (watermark will be visible)
- Click Stop Recording
- Video is automatically saved with hash
- Navigate to Returns & RTO
- Click on a return to view details
- View video evidence
- Check tamper detection status
- Add inspection notes
- Navigate to Staff (Admin only)
- Click Add Staff
- Enter username, password, full name
- Select role (Admin/Packer)
- Click Create Staff
- Full access to all features
- Manage staff accounts
- View audit logs
- Manage inventory, orders, returns
- View orders
- Record packing videos
- Update order status
- Limited inventory access
The system ensures video integrity through:
- SHA-256 Hashing: Generated immediately after recording
- File Locking: Videos are set to read-only
- Verification: Hash is recalculated and compared on access
- Status Indicator: Clear visual feedback if tampering detected
Key tables:
products- Product catalogorders- Customer ordersorder_items- Order line itemsvideos- Packing videos with hashesstaff- User accountsstock_movements- Inventory changesreturns- Return/RTO recordsaudit_logs- Immutable activity logs
The app uses default camera settings:
- Resolution: 1280x720
- Format: WebM (VP9 codec)
- Audio: Enabled
Backups can be triggered manually via the system menu or programmatically:
```javascript await window.electronAPI.system.backup(); ```
- Check camera permissions in Windows Settings
- Ensure no other app is using the camera
- Try restarting the application
- Check if database file is locked
- Verify write permissions in AppData folder
- Restore from backup if corrupted
- Clear node_modules and reinstall:
npm ci - Clear build cache:
rm -rf dist dist-electron - Rebuild:
npm run build:win
- Create database migrations in
src/database/schema.sql - Add IPC handlers in
electron/ipc/ - Create React components in
src/components/ - Add routes in
src/App.jsx
- Use ES6+ features
- Follow React best practices
- Use Tailwind utility classes
- Maintain consistent naming conventions
This is a production application. For modifications:
- Test thoroughly in development
- Update documentation
- Maintain backward compatibility
- Follow existing code patterns
MIT License - See LICENSE file for details
For issues or questions:
- Check the troubleshooting section
- Review the usage guide
- Check application logs in
%APPDATA%/InventoryApp/logs/
Built with:
- React + Vite
- Electron
- Tailwind CSS
- shadcn/ui
- Lucide Icons
- Framer Motion
Made with β€οΈ for warehouse management