Commit Graph

62 Commits

Author SHA1 Message Date
iterminate 4ad29558b3 Add client-side filtering to dashboard
Filter bar with Status, Brand, Size, Storage Location dropdowns and text
search. Select-all and bulk toolbar respect visible rows so users can filter
to a group (e.g. a storage location) and bulk-action them in one step.
2026-04-12 15:58:45 -05:00
iterminate 5e87d5e898 Add column picker to dashboard with localStorage persistence
Optional columns: Chemistry, Capacity, Storage Location, Purchase Date,
Charge Cycles. Selection persists across page loads via localStorage.
2026-04-12 15:51:28 -05:00
iterminate 6384f6b589 Add bulk set field (Storage Location, Brand) to dashboard toolbar
Select batteries, choose field and value from toolbar, hit Apply.
Storage Location dropdown populated from existing locations.
2026-04-12 15:48:46 -05:00
iterminate a806a5b19a Add storage location field to bulk add form 2026-04-12 15:31:23 -05:00
iterminate 70abcfd0ac Add storage location field to battery with dynamic dropdown
Dropdown populated from existing distinct storage locations,
with 'New location...' option revealing a text input.
2026-04-12 15:22:02 -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 604d7bb699 Add optional battery metadata fields
New nullable columns on Battery: size, chemistry, capacity_mah,
tested_capacity_mah, tested_date, charge_cycles, purchase_date.

Battery detail page shows all populated fields and a full edit form
with select dropdowns for size and chemistry (with Other fallback).
Capacity health % shown in green/orange/red when both nominal and
tested capacity are set. Dashboard gains a Size column.
2026-04-12 14:57:22 -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 2e36d5f53c Add CLAUDE.md with architecture and dev commands 2026-04-12 07:18:34 -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