Tabular Option Matrices & Datasets (.airpds)
In Aircada, customizable options (materials, dimensions, colors, finishes) are stored in tabular dataset matrices (.airpds files). Each row represents a selectable option containing an ID, display name, material/mesh asset references, thumbnail preview, and pricing offset.
Datasets provide relational separation: rather than hardcoding options into UI components or 3D operators, components query datasets dynamically via useAirDataset(datasetId).
This architecture allows 3D designers and marketing teams to update colors, add new seasonal variants, or adjust price add-ons in .airpds spreadsheets without altering a single line of TypeScript code.
- ### 1. Canonical IParsedDataset Specification
- Every '.airpds' dataset file generated on disk MUST adhere strictly to the 'IParsedDataset' interface validated by 'DatasetValidator.validate(dataset)'. It encapsulates 'datasetInfo' (with 'format: DatasetFormatType.AIRPDS', 'displayName', and 'schema.fields') and an 'items' array where each item has an 'id' and a 'values' object.
- ### 2. PropertySystemType Schema Typing
- Column fields in 'datasetInfo.schema.fields' must be typed with valid 'PropertySystemType' enums: 'STRING', 'FLOAT', 'INT', 'COLOR', 'BOOL', or 'MEDIA_ITEM'. Loose types like 'number' or 'string' are compiled into their respective PropertySystemType enums before file generation.
- ### 3. Pre-Flight Manifestation Validation
- During Phase 2 of '/manifest-from-planner', tabular datasets from 'planner.manifest.json' ('columns', 'rows') are compiled into 'IParsedDataset' and validated against 'DatasetValidator.validate(dataset)'. Files with schema discrepancies or un-typed columns fail fast before the dev server runs.
- ### 4. Pricing Model Integration (.airpm)
- Pricing models adhere strictly to the Stripped 1.02 format, referencing active datasets by 'datasetId' and setting 'defaultOptionId' to a valid row ID in the corresponding '.airpds' dataset.






