Content types and records
A type says which fields a page must have, and every surface checks it.
In the adminTypesData
A type is a flat list of fields. Bind a page or a collection to it and every write must satisfy it, from the admin, the command line, the API and the agent interface, with no way to write around it.
Define a type and bind pages to it

quilzo type example > product.json # a definition you can edit
quilzo type add product.json
quilzo type bind PAGE product
quilzo type check # validate every bound page
Keep records in collections

| To | Run |
|---|---|
| List collections | quilzo records collections |
| Query | quilzo records list products --where availability=low_stock |
| Add one | quilzo records add products field=value |
| Import many in one commit | quilzo records import products rows.json |
| Require a type | quilzo type bind-collection products product |
| Let somebody work on one collection | quilzo auth grant tech author --on /@data/samples |
Who may read and write a collection
Each collection is checked as itself, at /@data/NAME; /@data is every collection. A role on the whole site covers them all. A role on a section of pages covers none, even a section with the same name as a collection: author on /samples writes pages under /samples, and author on /@data/samples writes the samples. The Data screen, quilzo records, the agent interface and the content API all ask the same question, so somebody granted one collection sees that one and is not told the others exist.