Files
threadcount-community/docs/manual/AUTHORING.md
T
ThreadCount 8c86c988c1 ThreadCount Community edition
Uniform stock management for healthcare linen rooms: the coordinator app, the phone counter and the staff app, for your own server. Built from 2d04e45 on 2026-09-15. Licensed under the Functional Source License (FSL-1.1-ALv2).
2026-09-16 04:04:31 +10:00

120 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Writing the ThreadCount manual
The manual is the set of Markdown files under `docs/manual/<section>/<slug>.md`. The website
renders them at `/docs/<section>/<slug>` and the app renders the same files at
`/app/help/<section>/<slug>`, so one file serves both. The Community edition ships the folder.
## The one rule
**Every sentence must be true of the code as it is today.** Read the screen, the API route and
the library before you describe them. If you cannot verify a behaviour by reading the code, leave
it out. Never describe a feature that is planned, and never soften a limitation. Where a figure
comes from a constant (`lib/plan.ts`, `lib/sets.ts`), quote the constant's value.
## Front matter
```
---
title: Issue a garment
section: counter
order: 1
summary: Scan the garment, pick the person, record it. What is written, and what the counter refuses.
screen: Counter
role: Admin or Issuer
keywords: issue, scan, barcode, six sets, refusal, slip
---
```
- `section`: one of `start`, `counter`, `stock`, `people`, `reports`, `apps`, `account`,
`selfhost`, `reference`. Fixed list; the tree is built from it.
- `order`: position within the section, from 1.
- `summary`: one sentence, shown in the tree's search results and on the section index.
- `screen`: the app menu label or path the page is about, e.g. `Settings Data & audit log`. Omit if none.
- `role`: who can do it. One of `Admin`, `Admin or Issuer`, `Staff`, `Anyone`, `Self-hosting admin`.
- `keywords`: comma-separated words a coordinator would type into search. Include the words the
screens use AND the words a newcomer would use ("stocktake, count, audit").
## Body
Plain Markdown, this subset only:
- `## Heading` for sections. They are numbered automatically and listed in the rail. Four to
seven per page. No `#` or `###`.
- Paragraphs. Short. One idea each.
- `- item` bullet lists and `1. step` numbered lists (steps: bold the action first,
`1. **Scan the garment.** Then…`).
- Tables with `|`, a header row, then `|---|` then rows. Keep to four columns.
- Fenced code blocks with three backticks for commands and file contents.
- Callouts: a blockquote whose first line is a bold label.
`> **In plain terms** One sentence.` (navy: commentary)
`> **Careful** One sentence.` (red: a way to lose data or lock yourself out)
`> **In ThreadCount** …` is only for the guides; do not use it here.
- Inline `code` for settings, file names and values. Screen paths in code too: `Settings Data & audit log`.
- Links: `[text](/docs/stock/barcodes)` to other manual pages, `[text](/pricing)` to the site.
- **Bold** sparingly, never for whole sentences. No italics, no emoji, no headers inside callouts.
## Voice
- Australian English. Second person for the reader ("you issue"), the product by name or "it".
- Say what the screen does, then what it writes, then what it refuses and why. The
"What is written" table (Record · Change · Undo) belongs on every page about an action.
- Numbers as digits. Times as `07:40`. Dates as `13 Sep 2026`.
- No marketing, no adjectives about the product, no "simply", no "just". The manual explains.
- Sample data: the fictional **Riverside General** hospital, cost centres `RGH-4010` style,
suppliers **Northline Workwear** and **Harbour Embroidery** only, people like A. Hassan and
P. Nair, addresses at `example.com`. Never a real hospital, health service, supplier or person.
## Where to look
| Area | Read |
|---|---|
| Screens | `app/app/<screen>/page.tsx` and the components they import |
| Mutations | `app/api/mutate/route.ts` and `lib/ops.ts` (the `op` names and their checks) |
| Rules | `lib/sets.ts` (entitlement), `lib/plan.ts` (plans, limits), `lib/switches.ts` |
| Data | `prisma/schema.prisma` |
| Imports | `lib/csv.ts`, `app/api/import*`, `Settings Data & audit log` in `components/settings/DataAudit.tsx` |
| Phone apps | `app/m/**` (counter app), `app/my/**` (staff app), `lib/nativescan.ts` |
| Self-hosting | `README.md`, `docker-compose.yml`, `.env.example`, `Dockerfile`, `lib/edition.ts` |
| Billing, SSO, users | `lib/billing.ts`, `components/PlanTab.tsx`, `lib/sso.ts`, `components/SsoSettings.tsx`, `components/TwoFactor.tsx` |
| What each email says | `lib/accountmail.ts`, `lib/approvallink.ts`, `lib/billing-mail.cjs` |
## Hard constraints
- Never name a real hospital, health service, government health department or uniform supplier,
not even as an example. Use Riverside General, Northline Workwear, Harbour Embroidery.
`scripts/check-identity.sh` and the manual linter both fail a page that does.
- No personal email addresses. Product addresses only: hello@, support@, privacy@,
security@threadcount.tech.
- Never copy a secret, key or token into a page.
- Read-only for these files, never edit them: `app/m/**`, `app/my/**`, `components/screens/**`,
`components/m.tsx`, `components/my.tsx`, `components/staffui.tsx`, `components/staffnav.tsx`,
`components/MAuth.tsx`, `components/MPerson.tsx`, `components/MScan.tsx`, `androidshell/**`,
`staffshell/**`.
- Write only inside your own section folder. Do not run git, the dev server or a build.
- Length: 400 to 900 words a page, 4 to 7 `##` sections. The CSV reference may run to 1400.
## Every page in the manual
Link only to these. A link to anything else is a broken link.
| Section | Slugs, in order |
|---|---|
| `start` | threadcount-in-one-page, set-up-in-an-afternoon, the-two-roles, your-first-order |
| `counter` | issue-a-garment, exchanges-and-returns, requests-from-staff, manager-approvals, pickup-call-list, delivery-rounds, slips-and-signatures |
| `stock` | catalogue-sizes-and-cuts, barcodes, reorder-levels, stocktakes, order-list, receiving-and-back-orders, suppliers |
| `people` | staff-register, groups-and-routes, entitlement-rule, managers, deactivating-and-deleting |
| `reports` | the-nine-reports, cost-centres, journal-export, month-end-pack |
| `apps` | counter-app, staff-app, scanning-and-browsers |
| `account` | users, two-factor, single-sign-on, plan-and-billing, export-and-backup, delete-an-account |
| `selfhost` | install, first-run, updating, backups, email, configuration-reference |
| `reference` | csv-templates, glossary, keyboard-and-scanner |
A manual link is `/docs/<section>/<slug>`. Site pages you may also link: `/pricing`, `/compare`,
`/security`, `/security/questionnaire`, `/sla`, `/privacy`, `/terms`, `/delete-account`,
`/changelog`, `/demo`, `/about#contact`, and the guides under `/guides/`.
## When you finish
Reply with the files written, then a short list of anything you could not verify in the code and
therefore left out. That list is how the manual's gaps get found, so be specific.