Overrides live in one organizations column under two namespaces — a bare key for a usage row, a mat: prefix for a catalogue material. Only rows the builder actually edited are written. Clearing both fields removes the override entirely, so 'Reset' genuinely means reset. Saving the catalogue reads, keeps and rewrites the usage rows so the two never clobber each other.
Also called: price overrides · reset to default price · my yard's prices
- 1fetchMaterialCatalogPrices filters the column for mat:-prefixed keys
- 2saveMaterialCatalogPrices does a read-modify-write so usage rows survive untouched
- 3An entry with neither cost nor price is dropped from the payload
- 4mergeMaterialPrices layers saved values over the shipped defaults and keeps any extra keys a tenant added
From the comment: 'ONLY EDITED ROWS ARE STORED. 252 materials × two numbers is a lot of JSON to carry for a tenant who changed four of them, and storing the untouched ones would freeze today's audited defaults into their account — so re-running the extractor could never improve their numbers.' The namespace choice avoided a migration: 'One column, two namespaces… That avoids a migration for what is the same question — "what does this cost here" — and keeps a tenant's edits in one place.'
- Editing four prices should not freeze 248 others
- Two price surfaces overwriting each other's saves
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →