Contribute
This catalog grows by people who have measured a real lock writing down what they found. The most valuable contribution is not a big one — it is one lock family from a country we have not covered, with numbers and a photo.
The fastest contribution
Open an issue with:
- Country and city
- What the door is (timber, uPVC, metal gate, glass)
- Backset, centre distance, faceplate size, door thickness
- A photo of the door edge with a ruler in frame
- Whether the door is fire-rated
That is enough for a maintainer to create the record. If you would rather write the record yourself, the instructions are below.
Repository layout
content/
site.json site name, navigation, languages, footer text
i18n/terms.json shared bilingual terminology — add a term once
pages/<lang>/*.md long-form pages, one folder per language
catalog/
lock-families/*.json one file per lock family
standards.json all standards in one file
retrofit-architectures.json
smart-locks.json reference devices
decision-tree.json the identification wizard's questions
Adding a lock family is adding one JSON file. Nothing else needs editing — the index pages, the search index, the sitemap and llms.txt all regenerate from it.
The lock family schema
{
"id": "kebab-case-unique-id",
"status": "verified | needs-review",
"regions": ["Country", "..."],
"title": { "en": "...", "zh": "..." },
"summary": { "en": "...", "zh": "..." },
"anatomy": { "en": ["..."], "zh": ["..."] },
"measurements": [
{
"key": "backset",
"typical": "55 mm, 60 mm",
"tolerance": "±1 mm",
"how": { "en": "Door edge to keyhole centre.", "zh": "..." }
}
],
"measureOrder": ["backset", "centreDistance"],
"standards": ["din-18251"],
"retrofit": { "architectures": ["motor-on-thumbturn"], "notes": { "en": "...", "zh": "..." } },
"faq": { "en": [{ "q": "...", "a": "..." }], "zh": [] },
"sources": [{ "title": "...", "url": "https://..." }]
}
The key values in measurements must exist in content/i18n/terms.json under measurements — that is how the label gets translated once instead of per record. npm run check fails the build if you use a key that does not exist.
Status is not optional
- verified — the numbers were cross-checked against a published source, which is linked in
sources. Datasheets, standard documents and manufacturer specifications count. A forum post does not. - needs-review — anything else, including anything you measured yourself but nobody has confirmed. This is published with a visible warning, and it is much better than the record not existing.
Never mark something verified without a link. The whole value of this site is that a reader can check it.
Writing for the two audiences
Every record is read by a homeowner and by a mechanical engineer, often in that order. Keep the summary in plain language and the measurements precise. If a number matters, give the tolerance — a dimension without a tolerance is not a specification.
Translations
Content is bilingual (English and 中文) today. The structure is designed to grow: data lives in JSON with per-language fields, and shared vocabulary lives in terms.json, so machine translation later can work on terminology rather than prose.
If you add a language, create content/pages/<lang>/ and add the language to content/site.json under languages, navigation and the UI strings. Nothing in the build needs changing.
Running it locally
node build.mjs # build to _site/
node build.mjs --watch # rebuild on change
node serve.mjs # serve _site/ on http://localhost:8080
npm run check # syntax + referential integrity of the catalog data
No dependencies to install. Node 20 or newer.
What is most wanted right now
- Africa, South America, the Middle East — no lock families at all yet
- Australia — the standard designation needs confirming
- Japan — case dimensions and the applicable JIS reference
- Photos with rulers — for every family, so the identification wizard can show them
- Adapter teardowns — measured clamp ranges and turn-piece profiles, which no manufacturer publishes