Product

The second DNA layer — what gets built. Split into three sub-layers (Core, API, UI) that can be authored independently.

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.
Stability: Experimental shape may change without notice Beta stabilizing; minor changes possible Stable safe to build on; changes follow semver Deprecated slated for removal; migrate off

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

FieldTypeRequiredDescription
namestringyesThe PascalCase name of the resource.
descriptionstringA human-readable explanation of what this resource represents.
resourcestringThe Operational Resource this product resource maps from. Defaults to matching `name` when omitted.
fieldsfield[]The fields that describe this resource, mapped from Attributes.
actionsaction[]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"
    }
  ]
}
        

Related: Action · Operation · Field

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

FieldTypeRequiredDescription
namestringyesThe PascalCase name of the action.
descriptionstringA human-readable explanation of what this action does.
actionstringThe 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.
inputfield[]The fields required as input to perform this action.
outputfield[]The fields returned as a result of this action.

Example


          {
  "name": "Apply",
  "description": "Submit a new loan application.",
  "action": "Apply",
  "method": "POST"
}
        

Related: Resource · Operation

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

FieldTypeRequiredDescription
resourcestringyesThe Resource this operation belongs to.
actionstringyesThe Action to be performed on the Resource.
namestringThe operation expressed as Resource.Action.
descriptionstringA human-readable explanation of what this operation does.
changesobject[]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"
    }
  ]
}
        

Related: Resource · Action

Field Stable

A Field is an input or display element within a Page or Block, mapped from an Operational Attribute.

Fields

FieldTypeRequiredDescription
namestringyesThe snake_case name of the field, matching its Attribute name.
labelstringThe human-readable label shown in the UI.
descriptionstringA human-readable explanation of what this field represents.
requiredbooleanWhether this field is required in a form context.
readonlybooleanWhen true, the field is display-only and cannot be edited.
valuesstring[]Allowed values when type is 'enum'.
attributestringThe Operational Attribute this field maps from.
fieldsfield[]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

FieldTypeRequiredDescription
method"GET" | "POST" | "PUT" | "PATCH" | "DELETE"yesThe HTTP method.
pathstringyesThe URL path pattern for this endpoint.
operationstringyesThe Operation this endpoint maps from, expressed as Resource.Action.
descriptionstringA human-readable explanation of what this endpoint does.
paramsparam[]Path, query, or header parameters for this endpoint.
requestschemaThe request body schema, if applicable.
responseschemaThe success response body schema.

Example


          {
  "method": "POST",
  "path": "/loans",
  "operation": "Loan.Apply",
  "description": "Submit a new loan application."
}
        

Related: Namespace · Param · Schema

Namespace Stable

A Namespace groups Resources under a shared API path prefix. It maps from an Operational Domain.

Fields

FieldTypeRequiredDescription
namestringyesThe PascalCase name of the namespace.
pathstringyesThe URL path prefix for all resources in this namespace.
descriptionstringA human-readable explanation of what this namespace covers.
domainstringThe Operational Domain this namespace maps from.
resourcesstring[]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

FieldTypeRequiredDescription
namestringyesThe snake_case name of the parameter.
in"path" | "query" | "header"yesWhere the parameter appears in the HTTP request.
descriptionstringA human-readable explanation of what this parameter represents.
requiredbooleanWhether this parameter must be present in the request.
valuesstring[]Allowed values when type is 'enum'.
attributestringThe 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

FieldTypeRequiredDescription
namestringyesThe PascalCase name of the schema.
descriptionstringA human-readable explanation of what this schema represents.
fieldsfield[]yesThe fields that make up this schema.
resourcestringThe 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"
      ]
    }
  ]
}
        

Related: Endpoint · Param

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

FieldTypeRequiredDescription
namestringyesThe PascalCase name of the layout.
descriptionstringA human-readable explanation of when and how this layout is used.
featuresobjectFeature flags controlling which chrome elements appear in the layout shell.
tenantsobject[]Available tenants/organizations for the tenant picker. First entry is the default.
navigationobject[]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.
themeobjectVisual theme configuration for white-labeling. Colors map to CSS custom properties consumed by Tailwind utilities. When omitted, a sensible default theme is generated.
brandobjectBrand information shown in marketing and sidebar headers.
heroobjectMarketing layout hero section shown above the routed page content on the root route. Omit to suppress the hero.
footerobjectMarketing layout footer content.
pagesstring[]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"
  ]
}
        

Related: Page · Block

Page Stable

A Page is a discrete screen representing a product Resource. It contains one or more Blocks and maps from a Resource.

Fields

FieldTypeRequiredDescription
namestringyesThe PascalCase name of the page.
resourcestringyesThe Resource this page represents.
descriptionstringA human-readable explanation of what this page shows.
blocksblock[]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"
    }
  ]
}
        

Related: Layout · Route · Block

Route Stable

A Route is the URL pattern that resolves to a Page. It maps a path to a Resource page.

Fields

FieldTypeRequiredDescription
pathstringyesThe URL path pattern for this route.
pagestringyesThe Page name this route resolves to.
descriptionstringA human-readable explanation of what this route represents.
layoutstringThe Layout name to wrap this route's page in.
protectedbooleanWhen 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

FieldTypeRequiredDescription
namestringyesThe PascalCase name of the block.
descriptionstringA human-readable explanation of what this block does.
operationstringThe Operation this block maps from, expressed as Resource.Action.
fieldsfield[]The Fields shown or collected in this block.

Example


          {
  "name": "LoanList",
  "type": "list",
  "operation": "Loan.List"
}
        

Related: Layout · Page