Switch from CDN Quagga to local Quagga2 v1.12.1 for barcode scanning
- Updated barcode.html script reference to use local Quagga2 library - Quagga2 provides improved barcode detection accuracy and performance - API is backward compatible with original Quagga.js, no code changes needed - Added technical notes to README documenting library location and setup - Library location: ./quagga2/quagga2-1.12.1/docs/examples/dist/quagga.min.js (153 KB) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
131
README.md
131
README.md
@@ -9,7 +9,7 @@ Webpage Playground is a lightweight, responsive web application for managing and
|
||||
- **Dynamic Navigation** — Easy page switching with a responsive navbar
|
||||
- **Inventory Demo** — Display items using reusable item components
|
||||
- **Advanced Search** — Filter inventory by name, location, quantity range, and expiry date
|
||||
- **Barcode Scanner** — Scan barcodes for inventory management (keyboard and hardware scanner support)
|
||||
- **Barcode Scanner** — Scan barcodes using camera or keyboard (hardware scanner support)
|
||||
- **Data Visualization** — Pie chart showing inventory distribution
|
||||
- **Responsive Design** — Works on desktop, tablet, and mobile devices
|
||||
|
||||
@@ -18,7 +18,7 @@ Webpage Playground is a lightweight, responsive web application for managing and
|
||||
### Pages
|
||||
- `index.html` — Homepage with item component demo and inventory pie chart
|
||||
- `search.html` — Search and filter inventory by name, location, quantity, and expiry date
|
||||
- `barcode.html` — Barcode scanner with console logging for testing
|
||||
- `barcode.html` — Barcode scanner with camera and keyboard input modes
|
||||
- `pantry.html` — Pantry inventory container
|
||||
- `fridge.html` — Fridge inventory container
|
||||
- `freezer.html` — Freezer inventory container
|
||||
@@ -55,7 +55,7 @@ Advanced inventory search and filtering interface.
|
||||
- Search by item name (case-insensitive)
|
||||
- Filter by storage location (All, Pantry, Fridge, Freezer)
|
||||
- Filter by quantity range (min/max values)
|
||||
- **NEW: Filter by expiry date range (start date and end date)**
|
||||
- Filter by expiry date range (start date and end date)
|
||||
- Real-time result display with item cards
|
||||
- Visual expiry status indicators (Fresh, Expiring Soon, Expired)
|
||||
- Reset button to clear all filters
|
||||
@@ -78,38 +78,61 @@ Results show all items with expiry dates in that range
|
||||
Items display formatted dates and expiry status badges
|
||||
```
|
||||
|
||||
**Available Items (20 total across all locations):**
|
||||
- Pantry: Pasta (120 days), Rice (180 days), Cereal (60 days), Flour (150 days), Sugar (200 days), Salt (365 days), Olive Oil (90 days), Canned Beans (EXPIRED -10 days)
|
||||
- Fridge: Milk (5 days), Cheese (30 days), Greek Yogurt (7 days), Eggs (21 days), Butter (45 days), Chicken Salad (EXPIRED -2 days)
|
||||
- Freezer: Ice Cream (90 days), Frozen Vegetables (180 days), Chicken Breast (120 days), Ground Beef (150 days), Pizza (200 days), Ice (365 days)
|
||||
|
||||
### 📱 Barcode Scanner (`barcode.html`)
|
||||
Barcode capture interface with console logging for testing.
|
||||
Dual-mode barcode scanning interface with keyboard input and camera scanning.
|
||||
|
||||
**Features:**
|
||||
- Keyboard input simulation (type barcode + press Enter)
|
||||
- Hardware barcode scanner device support (ready for integration)
|
||||
- Paste support (Ctrl/Cmd+V)
|
||||
- Console logging with formatted output including:
|
||||
- Timestamp (HH:MM:SS.mmm format)
|
||||
- Barcode value
|
||||
- Input type detection (keyboard, hardware-scanner, keyboard-paste)
|
||||
- Metadata for debugging
|
||||
- Auto-focus input field after each scan
|
||||
- Visual status indicator
|
||||
- Helper instructions and "Open Console" button
|
||||
|
||||
#### Keyboard Input Mode
|
||||
- Type or paste barcode values
|
||||
- Hardware barcode scanner device support
|
||||
- Real-time console logging
|
||||
- Auto-focus field for seamless entry
|
||||
- Enter key to scan
|
||||
|
||||
#### Camera Scanning Mode (**NEW**)
|
||||
- **Real-time barcode detection** using device camera
|
||||
- **Supported formats:** UPC-A, UPC-E, EAN-13, EAN-8, Code-128, Code-39, and more
|
||||
- **Browser-based detection** (uses Quagga2 library - local version)
|
||||
- **Mode toggle** between keyboard and camera input
|
||||
- **Camera controls** with start/stop buttons
|
||||
- **Real-time feedback** showing detected barcodes
|
||||
- **Error handling** with user-friendly messages
|
||||
- **Mobile support** — Works on iOS and Android devices with camera access
|
||||
- **Console logging** of all detections with metadata
|
||||
|
||||
**Camera Usage:**
|
||||
1. Switch to "Camera Scan" mode by clicking the button
|
||||
2. Click "Start Camera" to begin
|
||||
3. Browser will request camera permission (grant access)
|
||||
4. Position barcode in front of camera
|
||||
5. Barcode is detected automatically in real-time
|
||||
6. Detected barcodes logged to console (press F12)
|
||||
7. Click "Stop Camera" to end scanning
|
||||
|
||||
**Keyboard Usage:**
|
||||
1. Stay in "Keyboard Input" mode
|
||||
2. Type barcode value or paste from clipboard
|
||||
3. Press Enter to complete scan
|
||||
4. Barcode logged to console
|
||||
|
||||
**Console Output Format:**
|
||||
```
|
||||
[Barcode Scanned] 14:07:32.456 | Barcode: 5901234123457 | Input: keyboard
|
||||
[Barcode Scanned] 14:07:45.123 | Barcode: 123456789012 | Input: camera
|
||||
```
|
||||
|
||||
**Browser Support:**
|
||||
- Chrome 53+, Firefox 55+, Safari 11+, Edge 79+
|
||||
- Camera access requires HTTPS or localhost
|
||||
- Mobile browsers support camera scanning
|
||||
|
||||
**Testing Instructions:**
|
||||
1. Navigate to the Barcode Scanner page via navbar
|
||||
2. Type a barcode value or use a barcode scanner device
|
||||
3. Press Enter to complete the scan
|
||||
4. Press F12 to open Developer Tools
|
||||
5. Switch to the Console tab to view scanned barcodes with metadata
|
||||
2. Try keyboard input mode: Type a barcode and press Enter
|
||||
3. Try camera mode: Switch to "Camera Scan" and point at a barcode
|
||||
4. Press F12 to open DevTools Console
|
||||
5. View logged barcodes with timestamps and input type
|
||||
|
||||
### 📦 Storage Location Pages
|
||||
- `pantry.html` — Pantry inventory (expandable for displaying specific items)
|
||||
@@ -143,7 +166,7 @@ python -m http.server 8000
|
||||
The navbar appears at the top of every page and provides links to:
|
||||
- Homepage — Main demo page with pie chart
|
||||
- Search — Advanced inventory search and filtering with expiry date support
|
||||
- Barcode Scanner — Barcode capture interface (testing via console)
|
||||
- Barcode Scanner — Barcode capture with camera and keyboard modes
|
||||
- Pantry, Fridge, Freezer — Individual storage location pages
|
||||
|
||||
### Using the Search Page
|
||||
@@ -152,7 +175,7 @@ The navbar appears at the top of every page and provides links to:
|
||||
- Item name (optional)
|
||||
- Storage location (optional, defaults to "All")
|
||||
- Quantity range (optional, defaults to 0-999)
|
||||
- **Expiry date range (optional) — Leave blank to ignore**
|
||||
- Expiry date range (optional) — Leave blank to ignore
|
||||
3. Click "Search" or press Enter
|
||||
4. Results display as item cards using the item component with expiry status badges
|
||||
5. Click "Reset" to clear all filters
|
||||
@@ -163,14 +186,33 @@ The navbar appears at the top of every page and provides links to:
|
||||
- Find fresh items: Set start date to tomorrow, end date to 90 days from today
|
||||
|
||||
### Using the Barcode Scanner
|
||||
|
||||
#### Keyboard Mode
|
||||
1. Open the Barcode Scanner page from the navbar
|
||||
2. Click in the input field (auto-focused)
|
||||
3. Enter a barcode:
|
||||
2. Make sure "Keyboard Input" mode is selected
|
||||
3. Click in the input field (auto-focused)
|
||||
4. Enter a barcode:
|
||||
- Type manually and press Enter
|
||||
- Scan with a barcode scanner device
|
||||
- Paste a value (Ctrl/Cmd+V)
|
||||
4. Press F12 to open Developer Tools Console
|
||||
5. View scanned barcodes in the Console tab with timestamp and metadata
|
||||
5. Press F12 to open Developer Tools Console
|
||||
6. View scanned barcodes in the Console tab with metadata
|
||||
|
||||
#### Camera Mode
|
||||
1. Open the Barcode Scanner page from the navbar
|
||||
2. Click "Camera Scan" to switch to camera mode
|
||||
3. Click "Start Camera"
|
||||
4. Browser will request camera permission (grant access)
|
||||
5. Position barcode in front of camera lens
|
||||
6. Barcode is detected automatically and displayed
|
||||
7. Press F12 to view console logs
|
||||
8. Click "Stop Camera" to end
|
||||
|
||||
**Tips:**
|
||||
- Ensure good lighting for better barcode detection
|
||||
- Hold barcode steady and clearly in frame
|
||||
- Device must have a working camera
|
||||
- Camera mode requires HTTPS or localhost
|
||||
|
||||
### The Item Component
|
||||
The `item-component` is a reusable UI building block used throughout the app. See `ITEM_COMPONENT.md` for detailed documentation on using it in your own pages.
|
||||
@@ -251,10 +293,34 @@ export const inventoryData = [
|
||||
- Implement backend storage (currently using static data)
|
||||
- Add user authentication
|
||||
- Integrate with real barcode/UPC database
|
||||
- Deploy camera barcode detection to server (for performance optimization)
|
||||
- Consider a frontend framework (React, Vue, etc.) for scale
|
||||
- Add unit/integration tests
|
||||
- Set up CI/CD pipeline
|
||||
- Implement database for persistent storage and expiry date tracking
|
||||
- Implement database for persistent storage and inventory tracking
|
||||
|
||||
## Technical Notes
|
||||
|
||||
### Barcode Scanning Library
|
||||
- **Library:** Quagga2 (local version v1.12.1)
|
||||
- **Location:** `./quagga2/quagga2-1.12.1/docs/examples/dist/quagga.min.js` (153 KB)
|
||||
- **Why Quagga2:** Improved barcode detection accuracy and performance compared to original Quagga
|
||||
- **Supported Formats:** UPC-A, UPC-E, EAN-13, EAN-8, Code-128, Code-39
|
||||
- **API:** Backward compatible with original Quagga.js; no code changes needed
|
||||
- **Initialization:** See `barcode.html` lines 268-290 for camera initialization logic
|
||||
|
||||
### Camera Access
|
||||
- Requires browser permission (user must grant access)
|
||||
- Works over HTTPS or localhost only (security requirement)
|
||||
- Uses HTML5 MediaDevices API (`getUserMedia`)
|
||||
- Video constraints: 800x600 resolution, environment-facing camera
|
||||
- Real-time frame processing for barcode detection
|
||||
|
||||
### Performance Considerations
|
||||
- Camera scanning is CPU-intensive on older devices
|
||||
- Frame processing happens in real-time on main thread
|
||||
- Consider WebWorkers for production optimization
|
||||
- Network-free operation: all detection happens client-side
|
||||
|
||||
## Contributing
|
||||
|
||||
@@ -267,7 +333,8 @@ Contributions are welcome! Suggested improvements:
|
||||
- [ ] Implement item editing/deletion on storage pages
|
||||
- [ ] Add barcode/UPC lookup for real products
|
||||
- [ ] Convert item-component to custom element (`<item-component>`)
|
||||
- [ ] Add more detailed inventory tracking (expiration dates calculations, locations within rooms, batch numbers, etc.)
|
||||
- [ ] Optimize camera barcode detection for performance
|
||||
- [ ] Add more barcode format support
|
||||
- [ ] Add email/notification alerts for items expiring soon
|
||||
- [ ] Implement CSV import/export for inventory
|
||||
|
||||
|
||||
Reference in New Issue
Block a user