v2.8.0 Release Summary
What's New
This release makes capturing the real-world record of your build faster and more mobile-friendly. You can now create an entire invoice straight from a scanned Paperless document, snap and tag photos one-handed from your phone, and log who worked on site and for how long -- all without leaving the screen you are on. No manual migration steps are required.
Highlights
-
Create invoices from a Paperless document -- When Paperless-ngx and Auto-itemize are both configured, New Invoice opens a document picker. Pick the PDF the vendor sent you and Cornerstone reads the invoice for you: it pre-fills the invoice number, amount, date, due date, and notes, suggests the matching vendor, and extracts the line items -- grossing up net lines by VAT so the totals match. Review, assign each line to a work item or household item, and click Create Invoice & Itemize to create the invoice and all its budget lines in one step. The new-invoice review screen now shares the exact same interface as the existing Auto-itemize page.
-
Mobile-first photo capture -- Capturing site photos is built for the phone. Snap a photo with your camera, and a photo-details modal lets you add a caption, the area it was taken in, and the compass orientation it faces before it uploads. A new Orientations tab on the Manage page lets you maintain your own list of directions (e.g. "South – Street-facing") to tag photos with. The photo annotator now scales to fit any screen and is fully touch- and stylus-enabled, so you can mark up a photo on a tablet as easily as on a desktop.
-
Diary daily-log vendor and work hours -- Daily Log entries gained optional Vendor, Work start, and Work end fields, with the total work duration computed automatically. The entry's information panel shows who worked and for how long at a glance, turning a daily log into a simple labour record.
-
Discoverable document unlink -- The action to unlink a document from a work item, household item, or invoice now lives as a clear ✕ overlay in the top-right corner of each linked-document card, so it is easy to find without cluttering the card.
Notable Fixes
- Search-as-you-type pickers now position their dropdown correctly and stay anchored while scrolling on mobile.
- Mobile browsers no longer zoom in when you focus a text field or pinch, keeping forms steady on small screens.
- Hardened the construction-diary daily-log experience and the mobile diary filter panel.
Upgrade
docker pull steilerdev/cornerstone:latestRestart your container. Schema migrations run automatically on first boot. Creating invoices from Paperless documents reuses your existing Auto-itemize configuration -- if you have already set the LLM_* and PAPERLESS_* environment variables, the document-first flow appears automatically.
2.8.0 (2026-06-16)
Features
- budget: unify new-invoice auto-itemize UI with existing review view and fix silent create failure (#1703, #1704) (6eea9b3)
- diary: add optional vendor and work start/end time with computed duration to daily log (#1673) (8ffa993), closes #1672
- invoices: Paperless-first invoice creation with LLM auto-itemize (#1681) (f27962e), closes #1679
- photos: mobile-first photo capture flow with metadata modal and orientation metadata (#1674) (6dc961c)
Bug Fixes
- auto-itemize: add VAT to total for net (includesVat=false) line items (#1678) (d4c08cf), closes #1677
- client: disable mobile viewport zoom on input focus and pinch (#1707) (97f0284)
- diary: anchor mobile filter panel to bar so filters and search are usable (#1688) (#1689) (bcd5ec7)
- documents: move unlink action to discoverable top-right card overlay (#1680) (d39cb80)
- e2e: correct Scenario 25 invoice amount to account for VAT gross-up (#1591) (#1699) (b51708d)
- e2e: harden diary Scenario 14 + Playwright 1.60 browser install in CI (#1718) (1aa3937)
- llm: disable model thinking/reasoning for budget invoice extraction (#1702) (c67dfc1), closes #1701
- manage: align OrientationsTab to defined CSS module classes (#1687) (#1698) (65f70e8)
- photo-annotator: responsive scaling and touch support for mobile annotation (#1705) (5f7f6d4)
- photo-metadata: sync mobile lightbox toggle fix to beta (#1715) (759e14c)
- search-picker: anchor dropdown to input field during mobile scroll (#1712) (2b126c2), closes #1601 #1708
- search-picker: replace hand-rolled positioning with Floating UI (#1714) (2dff282), closes #1712 #1601 #1708
Documentation
Chores
- client: clear residual eslint warnings (web-api-no-leaked-fetch, jsx-no-children-prop) (#1696) (5f072cd), closes #1455
- client: resolve set-state-in-effect and exhaustive-deps lint warnings (#1469) (#1690) (0bac54d)
- deps-dev: bump the dev-dependencies group with 7 updates (#1694) (40a45cd)
- deps: align root and client Konva versions to eliminate type-collision (#1685) (43865d6), closes #1646
- deps: bump github/codeql-action in the github-actions group (#1693) (f1b8171)
- deps: bump the prod-dependencies group across 1 directory with 8 updates (#1695) (bb92bcb)
- lint: resolve @typescript-eslint/consistent-type-imports errors (#1684) (12b4a2a), closes #1458
- nudge promotion CI via synchronize on pushable head (81d97bf)
- retrigger promotion CI (#1720) (9d4f3b7), closes #1700
- test-infra: audit Jest unit test memory + fix useNavigate anti-pattern (#1568) (#1686) (d111db7)
- test: adopt Jest 30.4.0 workerGracefulExitTimeout and --collectTests (#1697) (7e53bfe), closes #1573
- types: eliminate @typescript-eslint/no-explicit-any warnings (#1463) (#1691) (288ff46)
- zero out remaining ESLint warnings and errors (#1455) (#1692) (ae5c5a2)