Releases: dannymcc/may
Releases · dannymcc/may
v0.22.2
Bug Fixes
- Fix `/api/calendar/feed` and the Home Assistant alerts route crashing on `MaintenanceSchedule.next_due_mileage` — the column is `next_due_odometer`. Calendar also called the non-existent `vehicle.unit_distance`; switched to `get_effective_odometer_unit()`. (#168)
- Fix full-tank fuel consumption only counting the current fill's volume. With partial fills between two full tanks, the figure was arbitrarily low. Both per-log `get_consumption()` and the vehicle's average now sum every litre poured between the two full tanks (the standard fill-to-fill method) and bail out cleanly when an intervening log is flagged as missed. (#169)
- Fix linking a station to an existing fuel log via edit not bumping the station's "Used Nx" counter, and changing the station on an already-linked log not updating the price-history row. The edit handler's price-history reconciliation now covers create + first link, swap, and clear cases consistently. (#170)
v0.22.1
What's Changed
Bug Fixes
- Fix worker boot failure on container upgrade for pre-Flask-Migrate databases (#166). The schema recovery now walks the SQLAlchemy models directly, so any model column missing from a live database is added automatically — the previous hardcoded list had drifted out of date and missed
default_vehicle_id,show_menu_*,show_quick_entry,start_page,api_keyand others.
Other Changes
- Startup banner: every boot now logs
May <version> starting (alembic_version=...)so future upgrade reports identify the running image at a glance. - New regression tests cover the legacy DB → upgrade path so this class of bug stays fixed.
v0.22.0
What's Changed
New Features
- Vehicle Sharing: Mark a vehicle as "Shared" to make it visible and loggable by all users on the instance — no per-user invite needed (#154)
- Upcoming Maintenance Panel: Vehicle detail page now shows a live panel of scheduled maintenance tasks with overdue and due-soon badges (#147)
- Collapsible Parts & Consumables: Parts section on the vehicle page collapses/expands with state saved per vehicle in localStorage (#86)
- Inspection Expense Category: New "Inspection" category for MOT, roadworthy checks, and similar expenses (#86)
- Expandable Expense Rows: Click any expense row to reveal vendor and notes inline without leaving the page (#86)
- Odometer in Expenses: Expense list now shows the odometer reading column (#86)
- Dashboard Vehicle Cards: Dashboard vehicle list replaced with photo cards showing make/model/year and fuel type badge (#147)
- Annual Mileage Limit Tracking: Track and display annual mileage limits per vehicle (#153)
Bug Fixes
- Fixed dark mode bleeding into light mode — Tailwind config now loads after the CDN script so
darkMode: 'class'is honoured correctly - Hide fuel log / charging session buttons based on vehicle fuel type — EV-only vehicles no longer show the fuel log button, and non-EV vehicles no longer show the charging button (#163)
Other Changes
- Increased document upload limit to 300MB and expanded allowed file types (Excel, TXT, CSV, ePub)
- Improved German translations (#157)
- Improved Italian translations (#133)
- Updated dependencies: flask-migrate ≥4.1.0, requests ≥2.33.1, gunicorn ≥25.3.0, werkzeug ≥3.1.8, python-dateutil ≥2.9.0.post0
- CI: bump docker/setup-qemu-action from 3 to 4
Upgrade Notes
All database changes are handled automatically via migrations on container start. No manual steps required.
v0.21.1
Bug Fixes
- Migration startup crash (#148): The
ee92897cc33bmigration now checks whether columns already exist before adding them, preventing theduplicate columnerror that affected users upgrading from older installs. - Expense edit not saving (#151): Invalid date or cost input (e.g. wrong date format when the datepicker fails to load) now returns a clear error message instead of a silent 500. Also fixed a Jinja2 block name mismatch (
scripts→extra_scripts) in the expense form template so the odometer unit label JavaScript is correctly rendered. - Czech language showing English (#152): The compiled
.motranslation file was missing — Czech translations are now fully active.
v0.21.0
What's Changed
New Features
- Additional vehicle types: Added Hatchback, Station Wagon / Estate, and Pickup / Ute to the vehicle type options
- Secondary fuel type per vehicle: Vehicles can now have an optional secondary fuel type (e.g. AdBlue alongside Diesel). When set, each fuel log entry shows a fuel type selector so fill-ups can be tracked separately per fluid
Other Changes
- Added
vehicle_type_labelproperty to the Vehicle model for clean display of all vehicle type names - Vehicle type display updated across the vehicle list, vehicle detail, and PDF report views
- Database migration adds
secondary_fuel_typeto vehicles andfuel_typeto fuel_logs (both nullable, fully backwards compatible — applied automatically on container start)
Full Changelog: v0.20.0...v0.21.0
v0.20.0
What's Changed
Bug Fixes
- Consumption calculated for partial fills — fuel logs without "Full tank fill-up" now show an instantaneous consumption figure based on the distance since the previous log (#122)
- Fuel price history stays in sync on edit — correcting a price on a fuel log now updates the cheapest fuel display immediately; the bad-entry scenario from #113 is fixed (#113)
v0.19.0
What's Changed
New Features
- Cost per distance on vehicle page — each vehicle's detail page now shows a cost per km/mi stat card (#106)
- Price per unit on quick fuel entry — enter any two of volume / price-per-unit / total cost and the third is calculated automatically (#99)
Other Changes
- Added
ADMIN_PASSWORDexample (commented out) todocker-compose.yml(#135)
v0.18.1
What's Changed
Bug Fixes
- Fix container startup failure after upgrading from v0.15.0/v0.16.0 with
no such column: users.default_vehicle_id(#132, #136). Databases created before Flask-Migrate was introduced had an emptyalembic_versiontable, which causedflask db upgradeto replay migrations from scratch and fail on a duplicateodometer_unitcolumn, leaving thedefault_vehicle_idmigration unexecuted.
Other Changes
- Migrations
998cdb1497c6,613be8af4376, anda1b2c3d4e5f6are now idempotent and safely skip changes that are already in place. - New alembic bootstrap step stamps the correct revision for pre-Flask-Migrate databases so future upgrades only apply pending migrations.
_run_schema_migrationsnow addsusers.default_vehicle_idas a fallback so the app boots even if alembic state can't be recovered automatically.docker-entrypoint.shno longer silently swallowsflask db upgradefailures — any remaining migration error is now visible in container logs.
Upgrade note: No manual action is required. Containers that previously failed to start with the missing-column error will now complete migration automatically on next boot.
v0.18.0
What's Changed
New Features
- Trip Templates — save common routes as reusable templates to log trips faster. Templates store purpose, vehicle, start/end locations, description, and notes. Select a template on the Log Trip form to pre-fill all fields instantly, or use the "Use" button from the templates list to open a pre-filled trip form.
Other Changes
- New
trip_templatesdatabase table (migration included, runs automatically on startup) - 23 new tests covering template CRUD, access control, and form integration
v0.17.0
What's Changed
New Features
- Add Czech language translation (thanks @javlk83 for the contribution!)
- Volume inputs now accept 3 decimal places (e.g. 43.034 L) — important for Canadian and other markets
- Trip end odometer is now optional — log a trip when you leave and fill in the end odometer when you return
- Default vehicle preference — set in Settings > Menu to pre-select your most-used vehicle on all new entry forms
Bug Fixes
- Editing a fuel log and changing the vehicle now correctly saves to the new vehicle
- Clarkson SQL importer now handles both
FuelandFuelupstable names, and supports UUID vehicle IDs
Database Migration
This release includes a database migration that runs automatically on container startup:
- Adds
default_vehicle_idpreference to user accounts - Makes trip
end_odometernullable