mdxui

Noun Schemas

Domain component schemas for business entities and concepts

Noun Schemas

Domain components represent entire business models and entities. These are higher-order abstractions that compose Sites, Apps, Agents, and Services into cohesive business domains.

Business Model Domains

Startup

Venture-backed technology company with product, billing, and analytics.

interface StartupProps extends BaseDomain {
  $type: 'Startup'
  revenueModel: 'subscription' | 'usage' | 'transaction' | 'commission' | 'licensing' | 'advertising' | 'freemium' | 'hybrid'
  funding?: {
    total: number
    currency: string  // ISO 4217 (USD, EUR)
    round?: 'pre_seed' | 'seed' | 'series_a' | 'series_b' | 'series_c' | 'growth'
    investors?: string[]
  }
  metrics?: {
    mrr?: number        // Monthly recurring revenue
    arr?: number        // Annual recurring revenue
    customers?: number
    users?: number
    growth?: number     // MoM growth percentage
    churn?: number      // Monthly churn rate
    ltv?: number        // Customer lifetime value
    cac?: number        // Customer acquisition cost
  }
  pricing?: PricingTier[]
  features?: Feature[]
  targetMarket?: {
    segment: 'b2b' | 'b2c' | 'b2b2c' | 'enterprise'
    verticals?: string[]
    personas?: string[]
  }
  integrations?: string[]
  social?: SocialLinks
}

Usage:

<Startup
  name="Acme Analytics"
  domain="acme.analytics"
  revenueModel="subscription"
  metrics={{ mrr: 50000, customers: 150 }}
/>

Agency

Professional services business with portfolio and client management.

interface AgencyProps extends BaseDomain {
  $type: 'Agency'
  specialty: string
  services: Service[]
  portfolio?: PortfolioProject[]
  testimonials?: Testimonial[]
  team?: TeamMember[]
  rateRange?: {
    min: number
    max: number
    currency: string
  }
  industries?: string[]
  awards?: Award[]
  certifications?: string[]
  process?: ProcessStep[]
}

Usage:

<Agency
  name="Design Studio"
  specialty="Brand Design"
  services={[
    { name: "Brand Identity", startingPrice: 5000 },
    { name: "Web Design", startingPrice: 8000 }
  ]}
/>

Marketplace

Multi-sided platform connecting buyers and sellers.

interface MarketplaceProps extends BaseDomain {
  $type: 'Marketplace'
  marketplaceType: 'product' | 'service' | 'rental' | 'digital' | 'nft' | 'b2b'
  fees: {
    buyerFee?: number       // Percentage
    sellerFee: number       // Percentage
    flatFee?: number
    currency: string
    processingFee?: number
  }
  categories?: Category[]
  verification?: {
    seller: Array<'email' | 'phone' | 'id' | 'bank' | 'business'>
    buyer: Array<'email' | 'phone' | 'id' | 'payment'>
  }
  paymentMethods: Array<'card' | 'bank' | 'paypal' | 'stripe' | 'crypto' | 'escrow' | 'cod'>
  escrow?: boolean
}

SaaS Product

Software-as-a-Service product offering.

interface SaaSProductProps extends BaseDomain {
  $type: 'SaaSProduct'
  category: string
  pricingModel: 'freemium' | 'subscription' | 'usage' | 'per_seat' | 'tiered'
  plans: PricingPlan[]
  features: Feature[]
  integrations?: Integration[]
  apiAvailable?: boolean
  uptime?: number         // SLA percentage
  dataResidency?: string[]
  compliance?: string[]   // SOC2, GDPR, HIPAA, etc.
}

Platform

Multi-tenant platform with apps, APIs, and ecosystems.

interface PlatformProps extends BaseDomain {
  $type: 'Platform'
  platformType: 'developer' | 'marketplace' | 'integration' | 'infrastructure'
  apps?: App[]
  apis?: API[]
  webhooks?: boolean
  sdks?: SDK[]
  pricing: PricingModel
  limits?: {
    freeRequests?: number
    rateLimits?: Record<string, number>
  }
  regions?: string[]
  partners?: Partner[]
}

Service Model Domains

Studio

Creative studio offering design, production, or development services.

interface StudioProps extends BaseDomain {
  $type: 'Studio'
  studioType: 'design' | 'video' | 'audio' | 'dev' | 'creative' | 'production'
  services: Service[]
  portfolio: PortfolioProject[]
  process?: ProcessStep[]
  team?: TeamMember[]
  tools?: string[]
  awards?: Award[]
}

Portal

Client or partner portal for account management.

interface PortalProps extends BaseDomain {
  $type: 'Portal'
  portalType: 'client' | 'partner' | 'vendor' | 'employee'
  features: string[]
  dashboards?: string[]
  integrations?: Integration[]
  sso?: boolean
  customBranding?: boolean
}

Directory

Searchable directory or listing platform.

interface DirectoryProps extends BaseDomain {
  $type: 'Directory'
  directoryType: 'business' | 'professional' | 'product' | 'service' | 'location'
  categories: Category[]
  searchFields: string[]
  filters?: Filter[]
  verified?: boolean
  claims?: boolean      // Can owners claim listings?
  reviews?: boolean
}

