66 Commits

Author SHA1 Message Date
iterminate 3b2029d3b8 Add logbook entries, data export page, and JSON import 2026-04-26 20:03:58 -05:00
iterminate 52d1105997 Make device.battery_size NOT NULL in schema and tests 2026-04-19 19:00:33 -05:00
iterminate 3e75bb3ab4 Add required battery_size to devices, filter install panels by size 2026-04-19 14:48:55 -05:00
iterminate aabe273172 Add location and fill-status filters to device list 2026-04-19 08:54:50 -05:00
iterminate b90ab7b2b6 Add location field to devices with dropdown selector 2026-04-18 15:36:01 -05:00
iterminate 66062faac6 Add size-in-label checkbox to battery add form 2026-04-18 11:12:37 -05:00
iterminate f64e14e713 Replace migrate_to_mariadb.py with sbin/setup_mariadb.py
Covers all 5 models/tables, prompts for credentials, snapshots SQLite,
and prints env/service config at the end.
2026-04-15 17:34:45 -05:00
iterminate 8721254476 Update README, MIGRATION.md, and CLAUDE.md for current feature set 2026-04-15 03:55:14 -05:00
iterminate 75d0e05f59 Move charge logging to bulk panel, remove per-row button 2026-04-15 03:42:11 -05:00
iterminate 4b534db605 Show checkmark and label on charge button 2026-04-15 03:39:55 -05:00
iterminate 73ee821cc1 Label charge button 'Charged' instead of checkmark 2026-04-15 03:39:18 -05:00
iterminate fa5891d073 Hide retired batteries by default, filter to show them 2026-04-14 20:09:56 -05:00
iterminate e4130bb329 Exclude retired batteries from dashboard warnings 2026-04-14 19:40:11 -05:00
iterminate 5d8fb5aa68 Make low battery summary card clickable to reveal which batteries 2026-04-14 19:05:38 -05:00
iterminate c7b7c24a7e Add needs-attention alerts, last charged, health %, quick charge, sortable columns 2026-04-14 18:49:07 -05:00
iterminate 8fb03e1fa3 Reduce HA live fetch timeout to 1s 2026-04-14 16:25:11 -05:00
iterminate 0d79972dae Enforce unique constraint on Battery.label 2026-04-14 16:03:45 -05:00
iterminate 270acc0430 Fix XSS, CSRF, input validation, and related security issues 2026-04-14 16:00:50 -05:00
iterminate e0f04ea971 Clarify BQ-CC65 measures capacity during refresh cycle only 2026-04-14 14:37:04 -05:00
iterminate ec731988e2 Add BQ-CC65 capacity-measurement tip to README 2026-04-14 14:36:16 -05:00
iterminate 86512e2c4f Update README with app icon and feature overview 2026-04-14 09:13:53 -05:00
iterminate cd3eb046d7 Collapse history sections to latest+modal; add charts and dashboard stats 2026-04-14 09:06:10 -05:00
iterminate 080768bf92 Improve icon-192.png resampling quality 2026-04-14 02:57:08 -05:00
iterminate e223a33c7b Regenerate PWA icons and favicon from updated source image 2026-04-14 02:45:45 -05:00
iterminate 3fc54cda87 Regenerate PWA icons and favicon from updated source image 2026-04-14 02:41:04 -05:00
iterminate 121e26c1a4 Update static/rawicon.png 2026-04-14 02:35:46 -05:00
iterminate cb5af9f252 Upload files to "static" 2026-04-14 02:35:21 -05:00
iterminate cc3091fe97 Delete static/icon-512.png 2026-04-14 02:35:01 -05:00
iterminate a4dcb5859d Delete static/icon-192.png 2026-04-14 02:34:57 -05:00
iterminate 0f6366e871 Regenerate PWA icons and favicon from updated source image 2026-04-14 02:26:13 -05:00
iterminate 1ea3af0dce Upload files to "static" 2026-04-14 02:25:02 -05:00
iterminate 60a8d64fbc Add PWA icons and favicon from source image 2026-04-14 02:19:48 -05:00
iterminate d57522a01d Upload files to "/" 2026-04-14 02:17:53 -05:00
iterminate f08441e799 Restrict HA entity list to sensor. domain only 2026-04-14 02:02:50 -05:00
iterminate 24feeb4fe4 Exclude binary_sensor entities from HA battery entity list 2026-04-14 01:59:26 -05:00
iterminate d00695cd51 Device detail UI cleanup: battery icon, HA live % unknown state, remove redundant entity row 2026-04-14 01:55:29 -05:00
iterminate a9d0b3fc63 Replace datalist with custom autocomplete dropdown for HA entity field (mobile fix) 2026-04-14 01:38:42 -05:00
iterminate b6a3533fed HA improvements: entity overflow fix, live % fetch on device page, searchable entity dropdown 2026-04-14 01:17:53 -05:00
iterminate d7ba64a2f3 Track battery percentage history; skip poll write when value unchanged 2026-04-13 21:15:19 -05:00
iterminate 279a1f3f3e Update README and CLAUDE.md for Home Assistant integration 2026-04-13 20:12:49 -05:00
iterminate 8c06478bca Add optional Home Assistant integration for battery percentage tracking 2026-04-13 20:10:23 -05:00
iterminate 9d2b1d0d51 Add Select all/Deselect all button to filter bar for mobile 2026-04-13 12:44:19 -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 3c2b2dc389 Add bulk Log Charged action to dashboard toolbar
Select multiple batteries, pick a date, and optionally increment charge
cycles for all of them in one shot. Reuses the existing bulk-action form
and POST /battery/bulk-action route; no new routes or migrations needed.
2026-04-13 09:30:56 -05:00
iterminate b1bc02e963 Three features: device dropdown filter, charge log history, unassign-all
- Device dropdowns (quick-assign, bulk install, assign page) now only show
  devices with free slots; full devices are excluded entirely
