import Link from "next/link"; import { Band, CtaBand, SiteNav, body, h2, h3, kicker, wrap } from "@/components/site"; import { plansLive } from "@/lib/plans-live"; export const metadata = { title: "Who built it", description: "ThreadCount was written by a hospital uniform coordinator for their own linen room, because the workbook stopped being enough.", alternates: { canonical: "/about" }, }; const STORY = [ "A hospital linen room runs on memory. Who has how many sets, which sizes are short, what was ordered three weeks ago and never arrived, which ward should be paying for it. Most of that lives in a workbook, a notepad, and the coordinator’s head.", "That works until it doesn’t. A staff member insists they were never issued a jacket. Finance asks why one ward’s spend doubled. A size runs out on a Monday morning and nobody knew it was low on Friday.", "ThreadCount was built to answer those questions from a record rather than from recollection. Every garment is scanned to a named person, every issue starts its own replacement order, and every dollar lands on the ward that wore it. The features exist because each one solved a real morning at a real counter.", "It’s free. No licence, no per-device charge, no sales process. If it’s useful to your room, use it.", ]; // The last paragraph and the last principle once plans are live: the software is still free, and // the sentence now says what is and isn't. Everything above them is unchanged — see lib/plans-live.ts. const STORY_LAST_LIVE = "The software is free — run it yourself and it costs nothing. Hosting it for you is what costs money, and a small room is hosted free. If it’s useful to your room, use it."; const PRINCIPLE_LAST_LIVE = { t: "Free to run, and portable", b: "The code is published, there is no lock-in, and paying for hosting never locks anything else. Every report and register exports as CSV, and one backup file takes the whole facility. Leaving is as easy as arriving." }; const PRINCIPLES = [ { t: "Built at the counter", b: "Nothing in the product exists because it demonstrates well. Every screen was written to survive a queue of nurses at eight in the morning." }, { t: "No paperwork tax", b: "The finance outputs are assembled from data already being entered. There’s no second system to keep fed." }, { t: "Free, and portable", b: "No licence and no lock-in. Every report and register exports as CSV, and one backup file takes the whole facility. Leaving is as easy as arriving." }, ]; export default async function About() { const live = await plansLive(); const story = live ? [...STORY.slice(0, -1), STORY_LAST_LIVE] : STORY; const principles = live ? [...PRINCIPLES.slice(0, -1), PRINCIPLE_LAST_LIVE] : PRINCIPLES; return ( <> {/* Half-and-half hero: type left, photograph right behind an ink border. */}
Who built it

One coordinator, one linen room, one spreadsheet too many.

ThreadCount was written by the person doing the job, for the job. It exists because the workbook stopped being enough.

{/* eslint-disable-next-line @next/next/no-img-element */}
The story
{story.map((p, i) =>

{p}

)}
Every feature here started as an annoyance, not a roadmap item.
{principles.map((p, i) => (

{p.t}

{p.b}

))}

If your linen room, aged-care home or clinic has the same problem, come and say so.

Get in touch
); }