/** * What's New — the release-note registry behind the sidebar popup. * * A plain data file, newest first. There's no changelog table and no * fetch: the notes are written by hand when a release goes out, and the * popup renders whatever is in here. That keeps the whole feature * client-side (it opens instantly, works offline) and means the copy * stays deliberate rather than being generated from commit messages. * * A release is identified by its number and by the commit it went out * with. There are no dates on screen — `date` is kept here only so the * author can see which window of commits a release covers while writing * it, and it is deliberately never rendered. * * To publish a release: * 1. merge the work, then take the short SHA — `git log --oneline -1` * 2. add an entry at the top of the array with the next release number * 3. the release number is the "seen" marker, so bumping it is what * makes the What's New button light up for every operator again */ export interface ReleaseNote { /** Release number. 1 = the first release. Also the "seen" marker. */ release: number; /** Short SHA of the commit this release went out with. */ commit: string; /** * Authoring reference only — the day the release was written up. * Deliberately never rendered: the popup carries no dates. */ date: string; /** One-line headline for the release. */ title: string; /** The changes, one sentence each. */ items: string[]; } export const RELEASE_NOTES: ReleaseNote[] = [ { release: 5, commit: "139ea25", date: "2026-11-01", title: "Delivery Pool, letterhead lock and a dark mode section", items: [ "Delivery Pool: invoiced lines waiting to go out, one card per customer invoice. Assign a driver, upload the signed copy, and the delivery closes.", "Quote letterheads are locked to the customer's company — one letterhead per company, so quotes always go out on the right paper.", "The counter never sells at R0. Items without a price stay off the till, and customer lines go to the price list instead.", "The sidebar now has a Dark Mode section with a light/dark switch. Theme colours live in Settings → Appearance.", "This What's New popup — press it in the sidebar to see what changed.", ], }, { release: 4, commit: "83aec14", date: "2026-10-30", title: "Collection Confirm gets a second pair of eyes", items: [ "Collection Confirm: a Notes button on each PO card, so the driver photos can be checked against the PO before you confirm.", "The AI never changes a price. A different cost on the invoice is flagged as a red Price tick for a person to settle.", "Collection Pool: stock lines can go back to pending and be marked ready again.", "Quotes now record who they were sent to.", ], }, { release: 3, commit: "3eea87e", date: "2026-10-28", title: "Auto-push and a shortcut to AI settings", items: [ "Collection Confirm can auto-push purple cards straight on to invoicing, with a two-day log of everything it moved.", "The Settings page links straight to AI settings.", ], }, { release: 2, commit: "b212d0f", date: "2026-10-26", title: "A phone board for the managers", items: [ "/manager is a mobile board for the managers: every order and where it is, on a phone.", "The preview popup is the same one the desk uses on /search.", ], }, { release: 1, commit: "55cc7fa", date: "2026-10-24", title: "One POS matcher, AI-only quote matching", items: [ "One size-aware matcher now drives the quote assistant, the order fill and the blue price check — so they can't disagree about an item.", "The quote assistant prices only an exact match and shows the closest one instead when it isn't sure.", "Quote matching is AI-only. The old rule-based scorer is retired; the AI links an order when it's sure and suggests otherwise.", "The blue price check badge appears on both Process pages.", ], }, ]; /** The newest entry — the one the "New" dot on the button points at. */ export const LATEST_RELEASE: ReleaseNote = RELEASE_NOTES[0];