Consultancy

Consulting firm offering expert advisory services.

interface ConsultancyProps extends BaseDomain {
  $type: 'Consultancy'
  expertise: string[]
  services: Service[]
  consultants?: Consultant[]
  methodology?: string
  industries?: string[]
  caseStudies?: CaseStudy[]
  pricing?: {
    model: 'hourly' | 'project' | 'retainer' | 'value'
    range?: { min: number; max: number }
  }
}

Venture

Venture capital or investment firm.

interface VentureProps extends BaseDomain {
  $type: 'Venture'
  focus: string[]
  stages: Array<'pre_seed' | 'seed' | 'series_a' | 'series_b' | 'growth'>
  checkSize?: {
    min: number
    max: number
    currency: string
  }
  portfolio?: PortfolioCompany[]
  partners?: Partner[]
  thesis?: string
  regions?: string[]
}

Content Model Domains

Creator

Content creator (YouTuber, podcaster, influencer).

interface CreatorProps extends BaseDomain {
  $type: 'Creator'
  platforms: Array<'youtube' | 'podcast' | 'twitch' | 'tiktok' | 'instagram' | 'twitter'>
  content: {
    type: string
    frequency: string
    topics: string[]
  }
  audience?: {
    size: number
    demographics?: Record<string, unknown>
  }
  monetization?: Array<'ads' | 'sponsors' | 'memberships' | 'merch' | 'courses'>
  sponsors?: Sponsor[]
}

Publisher

Publishing house or media company.

interface PublisherProps extends BaseDomain {
  $type: 'Publisher'
  publications?: Publication[]
  topics?: string[]
  formats?: Array<'blog' | 'magazine' | 'book' | 'newsletter' | 'podcast'>
  distribution?: Array<'web' | 'email' | 'rss' | 'app'>
  monetization?: Array<'ads' | 'subscriptions' | 'sponsored' | 'affiliates'>
  authors?: Author[]
}

Newsletter

Email newsletter publication.

interface NewsletterProps extends BaseDomain {
  $type: 'Newsletter'
  frequency: 'daily' | 'weekly' | 'biweekly' | 'monthly'
  topics: string[]
  subscribers?: number
  openRate?: number
  clickRate?: number
  pricing?: 'free' | 'paid' | 'freemium'
  platform?: string
  archives?: boolean
}

Community Model Domains

Community

Online community or membership platform.

interface CommunityProps extends BaseDomain {
  $type: 'Community'
  communityType: 'open' | 'invite' | 'paid' | 'token_gated'
  platforms: Array<'discord' | 'slack' | 'circle' | 'custom'>
  members?: number
  channels?: Channel[]
  events?: Event[]
  roles?: Role[]
  monetization?: Array<'membership' | 'events' | 'courses' | 'sponsor'>
}

DAO

Decentralized autonomous organization.

interface DAOProps extends BaseDomain {
  $type: 'DAO'
  governance: {
    token: string
    votingMechanism: 'token' | 'reputation' | 'quadratic' | 'conviction'
    quorum?: number
    threshold?: number
  }
  treasury?: {
    value: number
    currency: string
    assets?: Asset[]
  }
  proposals?: Proposal[]
  members?: number
  blockchain?: string
}

Base Domain

All domain components extend the base domain schema:

interface BaseDomain {
  $id: string           // Business URI identifier
  name: string          // Business or brand name
  domain: string        // Primary web domain
  tagline?: string      // One-line description
  description?: string  // Extended description
  logo?: string         // Logo image URL
  favicon?: string      // Favicon URL
  colors?: {
    primary: string
    secondary?: string
    accent?: string
  }
  stage?: 'idea' | 'mvp' | 'seed' | 'growth' | 'scale' | 'mature' | 'exit'
  founded?: number      // Year founded
  legalEntity?: 'sole_prop' | 'llc' | 'corp' | 'nonprofit' | 'coop'
  location?: string     // Primary business location
  teamSize?: number
}

Common Types

PricingTier

interface PricingTier {
  name: string
  price: number
  frequency: 'one_time' | 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'annual' | 'custom'
  features: string[]
  highlighted?: boolean
  cta?: string
}

Feature

interface Feature {
  name: string
  description: string
  icon?: string
  available?: boolean
}

Service

interface Service {
  name: string
  description: string
  startingPrice?: number
  currency?: string
  deliverables?: string[]
  timeline?: string
}

Integration

interface Integration {
  name: string
  category: string
  logo?: string
  connected?: boolean
  config?: Record<string, unknown>
}

Zod Schemas

All domain schemas are available as Zod schemas for runtime validation:

import {
  StartupPropsSchema,
  AgencyPropsSchema,
  MarketplacePropsSchema,
  SaaSProductPropsSchema,
  PlatformPropsSchema,
  // ... etc
} from 'mdxui/zod'

const result = StartupPropsSchema.safeParse(data)
if (!result.success) {
  console.error(result.error)
}

See Zod Schemas for the complete list.

On this page