Product DNA describes what gets built on top of the Operational layer. It is split into three sub-layers that can be authored independently:
- Core — materializes Operational concepts into product primitives.
- API — the REST surface.
- UI — the web surface.
Core
Product-layer projections of Operational primitives — Resource, Action, Operation, Field.
Resource Stable
A Resource is the product-level entity — it maps from an Operational Resource and is realized as a Page in UI and a REST resource in API.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | The PascalCase name of the resource. |
| description | string | — | A human-readable explanation of what this resource represents. |
| resource | string | — | The Operational Resource this product resource maps from. Defaults to matching `name` when omitted. |
| fields | field[] | — | The fields that describe this resource, mapped from Attributes. |
| actions | action[] | — | The actions that can be performed on this resource. |
Example
{
"name": "Loan",
"description": "A financial loan visible to borrowers and underwriters.",
"resource": "Loan",
"fields": [
{
"name": "amount",
"label": "Amount",
"type": "number",
"required": true
},
{
"name": "status",
"label": "Status",
"type": "enum",
"values": [
"pending",
"active",
"repaid",
"defaulted"
]
}
],
"actions": [
{
"name": "Apply",
"action": "Apply"
},
{
"name": "Approve",
"action": "Approve"
}
]
}
Action Stable
An Action is a product-level operation — it maps from an Operational Action and is realized as a UI trigger and an API endpoint action.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | The PascalCase name of the action. |
| description | string | — | A human-readable explanation of what this action does. |
| action | string | — | The Operational Action this product action maps from. Defaults to matching `name` when omitted. |
| method | "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | — | The HTTP method for this action when realized as an API endpoint. |
| input | field[] | — | The fields required as input to perform this action. |
| output | field[] | — | The fields returned as a result of this action. |
Example
{
"name": "Apply",
"description": "Submit a new loan application.",
"action": "Apply",
"method": "POST"
}
Operation Stable
An Operation is a Resource:Action pair — the unit of user/system interaction at the product level. Product Core Operations are surface projections of Operational Operations; the field name is the same across both layers.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| resource | string | yes | The Resource this operation belongs to. |
| action | string | yes | The Action to be performed on the Resource. |
| name | string | — | The operation expressed as Resource.Action. |
| description | string | — | A human-readable explanation of what this operation does. |
| changes | object[] | — | State mutations applied to the target Resource when this operation completes. Carried through from the operational layer. |
Example
{
"resource": "Loan",
"action": "Apply",
"name": "Loan.Apply",
"description": "A borrower submits a loan application.",
"changes": [
{
"attribute": "loan.status",
"set": "under_review"
}
]
}
Field Stable
A Field is an input or display element within a Page or Block, mapped from an Operational Attribute.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | The snake_case name of the field, matching its Attribute name. |
| label | string | — | The human-readable label shown in the UI. |
| description | string | — | A human-readable explanation of what this field represents. |
| required | boolean | — | Whether this field is required in a form context. |
| readonly | boolean | — | When true, the field is display-only and cannot be edited. |
| values | string[] | — | Allowed values when type is 'enum'. |
| attribute | string | — | The Operational Attribute this field maps from. |
| fields | field[] | — | Nested fields when type is 'object'. Each entry is itself a Field, recursively. |
Example
{
"name": "amount",
"label": "Amount",
"type": "number",
"required": true,
"attribute": "amount"
}
Related: Resource
API
REST surface — Endpoint, Namespace, Param, Schema.
Endpoint Stable
An Endpoint is a single HTTP operation: method + path + request + response. It maps from an Operation.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| method | "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | yes | The HTTP method. |
| path | string | yes | The URL path pattern for this endpoint. |
| operation | string | yes | The Operation this endpoint maps from, expressed as Resource.Action. |
| description | string | — | A human-readable explanation of what this endpoint does. |
| params | param[] | — | Path, query, or header parameters for this endpoint. |
| request | schema | — | The request body schema, if applicable. |
| response | schema | — | The success response body schema. |
Example
{
"method": "POST",
"path": "/loans",
"operation": "Loan.Apply",
"description": "Submit a new loan application."
}
Namespace Stable
A Namespace groups Resources under a shared API path prefix. It maps from an Operational Domain.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | The PascalCase name of the namespace. |
| path | string | yes | The URL path prefix for all resources in this namespace. |
| description | string | — | A human-readable explanation of what this namespace covers. |
| domain | string | — | The Operational Domain this namespace maps from. |
| resources | string[] | — | The Resources grouped under this namespace. |
Example
{
"name": "Lending",
"path": "/lending",
"description": "Loan lifecycle endpoints.",
"domain": "acme.finance.lending",
"resources": [
"Loan",
"Payment"
]
}
Related: Endpoint
Param Stable
A Param is a path, query, or header parameter on an API Endpoint, mapped from an Operational Attribute.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | The snake_case name of the parameter. |
| in | "path" | "query" | "header" | yes | Where the parameter appears in the HTTP request. |
| description | string | — | A human-readable explanation of what this parameter represents. |
| required | boolean | — | Whether this parameter must be present in the request. |
| values | string[] | — | Allowed values when type is 'enum'. |
| attribute | string | — | The Operational Attribute this param maps from. |
Example
{
"name": "loan_id",
"in": "path",
"type": "string",
"required": true,
"attribute": "id"
}
Related: Endpoint
Schema Stable
A Schema is a named request/response data shape used by API Endpoints. It maps from a Resource and its Fields.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | The PascalCase name of the schema. |
| description | string | — | A human-readable explanation of what this schema represents. |
| fields | field[] | yes | The fields that make up this schema. |
| resource | string | — | The Resource this schema maps from, if applicable. |
Example
{
"name": "LoanResponse",
"description": "Loan document returned by GET /loans/:id.",
"resource": "Loan",
"fields": [
{
"name": "id",
"type": "string"
},
{
"name": "amount",
"type": "number"
},
{
"name": "status",
"type": "enum",
"values": [
"pending",
"active",
"repaid"
]
}
]
}
UI
Web surface — Layout, Page, Route, Block.
Layout Stable
A Layout is the structural shell a set of Pages lives within. It defines the top-level UI frame: sidebar, full-width, split-panel, etc.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | The PascalCase name of the layout. |
| description | string | — | A human-readable explanation of when and how this layout is used. |
| features | object | — | Feature flags controlling which chrome elements appear in the layout shell. |
| tenants | object[] | — | Available tenants/organizations for the tenant picker. First entry is the default. |
| navigation | object[] | — | Hierarchical sidebar navigation structure. Each item is either a nav group with children or a direct nav link. When omitted, the sidebar falls back to a flat list derived from routes. Group labels must be unique. |
| theme | object | — | Visual theme configuration for white-labeling. Colors map to CSS custom properties consumed by Tailwind utilities. When omitted, a sensible default theme is generated. |
| brand | object | — | Brand information shown in marketing and sidebar headers. |
| hero | object | — | Marketing layout hero section shown above the routed page content on the root route. Omit to suppress the hero. |
| footer | object | — | Marketing layout footer content. |
| pages | string[] | — | The Page names that use this layout. |
Example
{
"name": "AdminLayout",
"type": "sidebar",
"description": "Authenticated admin shell with sidebar navigation.",
"features": {
"sidebar": true,
"profileDropdown": true
},
"pages": [
"LoanList",
"LoanDetail",
"LoanApply"
]
}
Page Stable
A Page is a discrete screen representing a product Resource. It contains one or more Blocks and maps from a Resource.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | The PascalCase name of the page. |
| resource | string | yes | The Resource this page represents. |
| description | string | — | A human-readable explanation of what this page shows. |
| blocks | block[] | — | The named Blocks that make up this page, in order. |
Example
{
"name": "LoanDetail",
"resource": "Loan",
"description": "Displays the full details of a single loan.",
"blocks": [
{
"name": "LoanHeader",
"type": "detail",
"operation": "Loan.View"
},
{
"name": "LoanActions",
"type": "actions",
"operation": "Loan.Approve"
}
]
}
Route Stable
A Route is the URL pattern that resolves to a Page. It maps a path to a Resource page.
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| path | string | yes | The URL path pattern for this route. |
| page | string | yes | The Page name this route resolves to. |
| description | string | — | A human-readable explanation of what this route represents. |
| layout | string | — | The Layout name to wrap this route's page in. |
| protected | boolean | — | When true, the route requires authentication. |
Example
{
"path": "/loans",
"page": "LoanList",
"layout": "AdminLayout",
"protected": true
}
Related: Page
Block Stable
A Block is a named, reusable section within a Page. It maps from an Operation and has a structural type (list, detail, form, actions, etc.).
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | The PascalCase name of the block. |
| description | string | — | A human-readable explanation of what this block does. |
| operation | string | — | The Operation this block maps from, expressed as Resource.Action. |
| fields | field[] | — | The Fields shown or collected in this block. |
Example
{
"name": "LoanList",
"type": "list",
"operation": "Loan.List"
}