import Link from "next/link"; import { Band, CtaBand, PageHead, SiteNav, h2, h3, kicker, small } from "@/components/site"; export const metadata = { title: "Roadmap", description: "What’s being built next for ThreadCount, and what has shipped since the list was written. No dates — the order is intent, and it came from linen rooms asking.", alternates: { canonical: "/roadmap" }, }; // Still to come. No dates, because a date on a public page is a promise the room can't always keep. const PLANNED = [ { t: "Automatic reorder triggers at par level", b: "Set a par level per garment and size, and let the draft order raise itself when the shelf drops below it." }, { t: "Offline mode for the linen room", b: "Keep issuing and counting when the wireless drops out, and sync when it returns." }, { t: "Staff self-service issue kiosk", b: "A screen at the counter where staff identify themselves and collect what has been approved, without queueing for the coordinator." }, { t: "Cost per staff member reporting", b: "Spend by individual as well as by ward, for the conversations about outliers." }, { t: "Laundry contractor reconciliation", b: "Match what went out against what came back, and put a number on what the contract is losing." }, { t: "Multi-site and group-wide rollout", b: "Several stores running independently — a hospital’s linen rooms, an aged-care group’s homes, a network of clinics — with combined reporting above them." }, ]; /* Four things that were on this list have since been built, and leaving them tagged "Planned" * made the page contradict /features and /faq — a reader could not tell which one to believe. They * stay on the page rather than quietly disappearing from it, because a room that read the list * three months ago should be able to see what happened to it, but they are out of the numbering * of what is still to come. Size history was listed here as "size and fit history"; what shipped is * the size half — the record knows the last size somebody was issued, not whether it fitted them — * so the title says size only rather than promising a fit note nobody writes. The two apps are the * one honest half-state: both are built, and the Play listings are in review, so the tag says * exactly that until the listings are public. */ const DONE = [ { t: "Barcode and QR scanning on phone", b: "Scanning for issuing, counting and receiving, using the supplier codes already on the garment. Chrome and Edge read a barcode from the camera; on an iPhone or iPad, and in Firefox, the code is typed or read with a USB scanner.", tag: "Shipped" }, { t: "Size history per person", b: "Every staff member carries the size of the last one they were issued, garment by garment, so the counter opens on what they had rather than on a guess — on the coordinator’s desk and in the staff app both.", tag: "Shipped" }, { t: "Bulk import from existing spreadsheets", b: "The staff register, catalogue, locations and opening stock come in from CSV, each with a template to fill.", tag: "Shipped" }, { t: "Android app", b: "Two of them: the counter app for the linen room, and a staff app for the people who wear the uniform. Both are built and the Play listings are in review.", tag: "In review" }, ]; function Row({ n, t, b, tag, accent }: { n: string; t: string; b: string; tag: string; accent?: boolean }) { return (
{n}

{t}

{b}

{tag}
); } export default function Roadmap() { return ( <> {PLANNED.map((it, i) => )}
Since this list was written
{DONE.map((it) => )}

Something you need that isn’t on this list?

The list came from real linen rooms asking. Yours can change the order of it.
Tell me what’s missing
); }