Rising Tide Developers
Reference

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.

SlugDisplay nameDomainLabelNotes
haikuHaikuPAGEEdition5-7-5 syllable structure
tankaTankaPAGEEdition5-7-5-7-7 syllable structure
sonnetSonnetPAGEEdition14 lines, Shakespearean form
basic-pageBasic PagePAGEEditionFree-form writing (the default type)
openletterOpen LetterPAGEEditionFree-form writing addressed to a recipient
ticketTicketEVENTTicketEvent admission
bracketBracketPREDICTIONBracketOne entry per participant
game-lobbyGame LobbyGAMEMatchA 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 example TEMPLATE_ARTIST + CREATOR).
  • Writing forms (haiku, tanka, sonnet, basic-page, openletter) add form-shape keys read by the composer: contentShape ("lines" or "freeform"), plus lines / syllables / charLimits / lineLabels for line-based forms, maxCharacters for freeform, and requiresRecipient for openletter.

Content shapes

A PAGE product's content is a JSON object whose fields follow its product type:

Slugcontent fields
haikuline1, line2, line3 (up to 50 characters each)
tankaline1 to line5 (up to 50, 50, 50, 80 and 80 characters)
sonnetline1 to line14 (up to 80 characters each)
basic-pagecontent (up to 1500 characters before escaping)
openlettercontent (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.