77 lines
3.8 KiB
Markdown
77 lines
3.8 KiB
Markdown
|
|
# Changelog
|
||
|
|
|
||
|
|
All notable changes to this project will be documented in this file.
|
||
|
|
|
||
|
|
## [0.4.0] - 2026-08-16
|
||
|
|
|
||
|
|
incr began as a tracker for VWCE shares and accumulated a ledger, asset prices,
|
||
|
|
milestones, an onboarding wizard and a React frontend on the way. This release
|
||
|
|
removes all of it. What remains is a counter: click the number to add one, or
|
||
|
|
open a dialog to set it directly.
|
||
|
|
|
||
|
|
### Changed
|
||
|
|
|
||
|
|
- **The frontend is Blade and Livewire 4 instead of React and Inertia** (#52)
|
||
|
|
- `wire:click="increment"` replaces a page component, a display component, a
|
||
|
|
dialog and the fetch layer between them.
|
||
|
|
- The build output went from 2264 modules and 311 kB of JavaScript to two
|
||
|
|
modules and 13 kB of CSS. No JavaScript is shipped to the browser.
|
||
|
|
- npm dependencies went from 33 to 4: vite, tailwindcss and two plugins.
|
||
|
|
- The page now renders server-side with the count already in the HTML. There
|
||
|
|
is no loading spinner and no fetch after paint.
|
||
|
|
- **The counter is a single integer** (#50)
|
||
|
|
- It was `SUM(quantity)` over an `entries` ledger. Per-increment history was
|
||
|
|
never displayed and is deliberately not kept.
|
||
|
|
- `POST /increment` and `PATCH /count` return JSON with real status codes. The
|
||
|
|
endpoints they replaced returned redirects, which `fetch()` followed — a
|
||
|
|
validation failure reported success.
|
||
|
|
- **Onboarding is a single input for the starting value** (#51)
|
||
|
|
- It was a three-screen wizard asking for a label, a unit, a date, a quantity
|
||
|
|
and a milestone.
|
||
|
|
- A counter sitting at zero used to be indistinguishable from an unconfigured
|
||
|
|
app and was sent back to setup. The gate is now whether a counter exists.
|
||
|
|
- **CI runs in about 40 seconds instead of two to forty minutes** (#46, #57)
|
||
|
|
- PHP is baked into a prebuilt image rather than installed on every run.
|
||
|
|
- Tests run against sqlite in memory rather than a MySQL service container,
|
||
|
|
taking about a second instead of 53.
|
||
|
|
- The Composer cache path was wrong, so no packages were ever cached.
|
||
|
|
- Thirteen migrations squashed into one (#46). The chain created and dropped
|
||
|
|
nine tables to arrive at a single table, and replaying it required
|
||
|
|
MySQL-specific DDL. Existing installations are unaffected.
|
||
|
|
|
||
|
|
### Removed
|
||
|
|
|
||
|
|
- Asset and price tracking: the `Asset` and `AssetPrice` models, their
|
||
|
|
controllers, eight routes and two tables (#48)
|
||
|
|
- Milestones, the progress bar and the stats box (#49)
|
||
|
|
- The user layer. The app is single-user with no authentication, but carried a
|
||
|
|
fake user, an auth config, and `users`, `sessions` and `password_reset_tokens`
|
||
|
|
tables that existed only to be bypassed (#53)
|
||
|
|
- 51 unreachable frontend files left by the Laravel starter kit — a layout
|
||
|
|
system, a component library and an unrouted landing page, none of which any
|
||
|
|
page imported (#47)
|
||
|
|
- Stale CI: two GitHub Actions workflows targeting a branch that does not exist,
|
||
|
|
and a Jenkinsfile pointing at a registry the project left months ago (#56)
|
||
|
|
|
||
|
|
### Added
|
||
|
|
|
||
|
|
- PHPStan with larastan at level 7, clean with no baseline (#55)
|
||
|
|
- Test coverage for the counter, from 4 tests covering only milestones to 17
|
||
|
|
covering increment, set-value, validation and onboarding (#54)
|
||
|
|
|
||
|
|
### Fixed
|
||
|
|
|
||
|
|
- The 7-segment display font never loaded in development. Vite serves assets
|
||
|
|
itself, so the absolute `/fonts/` path returned 404 and the browser silently
|
||
|
|
fell back to a monospace face (#59)
|
||
|
|
- The browser tab said "Laravel" and the favicon was the framework default (#59)
|
||
|
|
- `GET /register` returned an error rather than 404: the route and controller
|
||
|
|
outlived the page component they rendered (#53)
|
||
|
|
- `container_tinker` ran expressions but discarded their return values, and
|
||
|
|
`container_db_read` invoked a MariaDB client against a MySQL container (#58)
|
||
|
|
|
||
|
|
### Note
|
||
|
|
|
||
|
|
Price tracking (#38, #35) and a dropdown fix (#17) were closed as won't-fix.
|
||
|
|
They built or repaired subsystems this release removes.
|