Add support for four authentication modes via AUTH_METHOD environment variable: - none: Username-only authentication (no password) - local: Password authentication required (default) - oidc: OIDC/Single Sign-On only - both: OIDC + local password authentication Key changes: - Add password_hash column to users table (migration 068) - Implement password storage and verification in User model - Update login routes to handle all authentication modes - Add conditional password fields in login templates - Support password authentication in kiosk mode - Allow password changes in user profile when enabled Password authentication is now enabled by default for better security, while remaining backward compatible with existing installations. Users will be prompted to set passwords when required. Fixes authentication bypass issue where users could access accounts without passwords even after setting them.
8.1 KiB
Kiosk Mode - Inventory & Barcode Scanning Quick Reference
Overview
Kiosk Mode is a specialized interface for warehouse operations with barcode scanning and integrated time tracking. Perfect for:
- Warehouse kiosk stations
- Receiving/shipping areas
- Stock count stations
- Production floor terminals
- Retail/shop floor operations
Key Features
Core Functionality
✅ Barcode Scanning - USB scanners, camera-based, or Bluetooth
✅ Quick Stock Adjustments - Scan → Adjust → Done
✅ Stock Lookup - Instant stock level display across warehouses
✅ Stock Transfers - Move items between warehouses
✅ Time Tracking - Start/stop timers while managing inventory
✅ Physical Counts - Count and adjust stock levels
UI/UX Features
✅ Touch-Optimized - Large buttons (44x44px minimum)
✅ Fullscreen Mode - Hide browser chrome
✅ High Contrast - Readable in warehouse lighting
✅ Visual Feedback - Clear success/error messages
✅ Quick Actions - One-tap common operations
Barcode Scanning Options
1. USB Keyboard Wedge Scanners (Recommended)
- How: Scanner acts as keyboard, Enter triggers lookup
- Pros: Simple, fast, reliable, no drivers needed
- Best for: Fixed kiosk stations
2. Camera-Based Scanning
- Libraries: QuaggaJS, ZXing, BarcodeDetector API
- Pros: No hardware needed, works on mobile
- Cons: Slower, requires camera permission
- Best for: Mobile devices, tablets
3. Bluetooth Scanners
- How: Wireless scanner pairs with device
- Pros: Wireless, mobile-friendly
- Cons: Requires pairing, battery dependent
- Best for: Mobile/portable operations
Workflow Examples
Receiving Stock
- Scan barcode → Item details appear
- Enter received quantity
- Select warehouse/location
- Confirm → Stock updated
- (Optional) Start timer for receiving work
Stock Adjustment
- Scan barcode → Current stock shown
- Enter adjustment (+/- quantity)
- Select reason (damaged, found, etc.)
- Confirm → Movement recorded
Stock Transfer
- Scan barcode
- Select source warehouse
- Select destination warehouse
- Enter quantity
- Confirm → Transfer completed
Time Tracking
- Start timer for project/task
- Perform inventory operations
- Timer runs in background
- Stop timer when done
Implementation Components
Backend
- New Blueprint:
app/routes/kiosk.py - API Endpoints:
POST /api/kiosk/barcode-lookup- Find item by barcodePOST /api/kiosk/adjust-stock- Quick stock adjustmentPOST /api/kiosk/transfer-stock- Transfer between warehousesPOST /api/kiosk/start-timer- Start time trackingPOST /api/kiosk/stop-timer- Stop time tracking
Frontend
- Templates:
app/templates/kiosk/login.html- User selectionapp/templates/kiosk/dashboard.html- Main interface
- JavaScript:
app/static/kiosk-barcode.js- Barcode scanning logicapp/static/kiosk-timer.js- Timer integrationapp/static/kiosk-mode.js- General kiosk functionality
- CSS:
app/static/kiosk-mode.css- Touch-optimized styles
UI Layout
┌─────────────────────────────────────────────┐
│ [User: John] [Timer: 02:34:15] [Logout] │
├─────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────┐ │
│ │ 📷 Barcode Scanner │ │
│ │ [Scan barcode or enter manually] │ │
│ └─────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ Item: Widget A (SKU: WID-001) │ │
│ │ Barcode: 1234567890123 │ │
│ │ Current Stock: 45 pcs │ │
│ │ Location: A-12-B │ │
│ └─────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ Operation: [Adjust ▼] │ │
│ │ Quantity: [ -5 ] [+5 ] │ │
│ │ Reason: [Select reason ▼] │ │
│ │ [Apply Adjustment] │ │
│ └─────────────────────────────────────┘ │
│ │
│ [Add Stock] [Remove] [Transfer] [Timer] │
└─────────────────────────────────────────────┘
Integration Points
Existing Systems
- ✅ Inventory Models:
StockItem,Warehouse,WarehouseStock,StockMovement - ✅ Time Tracking:
TimeEntry, timer routes - ✅ Projects: Link movements to projects
- ✅ Permissions: Use existing permission system
Database
- StockItem.barcode: Already exists (indexed)
- StockMovement: Records all changes
- WarehouseStock: Tracks stock levels per warehouse
Configuration
Admin Settings
- Enable/disable kiosk mode
- Auto-logout timeout (default: 15 min)
- Allow camera scanning
- Require reason for adjustments
- Default warehouse
- Allowed movement types
- User restrictions
User Preferences
- Default warehouse
- Recent items tracking
- Quick action customization
Security
- ✅ Authentication follows
AUTH_METHODsetting:none: Username-only login (acceptable for trusted kiosk environments)localorboth: Password authentication required (more secure)
- ✅ Shorter session timeout
- ✅ Auto-logout on inactivity
- ✅ Permission checks for operations
- ✅ Complete audit trail (all movements logged)
- ✅ Cannot delete movements (only adjust)
Implementation Phases
Phase 1: MVP
- Kiosk login
- Barcode input (keyboard wedge)
- Barcode lookup
- Item display
- Simple stock adjustment
- Timer display
Phase 2: Enhanced
- Camera scanning
- Stock transfers
- Multi-warehouse
- Recent items
- Auto-logout
- Fullscreen mode
Phase 3: Advanced
- Physical count mode
- Bulk operations
- Project linking
- Advanced timer
- Customizable actions
Phase 4: Polish
- Testing
- Optimization
- Documentation
- Accessibility
Testing Checklist
- USB barcode scanners
- Camera-based scanning (mobile/webcam)
- Touch devices (tablets)
- Different screen sizes
- Network issues/offline
- Concurrent users
- Performance (fast scanning)
- Error handling
Quick Start Implementation
1. Create Kiosk Blueprint
# app/routes/kiosk.py
kiosk_bp = Blueprint('kiosk', __name__)
@kiosk_bp.route('/kiosk')
def kiosk_dashboard():
# Main kiosk interface
pass
2. Register Blueprint
# app/__init__.py
from app.routes.kiosk import kiosk_bp
app.register_blueprint(kiosk_bp)
3. Create Templates
app/templates/kiosk/login.htmlapp/templates/kiosk/dashboard.html
4. Add Barcode Lookup API
@kiosk_bp.route('/api/kiosk/barcode-lookup', methods=['POST'])
def barcode_lookup():
# Search by barcode or SKU
# Return item details and stock levels
pass
5. Add JavaScript
- Barcode input handling
- Camera scanning (optional)
- Stock adjustment forms
- Timer integration
Future Enhancements
- QR code support
- Voice commands
- Batch scanning
- Print labels
- Inventory reports
- Multi-language
- Offline mode
- Scale integration
Documentation
See docs/KIOSK_MODE_INVENTORY_ANALYSIS.md for detailed analysis and implementation guide.