Highlights
This release adds a complete custom filament management system and fixes several issues, including the brand/type deletion bug.
New Features
Custom Filament Database
- Custom Brands: Add your own filament brands (appear in Brand dropdown)
- Custom Material Types: Add custom materials like PLA+, PETG-HT, etc.
- Temperature Presets: Save custom temperature settings per brand/type combination
- Import/Export: Backup and restore your custom filament database as JSON
- Data stored in ESP32 NVS (survives reboots, ~150-200 entries)
Progressive Web App (PWA)
- Install as app on mobile devices (Add to Homescreen)
- Fullscreen standalone mode
- Offline caching of UI via Service Worker
Sound Feedback
- Optional piezo buzzer support (GPIO6)
- Beeps for tag detection, successful operations, and errors
Built-in Filament Database
- Auto-fill temperatures for popular brands: Bambu Lab, Prusament, eSun, Polymaker, Hatchbox, Overture, SUNLU, Jayo
- 15 material types with sensible defaults
Bug Fixes
- Fixed: Custom brand/type deletion not working (endpoint routing issue)
- Fixed: Blocking delays in async handlers causing watchdog resets
- Fixed: Race conditions with
std::atomic<bool>for thread safety - Fixed: NDEF format now compatible with Orca Slicer (MIME type record)
- Fixed: LittleFS auto-recovery on mount failure
- Fixed: XSS vulnerability in WiFi SSID display
Technical Improvements
- Added HTTP security headers (X-Content-Type-Options, X-Frame-Options, X-XSS-Protection)
- Input validation with payload size limits
- Consistent JSON error responses across all API endpoints
- Deferred action system for WiFi operations
New API Endpoints
GET /api/filaments - Get complete database
POST /api/filaments - Save temperature preset
POST /api/filaments/brand - Add custom brand
POST /api/filaments/brand/delete - Delete custom brand
POST /api/filaments/type - Add custom material type
POST /api/filaments/type/delete - Delete custom material type
POST /api/filaments/reset - Clear all custom data
POST /api/filaments/import - Bulk import from JSON