iterminate
66062faac6
Add size-in-label checkbox to battery add form
2026-04-18 11:12:37 -05:00
iterminate
39b52a3fa4
Replace browser confirm() dialogs with custom modal; add live label preview on battery add form
...
- base.html: add CSS/HTML/JS for styled in-app confirmation modal (dark-mode compatible via CSS vars)
- device_list, battery_detail: convert onsubmit confirm() to declarative data-confirm attributes
- dashboard: convert bulk Delete/Install buttons to use modal helpers (submitWithAction pattern)
- app.py: pass brand_counts dict to battery_add template
- battery_add.html: show live "Will create: Brand 001 → Brand 003" preview as brand/quantity change
- tests: add two tests covering brand_counts server-side rendering
2026-04-13 09:53:21 -05:00
iterminate
3bc897c1e5
Add device_type field, mobile-friendly improvements, and device filtering
...
- Device model: add device_type column (String 50, nullable)
- Device add/edit: type select with presets + custom entry
- Device detail: show type in info card; new Edit Device form
- Device list: Type column + client-side filter bar (type + text search)
- Mobile: card-style responsive tables on dashboard and device list,
form-grid-2col collapse, larger tap targets, stacked form-actions,
column picker viewport fix, filter bar full-width controls
- Assign page: larger radio touch targets (min-height 44px)
- 3 new acceptance tests for device_type (45 total)
2026-04-12 22:02:29 -05:00
iterminate
a806a5b19a
Add storage location field to bulk add form
2026-04-12 15:31:23 -05:00
iterminate
5a7bbd46ab
Add size, chemistry, capacity, purchase date to bulk add form
...
Shared metadata fields settable at creation time apply to all
batteries in the batch, avoiding per-battery detail page visits.
2026-04-12 15:15:07 -05:00
iterminate
47e1059532
Replace datalist autocomplete with select dropdown for brand fields
...
datalist only shows suggestions when typing, not on click. Switched to
a <select> showing all known brands plus a 'New brand...' option that
reveals a text input for entering a new brand name.
2026-04-12 14:20:03 -05:00
iterminate
709e0d6119
Add brand autocomplete dropdown to battery add and device install forms
...
Uses HTML datalist populated from distinct brands in the battery table.
Removed autocomplete="off" which suppresses datalist in Chrome/Chromium.
2026-04-12 13:31:19 -05:00
iterminate
1f5234a3e9
Simplify battery management: bulk add, device-level auto-install, mass operations
...
- Replace single-battery add form with bulk add (brand + count, auto-generated labels)
- Add device-level install form: specify brand+qty pairs, system autoselects available batteries
- Add bulk actions on dashboard: retire, delete, unassign, change brand (checkbox multi-select)
- Keep per-battery assign route for special cases (e.g. known low-capacity battery)
- Remove unique constraint on Battery.label (labels are now auto-generated)
- Add *.snapshot to .gitignore for DB snapshot files
- Rewrite tests: 35 passing (11 new tests for bulk-add, device-install, bulk-actions)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-12 12:57:10 -05:00
iterminate
6ea3eae981
Initial commit: Flask battery tracker app
...
- Flask + SQLAlchemy (MariaDB-compatible schema) battery tracking web app
- 40 pre-seeded batteries (Eneloop, BONAI, Energizer NiMH) across 5 devices
- Business rules: block retired assignment, brand-mix warnings, capacity checks
- Mobile-friendly Jinja2 templates with inline CSS
- waitress WSGI server via systemd user service (sbin/install-service.sh)
- SQLite → MariaDB migration script (migrate_to_mariadb.py)
- 26 passing acceptance tests (pytest + Flask test client)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 22:38:16 -05:00