Overview
Obeya Cloud’s custom field system uses an Entity-Attribute-Value (EAV) pattern with typed storage columns for efficient querying. This page covers the database schema, column type definitions, rendering pipeline, and validation logic.Database Schema
Columns Table
Columns define the field type and configuration for a board:Values Table
Values store the actual data for each item-column pair:Column Type Registry
Each column type is registered with its storage mapping, validator, and renderer:Setting Values
ThesetValue procedure validates the input and writes to the appropriate storage column:
Rendering Pipeline
On the client, each column type has a Cell Renderer and an Editor:Formula columns use
FormulaCell for rendering but have no editor — their values are computed server-side whenever a dependent column’s value changes.Adding a New Column Type
To add a new custom field type:- Add the type definition in
packages/api/src/columns/registry.ts - Create a cell renderer in
apps/web/src/components/columns/ - Create an editor component
- Add the type to the column creation UI
- Add migration if new storage patterns are needed
- Update the search indexer if the field should be searchable