webhouse.appwebhouse.appdocs

TipTap-based rich text editor with embedded media, callouts, tables, code blocks, and AI features.

Overview

Every richtext field uses a built-in TipTap v3 editor with full media embedding, structured content nodes, and AI assistance.

Embedded media types

NodeDescription
ImageUpload or paste. Supports resize handles and alignment.
Video embedYouTube or Vimeo URL → responsive iframe.
Audio embedUpload mp3/wav/ogg → inline player.
File attachmentUpload any file → download-link card.
CalloutStyled info/warning/tip/danger box with editable text.
TableStructured data table with header row, context toolbar.
Code blockFenced code block with syntax highlighting.
Interactive embedEmbed an Interactive from the Interactives manager.

Controlling available features

Use the features array to control which toolbar items are shown:

typescript
// Full-featured (default — all tools available)
{ name: 'content', type: 'richtext' }

// Restricted — only basic formatting + images
{
  name: 'content',
  type: 'richtext',
  features: ['bold', 'italic', 'heading', 'link', 'image', 'bulletList', 'orderedList']
}

// Minimal — text only, no media
{
  name: 'bio',
  type: 'richtext',
  features: ['bold', 'italic', 'link']
}

All available features

FeatureToolbar itemShortcut
boldBold textCmd+B
italicItalic textCmd+I
underlineUnderlineCmd+U
strikeStrikethroughCmd+Shift+S
codeInline code
superscriptSuperscript (x²)Cmd+.
subscriptSubscript (x₂)Cmd+,
headingHeading selector (H1-H3)
bulletListBullet list
orderedListNumbered list
blockquoteBlockquote
horizontalRuleHorizontal line
textAlignText alignment
highlightHighlight with color picker
linkHyperlinkCmd+K
tableData table
imageImage upload/embed
videoVideo embed
audioAudio file upload
fileFile attachment
calloutInfo/warning/tip callout
interactiveInteractive embed

Markdown storage

Richtext fields store markdown. Standard formatting uses native markdown syntax. Features that markdown doesn't support use inline HTML:

FeatureStored as
Underlinetext
Superscripttext
Subscripttext
Highlighttext
Text alignment

text

Interactive embed`!!INTERACTIVE[idtitlealign:left]`

Rendering in Next.js

Use react-markdown with remark-gfm:

typescript
import ReactMarkdown from 'react-markdown';
import remarkGfm from 'remark-gfm';

function ArticleBody({ content }: { content: string }) {
  return (
    <ReactMarkdown remarkPlugins={[remarkGfm]}>
      {content}
    </ReactMarkdown>
  );
}

**Never use `dangerouslySetInnerHTML`** with a regex-based parser — it breaks images with sizing, tables, and embedded media.

AI features

  • AI Proofread — auto-detects language, checks spelling/grammar/style
  • AI Bubble Menu — select text for rewrite options (shorter, longer, formal, casual, translate)
  • Zoom — scale editor content 50%-200%
Previous
SEO & Visibility
Next
Content Relationships