Product Types Reference
Complete catalog of Rising Tide Protocol product types with domain, configuration, and rendering details.
Complete product type catalog
Each ProductType is a DB-backed catalog entry. label is the noun used for a minted instance.
| Slug | Display name | Domain | Label | Notes |
|---|---|---|---|---|
haiku | Haiku | PAGE | Edition | 5-7-5 syllable structure |
tanka | Tanka | PAGE | Edition | 5-7-5-7-7 syllable structure |
sonnet | Sonnet | PAGE | Edition | 14 lines, Shakespearean form |
basic-page | Basic Page | PAGE | Edition | Free-form writing (the default type) |
openletter | Open Letter | PAGE | Edition | Free-form writing addressed to a recipient |
ticket | Ticket | EVENT | Ticket | Event admission |
bracket | Bracket | PREDICTION | Bracket | One entry per participant |
game-lobby | Game Lobby | GAME | Match | A table hosting a series of two-player matches; created from the smart-lobby recipe |
ProductType shape
interface ProductType {
id: number;
slug: string;
displayName: string;
domain: ProductDomain; // "PAGE" | "EVENT" | "PREDICTION" | "GAME"
label: string; // instance noun - "Edition", "Ticket", "Bracket"
isActive: boolean;
isDefault: boolean; // basic-page is the default PAGE type
sortOrder: number;
config: Record<string, unknown>;
createdAt: string;
updatedAt: string;
}Config
config is a domain-specific JSON blob, not a fixed schema. Its keys vary by type:
- All types carry
defaultContributions- the protocol-routed contribution roles derived at creation (for exampleTEMPLATE_ARTIST+CREATOR). - Writing forms (
haiku,tanka,sonnet,basic-page,openletter) add form-shape keys read by the composer:contentShape("lines"or"freeform"), pluslines/syllables/charLimits/lineLabelsfor line-based forms,maxCharactersfor freeform, andrequiresRecipientforopenletter.
Content shapes
A PAGE product's content is a JSON object whose fields follow its product type:
| Slug | content fields |
|---|---|
haiku | line1, line2, line3 (up to 50 characters each) |
tanka | line1 to line5 (up to 50, 50, 50, 80 and 80 characters) |
sonnet | line1 to line14 (up to 80 characters each) |
basic-page | content (up to 1500 characters before escaping) |
openletter | content (up to 1000 characters before escaping) and recipient, the salutation (up to 120 characters; blank reads as a generic salutation) |
Text that reaches the contract must be ASCII. Products outside the PAGE domain carry no free-form content: their shape is the domain's own create input (CreateEventInput, CreateBracketDraftRequest, CreateGameLobbyDraftRequest), and a bracket's bracketSize is 8, 16, 32, 64 or 68.
Stability guarantee
Product type slugs are stable identifiers. Once seeded, a slug will not be renamed or deleted.
const types = await rtClient.productTypes.list();Cross-domain enforcement
Product types are domain-scoped. Attempting to use a PAGE product type when creating an EVENT product is rejected with code INVALID_PRODUCT_TYPE_FOR_DOMAIN.