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