- New ChargeLog model tracks charge dates with optional cycle increment;
  battery detail page gets a Charge History card with add/delete rows
- Device list page gets per-device Unassign All button (with confirmation)
  via new POST /device/<id>/unassign-all route
2026-04-13 08:12:23 -05:00
iterminate 6597fcd4ac Sticky bulk toolbar on dashboard; anchor scroll on device unassign 2026-04-13 07:23:36 -05:00
iterminate 65596eee2b Add PWA support — installable as home screen app
Adds Web App Manifest, a minimal Service Worker, and Apple/Android meta
tags so the app can be added to a phone home screen and opens full-screen
in standalone mode (no browser chrome).

- static/manifest.json: name, short_name, display=standalone, icons
- static/sw.js: minimal SW served at /sw.js (root scope) via new Flask route
- static/icon-192.png, icon-512.png: generated by sbin/gen_icons.py (stdlib only)
- base.html: manifest link, theme-color, apple-mobile-web-app-* tags, SW registration
2026-04-13 04:28:11 -05:00
iterminate 2f8a8a2b77 Add capacity test history and chart to battery detail
- New CapacityTest model (battery_id FK CASCADE, mah, date, notes)
- DB migration: create capacity_test table, migrate existing single-test data
- Two new routes: add and delete capacity test records
- Battery.tested_capacity_mah/tested_date kept in sync with latest test
  so dashboard display requires no changes
- Battery detail: Capacity History card with sortable table, health %
  per reading, and a canvas line chart (shown when >= 2 records)
- Chart uses CSS variables for colors — works in light and dark mode
- Remove tested_capacity_mah/tested_date from Edit Details form
- 3 new acceptance tests (48 total)
2026-04-13 04:15:55 -05:00
iterminate 86fb342b0d Add README and update CLAUDE.md with current model and rules 2026-04-12 22:58:58 -05:00
iterminate 768f83f63a Add dark mode, simplify nav, and UI polish
- Dark mode via prefers-color-scheme: pure CSS, no JS, follows OS setting
- CSS custom properties for all colors; dark palette redefines variables
- Nav: brand is now a home link, Dashboard link removed, nowrap keeps
  it single-line on mobile; compact padding at 640px breakpoint
- Battery health % uses CSS classes (health-good/warn/bad) instead of
  inline Jinja colors — readable in both light and dark modes
- Stat card counts use CSS color variables for dark mode support
- Fix duplicate display:none on bulk toolbar
- input[type=date] added to themed input selector
2026-04-12 22:55:23 -05:00