logo
myanmar1

Modules

Module Overview

This document provides a comprehensive overview of all available modules (blocks), collections, and globals in the RobinCMS Payload project, including their configurable options.


Table of Contents


Shared Fields

These field groups are reused across most blocks:

Block Colors (blockColorFields)

A group with five text fields using the ThemeColorPickerField component:

FieldDescription
backgroundColorBackground color override
textPrimaryColorHeadings & body text color override
textSecondaryColorSubtitles & captions color override
buttonBgColorOverride filled-button background color
buttonTextColorOverride filled-button text color
backgroundPatternOptional decorative SVG pattern layered over the background color (default: none)
patternColorColor of the pattern overlay (shown when a pattern is selected, ThemeColorPicker)
patternOpacityOpacity of the pattern overlay, 0–1 (default: 0.1, shown when a pattern is selected)

The background pattern library ships 40 tileable SVG patterns across 8 categories (Abstract, Geometric, Basic, Futuristic, Minimal, Tile, Music, Food), defined in src/lib/patterns.ts.

Applied to all blocks except Spacer and Separator.

Block Typography (blockTypographyFields)

A group that overrides the global theme typography for an individual block. Every option defaults to Inherit (use the global Theme & Styling settings).

FieldTypeDescription
fontFamilyselectFont family for all text in the block (Inherit + Google Fonts, with live preview)
fontWeightselectInherit / 300 / 400 / 500 / 600 / 700 / 800 / 900
fontSizeselectInherit / small / medium / large / xlarge — scales all text relative to the theme size

Applied to Hero, Bento Gallery, Vinyl Player, and other blocks that opt in.

Button Icon Fields (buttonIconFields)

Reusable icon fields spread into button arrays on Hero, CTA, CardGrid, and ImageText blocks:

FieldTypeDescription
iconselectOptional Heroicon displayed inside the button (default: none)
iconPositionselectleft (default) or right — shown only when an icon is selected

Block Spacing (blockSpacingFields)

A group with two collapsible sub-groups — Padding and Margin — each containing:

FieldTypeDescription
top / right / bottom / leftselectnone / small / medium / large / custom
topCustom / rightCustom / bottomCustom / leftCustomtextCustom pixel value (shown when "custom" is selected)

Applied to all blocks.

Block Width (blockLayoutFields)

FieldTypeDescription
blockWidthselectcontained (default) or full

Padding Size (paddingSizeField)

FieldTypeDescription
paddingSizeselectnone / small / medium (default) / large

Animation (animationField)

FieldTypeDescription
animationselectfadeUp (default) / fadeIn / slideLeft / slideRight / scale / none

Blocks

Hero

Block Slug: hero Description: Full-width hero section with multiple layout styles and scroll-driven visual effects.

FieldTypeRequiredDescription
styleselectNofullscreen (default) / split / centered / minimal
headingtextYesMain heading text
subheadingtextareaNoSecondary heading text
backgroundImageupload (media)NoBackground or hero image
overlaycheckboxNoDark overlay on background image (default: true)
overlayOpacitynumberNoOverlay opacity 0–100 (default: 40, shown when overlay is enabled)
scrollEffectselectNonone / zoomIn / parallax / blur (shown when background image is set)
bottomGradientcheckboxNoFade gradient at bottom edge
bottomGradientColortextNoColor to fade into (ColorPicker, conditional)
bottomGradientHeightselectNo50% / 75% (default) / 100% (conditional)
alignmentselectNoleft / center (default) / right
minHeightselectNoauto / 50vh / 75vh / 100vh (default)
ctaButtonsarray (max 3)Nolabel (text, req), link (text, req), variant (filled/outlined/text), newTab (checkbox), icon (select, heroicon), iconPosition (left/right)
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
paddingSizeselectNonone / small / medium / large (default)
blockWidthselectNocontained / full (default)
animationselectNoEntrance animation

Rich Text

Block Slug: richText Description: A flexible rich text content block using the Lexical rich text editor.

FieldTypeRequiredDescription
contentrichTextYesRich text content (headings, lists, links, bold, italic, etc.)
columnsselectNo1 (default) or 2 column layout
maxWidthselectNonarrow (720px) / medium (960px, default) / wide (1200px) / full
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
paddingSizeselectNonone / small / medium (default) / large
blockWidthselectNocontained / full
animationselectNofadeUp / fadeIn / slideLeft / slideRight / scale / none

Image + Text

Block Slug: imageText Description: Side-by-side image and rich text content.

FieldTypeRequiredDescription
layoutselectNoimageLeft (default) / imageRight / textOnly / imageOnly
imageupload (media)NoImage (hidden when layout is textOnly)
imageSizeselectNosmall (33%) / medium (50%, default) / large (66%) — hidden for imageOnly
imageOnlyWidthselectNosmall (480px) / medium (720px) / large (960px, default) / fullimageOnly only
imageMaskselectNonone (default) / circle / rounded / blob / wave / heart / star / flower / burst / splash / torn (torn paper) / cross / drop (teardrop)
roundedImagecheckboxNoRounded corners on image (default: true) — hidden for imageOnly
contentrichTextNoText content (hidden for imageOnly)
buttonsarray (max 3)Nolabel (req), link (req), variant, newTab, icon (heroicon), iconPosition (left/right) — hidden for imageOnly
verticalAlignmentselectNotop / center (default) / bottom — hidden for imageOnly and textOnly
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
paddingSizeselectNonone / small / medium (default) / large
blockWidthselectNocontained (default) / full
animationselectNofadeUp / fadeIn / slideLeft / slideRight / scale / none

Call to Action (CTA)

Block Slug: cta Description: Prominent call-to-action sections with multiple layout styles.

FieldTypeRequiredDescription
styleselectNostandard / banner / card / inline
headingtextYesCTA heading
descriptiontextareaNoSupporting text
buttonsarray (max 3)Nolabel (text, req), link (text, req), variant (filled/filledTonal/outlined/text/elevated), newTab (checkbox), icon (heroicon), iconPosition (left/right)
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
blockWidthselectNocontained / full
animationselectNofadeUp / fadeIn / scale / none

Accordion / Tabs

Block Slug: accordionTabs Description: Collapsible accordion or tabbed content with animated transitions.

FieldTypeRequiredDescription
displayModeselectNoaccordion (default) or tabs
itemsarray (min 1)Yestitle (text, req), icon (upload→media, optional), content (richText, req)
defaultOpennumberNoIndex of item open by default (0 = first)
allowMultiplecheckboxNoAllow multiple items open (accordion mode only)
iconStyleselectNochevron (default) or plus (accordion mode only)
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
paddingSizeselectNonone / small / medium (default) / large
blockWidthselectNocontained (default) / full
animationselectNofadeUp / fadeIn / slideLeft / slideRight / scale / none

Card Grid

Block Slug: cardGrid Description: A grid layout displaying multiple cards with four visual variants.

FieldTypeRequiredDescription
variantselectYesstandard / horizontal / overlay / minimal
columnsselectYes1 / 2 / 3 / 4
headingtextNoOptional heading above grid
subheadingtextareaNoOptional subheading
cardVariantselectNoelevated / filled / outlined
cardBorderRadiustextNoCustom card border radius
cardBackgroundColortextNoCustom card background color (ThemeColorPicker)
gapselectNosmall / medium (default) / large
equalHeightcheckboxNoForce equal card heights (default: true)
horizontalImagePositionselectNoleft / right / alternate (horizontal variant only)
overlayGradientselectNobottom / full / none (overlay variant only)
minimalAccentColortextNoAccent color (minimal variant only, ThemeColorPicker)
cardsarray (1–12)YesEach card: image (upload), imageAspectRatio (select), overline (text), title (text, req), description (textarea), button group (label, link, variant, newTab, icon heroicon, iconPosition), icon (text)
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
blockWidthselectNocontained / full
animationselectNoEntrance animation

Block Slug: carousel Description: An image carousel/slider with multiple layout and interaction options.

FieldTypeRequiredDescription
itemsarray (min 2)Yesimage (upload, req), caption (text), alt (text), link (text), linkNewTab (checkbox, conditional)
layoutselectNostandard / fill / mixed
gapselectNonone / small / medium (default) / large
overflowcheckboxNoExtend beyond container
loopcheckboxNoInfinite scrolling (default: true)
snapcheckboxNoSnap between items (default: true)
autoplaycheckboxNoAuto-advance slides (default: false)
autoplayIntervalnumberNoSeconds between slides (default: 5, shown when autoplay enabled)
showArrowscheckboxNoShow navigation arrows (default: true)
showDotscheckboxNoShow dot indicators (default: true)
showCaptionscheckboxNoShow image captions (default: true)
aspectRatioselectNoauto / 1:1 / 4:3 / 16:9 / 3:2 / 21:9
roundedCornerscheckboxNoRounded image corners (default: true)
itemHeightselectNoauto / 250 / 400 / 550 / 700 px
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
blockWidthselectNocontained / full
animationselectNoEntrance animation

Quote / Testimonial

Block Slug: quote Description: A styled quote or testimonial block.

FieldTypeRequiredDescription
styleselectNocard (default) / minimal / large
quotetextareaYesThe quote text
authortextNoAuthor name
roletextNoAuthor role or title
avatarupload (media)NoAuthor avatar image
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
blockWidthselectNocontained / full
animationselectNofadeUp / fadeIn / scale / none

Block Slug: gallery Description: Image gallery with multiple layout options and lightbox support.

FieldTypeRequiredDescription
layoutselectNogrid (default) / masonry / carousel / single
imagesarray (min 1)Yesimage (upload, req), caption (text), alt (text)
columnsselectNo2 / 3 (default) / 4 (grid or masonry layout only)
gapselectNosmall / medium (default) / large
aspectRatioselectNoauto / 1:1 / 4:3 / 16:9 / 3:2 (grid layout only)
enableLightboxcheckboxNoEnable lightbox on click (default: true)
roundedCornerscheckboxNoRounded image corners (default: true)
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
blockWidthselectNocontained / full
animationselectNofadeUp / fadeIn / scale / stagger / none

Block Slug: bentoGallery Description: A scroll-driven bento-grid gallery with a Ken Burns zoom effect that animates toward a focus image as the visitor scrolls, plus an optional floating title.

FieldTypeRequiredDescription
titletextNoFloating title displayed over the centre of the gallery
titleSizeselectNosmall / medium / large (default) / xlarge (shown when title set)
titleColortextNoTitle color (default: #ffffff, ColorPicker, shown when title set)
titleFontWeightselectNo400 / 500 / 600 / 700 (default) / 800 / 900 (shown when title set)
titleVisibilityselectNostart (fades out as zoom begins, default) / reveal (fades in when zoom completes) / sticky (always visible)
imagesarray (1–6)YesEach: image (upload, req), alt (text), isFocusImage (checkbox — image that zooms to fill the screen)
zoomModeselectNofocusOnly (non-focus cells fade, focus expands, default) / zoomGrid (entire grid scales toward focus)
gapselectNonone / small (default) / medium / large
roundedCornerscheckboxNoRounded corners on cells (default: true)
scrubSpeedselectNoslow / normal (default) / fast — scroll distance needed to complete the animation
imageZoomnumberNoKen Burns zoom scale per image, 1–2 (default: 1.12)
+ blockTypographyFieldsgroupPer-block typography overrides
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing

Video

Block Slug: video Description: YouTube and Vimeo video embed block.

FieldTypeRequiredDescription
urltextYesYouTube or Vimeo URL (validated with regex)
captiontextNoOptional caption below the video
aspectRatioselectNo16:9 (default) / 4:3 / 1:1
posterImageupload (media)NoCustom poster/thumbnail image
fullWidthcheckboxNoStretch to full width
maxWidthselectNosmall (640px) / medium (960px, default) / large (1200px) / full (shown when not fullWidth)
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
blockWidthselectNocontained / full
animationselectNofadeUp / fadeIn / scale / none

Markdown Document

Block Slug: markdownDoc Description: Render GFM Markdown content with syntax highlighting and auto-generated table of contents.

FieldTypeRequiredDescription
markdownSourceselectNoeditor (default) or upload
markdownContenttextareaYesGFM Markdown content with 20-row editor (shown when source = editor)
markdownFileupload (media)NoUpload a .md file (shown when source = upload)
markdownFileContenttextareaNoRead-only extracted content from uploaded file
showTableOfContentscheckboxNoAuto-generate TOC from headings (default: true)
maxWidthselectNonarrow (720px) / medium (960px, default) / wide (1200px) / full
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
paddingSizeselectNonone / small / medium (default) / large
blockWidthselectNocontained / full
animationselectNofadeUp / fadeIn / slideLeft / slideRight / scale / none

Embed

Block Slug: embed Description: Raw HTML embed code for iframes, widgets, maps, etc.

FieldTypeRequiredDescription
codecode (HTML)YesPaste embed code (iframes, widgets, maps, etc.)
maxWidthselectNosmall (640px) / medium (960px, default) / large (1200px) / full
alignmentselectNoleft / center (default) / right
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
blockWidthselectNocontained / full
animationselectNofadeUp / fadeIn / none

Contact Form

Block Slug: contactForm Description: A simple contact form that collects a visitor's name, email, and message, and stores submissions in the Contact Messages collection.

FieldTypeRequiredDescription
headingtextNoForm heading (default: "Get in Touch")
descriptiontextareaNoOptional text displayed above the form
submitLabeltextNoSubmit button label (default: "Send Message")
successMessagetextNoMessage shown after successful submission (default: "Thank you! Your message has been sent.")
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
blockWidthselectNocontained / full
animationselectNofadeUp / fadeIn / slideLeft / slideRight / scale / none

Anti-spam: honeypot website input, 3-second minimum open time, and server-side rate limiting (5 submissions per IP / 10 min). Endpoint: POST /api/contact


Separator

Block Slug: separator Description: Decorative section dividers with multiple visual styles.

FieldTypeRequiredDescription
styleselectYeswave (default) / blob / handDrawn / slant / line
colortextNoSeparator color (default: #fe7a7a, ColorPicker)
useGradientcheckboxNoEnable gradient coloring
gradientEndColortextNoGradient end color (shown when useGradient enabled, ColorPicker)
flipVerticalcheckboxNoFlip vertically
flipHorizontalcheckboxNoFlip horizontally
heightnumberNoHeight in pixels, 20–300 (default: 80)
animationTypeselectNonone (default) / draw / fadeIn / slideIn / waveMotion / float / shimmer
animationDurationnumberNoDuration in seconds, 0.2–10 (default: 1.5, shown when animationType ≠ none)
animationDelaynumberNoDelay in seconds before animation starts, 0–5 (default: 0, shown when animationType ≠ none)
animationIntensityselectNosubtle / standard (default) / expressive (shown when animationType ≠ none)
animationLoopcheckboxNoLoop animation continuously (default: true, shown for waveMotion / float / shimmer)
+ blockSpacingFieldsgroupPer-block spacing (no blockColorFields)

Spacer

Block Slug: spacer Description: A vertical spacing block to add whitespace between sections.

FieldTypeRequiredDescription
sizeselectNosmall (32px) / medium (64px, default) / large (96px) / xl (128px) / custom
customHeightnumberNoCustom height in pixels, 8–500 (shown when size = custom)
+ blockSpacingFieldsgroupPer-block spacing (no blockColorFields)

Timeline

Block Slug: timeline Description: A timeline of events or milestones in either an immersive horizontal (full-background-image with tabs) or a classic vertical (alternating left/right) layout.

FieldTypeRequiredDescription
orientationselectNohorizontal (default) — immersive, full-background image tabs / vertical — classic alternating items
headingtextNoOptional section heading displayed above the timeline
subheadingtextareaNoOptional intro text below the heading
overlayOpacitynumberNoDark overlay on background image, 0–100 (default: 50) — horizontal only
minHeighttextNoMinimum height of the section (default: 80vh) — horizontal only
lineColortextNoCSS value for the vertical connecting line (default: var(--color-text-secondary)) — vertical only
itemsarray (min 1)YesEach item: date (text, req), title (text, req), subtitle (text), description (textarea), image (upload — used as background in horizontal mode)
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing
paddingSizeselectNonone / small / medium (default) / large
blockWidthselectNocontained / full
animationselectNoEntrance animation

Horizontal Text

Block Slug: horizontalText Description: A marquee-style strip of text that scrolls horizontally across the screen, with optional letter fly-in animation as it enters the viewport.

FieldTypeRequiredDescription
texttextYesText that scrolls horizontally across the screen
separatortextNoSeparator inserted between repetitions (default: )
fontselectNoFont family for the scrolling text (FontSelect, default: Inter)
fontWeightselectNo300 / 400 / 500 / 600 / 700 (default) / 800 / 900
fontSizeselectNosmall / medium / large (default) / xlarge
directionselectNoleft (default) or right scroll direction
speednumberNoScroll speed multiplier, 0.1–5 (default: 1)
repeatnumberNoTimes the text repeats, 0–20 (default: 6; 0 = single sentence, no scroll)
flyInselectNonone / scattered (from all sides, default) / fromOpposite (from the opposite side of the scroll)
textColortextNoText color override (ThemeColorPicker, defaults to theme primary text)
paddingSizeselectNonone / small / medium (default) / large
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing

Vinyl Player

Block Slug: vinylPlayer Description: An interactive turntable showcase that slides records onto a spinning vinyl. Each record has a cover sleeve, a center label, and optional audio playback.

FieldTypeRequiredDescription
headingtextNoOptional section heading above the player
subheadingtextareaNoOptional intro text below the heading
itemsarray (1–5)YesEach record: songTitle (text, req), artist (text), duration (text, e.g. 3:45), audioUrl (text — direct audio file URL), spotifyUrl (text — Spotify link, uses embedded player), soundcloudUrl (text — SoundCloud link, uses embedded player), coverImage (upload, req), vinylImage (upload — center label, optional). Source priority: Spotify → SoundCloud → audio file.
vinylSizeselectNo25 (small, side-by-side, default) / 50 (medium) / 75 (large, stacked) — width of the vinyl stage
animationselectNoEntrance animation
paddingSizeselectNonone / small / medium (default) / large
+ blockTypographyFieldsgroupPer-block typography overrides
+ blockColorFieldsgroupPer-block color overrides
+ blockSpacingFieldsgroupPer-block spacing

Collections

Pages

Collection Slug: pages Description: Content pages composed from blocks. Supports drafts with autosave and scheduled publishing.

  • Versions: Drafts with autosave (375 ms interval), scheduled publish
  • Hooks: afterChange / afterDelete revalidate the page path and home (/)
  • Live Preview: Enabled
FieldTypeRequiredDescription
titletextYesPage title
slugtextYes (unique)URL slug (auto-generated from title, sidebar)
pageBackgroundColortextNoOptional page background color (ColorPicker, sidebar)
hideHeadercheckboxNoHide the site header on this page (default: false, sidebar)
hideFootercheckboxNoHide the site footer on this page (default: false, sidebar)
Content tab
savedBlocksImportuiSavedBlocksImportField component — allows importing saved block templates
layoutblocksYesAll 19 blocks: Hero, RichText, AccordionTabs, Gallery, ImageText, Video, Separator, Spacer, Embed, Quote, CTA, MarkdownDoc, Carousel, CardGrid, ContactForm, Timeline, BentoGallery, HorizontalText, VinylPlayer
SEO tab
meta.titletextNoCustom meta title
meta.descriptiontextareaNoMeta description
meta.imageupload (media)NoOpen Graph image
meta.keywordstextNoComma-separated keywords

Media

Collection Slug: media Description: Uploaded images, videos, and PDFs with automatic image resizing.

  • Upload: Static dir media; focal point enabled; mime types: image/*, video/*, application/pdf
  • Image sizes: thumbnail (400×300), card (768×512), hero (1920×auto), og (1200×630)
  • Hooks: beforeChange — auto-fills alt from filename if not set (strips extension, replaces hyphens/underscores with spaces)
  • Access: Read open to all; create/update/delete requires non-viewer
FieldTypeRequiredDescription
alttextYesAlt text for accessibility
captiontextNoOptional caption

Users

Collection Slug: users Description: Admin and editor accounts with Payload built-in auth.

FieldTypeRequiredDescription
nametextNoDisplay name
roleselectNoadmin / editor (default) / viewer (read-only, cannot create/update/delete)
  • Access: Read: any authenticated user. Create/update/delete: admin role only.

Contact Messages

Collection Slug: contact-messages Description: Stores contact form submissions from the public-facing Contact Form block.

  • Admin group: Site Configuration
  • Access: Create open to all (public form); read/update/delete requires authenticated non-viewer
  • Timestamps: Enabled
FieldTypeRequiredDescription
firstnametextYesSender's first name
emailemailYesSender's email address
messagetextareaYesThe message content
readcheckboxNoMark the message as read (sidebar field, default: false)

Votes

Collection Slug: votes Description: Stores star ratings and optional text feedback from the vote popup.

  • Admin group: Site Configuration
  • Access: Read/create open to all; update/delete requires authentication
  • Timestamps: Enabled
FieldTypeRequiredDescription
blockIdtextYesIndexed. Identifies which vote block + page
ratingnumberYesStar rating, 1–5
firstNametextNoOptional voter first name
replytextareaNoOptional feedback message
voterFingerprinttextNoIndexed, read-only. Hash to prevent duplicate votes
pagetextNoURL path where the vote was cast

Saved Blocks

Collection Slug: saved-blocks Description: Reusable block templates that can be imported into any page.

  • Admin group: Content
  • Access: Read open to all; create/update/delete requires authenticated non-viewer
FieldTypeRequiredDescription
nametextYesDescriptive name (e.g. "Homepage Hero", "FAQ Accordion")
categoryselectNoheroes / content / media / navigation / cta / testimonials / layout / other
descriptiontextareaNoOptional notes about when or where to use this block
blockblocks (max 1)YesA single configured block from 15 types: Hero, RichText, AccordionTabs, Gallery, ImageText, Video, Separator, Spacer, Embed, Quote, CTA, MarkdownDoc, Carousel, CardGrid, Timeline (ContactForm, BentoGallery, HorizontalText, and VinylPlayer excluded)

Globals

Global Slug: header Admin Group: Navigation

FieldTypeDescription
logoupload (media)Site logo image
navItemsarray (max 8)Navigation items. Each: label (text, req), link group (type: page/custom/anchor, page relation, url text, anchor text, newTab), children array (max 8, nested dropdown items with label, description, icon, link group)
ctaButtongroupshow (checkbox), label, link, variant (filled/outlined/text), icon (select, heroicon), iconPosition (left/right) — all conditional on show
stickycheckboxStick to top on scroll (default: true)
transparentcheckboxTransparent header style (default: false)
desktopMenuStyleselecthorizontal-nav (default) / fullscreen-overlay
mobileMenuStyleselectside-drawer (default) / fullscreen-overlay
menuBreakpointselectsm (640px) / md (768px) / lg (1024px, default) / xl (1280px)
overlaySettingsgroupShown when either menu style is fullscreen-overlay. Contains: overlayBgColor, overlayBgOpacity (100/95/90/85/80), overlayTextColor, overlayAccentColor, overlayCloseColor — all with ColorPickerField

Global Slug: footer Admin Group: Navigation

Content tab: columns array (max 4) — each column title (text, req) + links array (label, url, newTab); description (textarea, top of footer).

Settings tab: showSocialLinks (checkbox, default true), showNewsletter (checkbox), newsletterHeading / newsletterDescription (text, conditional), bottomBar.copyrightOverride (text), bottomBar.bottomLinks array (label, url).


Site Settings

Global Slug: site-settings Admin Group: Site Configuration

General tab: siteTitle (text, req, default "Robin CMS"), siteDescription (textarea), logo, logoDark, favicon, ogImage (all upload → media).

SEO Defaults tab: defaultMeta.title (text), defaultMeta.description (textarea), defaultMeta.keywords (text).

Social Links tab: socialLinks array — platform (twitter/github/linkedin/instagram/youtube/facebook/tiktok/dribbble/behance/discord/mastodon/bluesky), url.

Analytics & Scripts tab: analytics.googleAnalyticsId, analytics.googleTagManagerId; customScripts.headScripts / bodyStartScripts / bodyEndScripts (code HTML injected into <head>, after <body>, before </body>).

Miscellaneous tab: copyrightText (default "© {year} Robin CMS…"), maintenanceMode (checkbox), robotsTxt (textarea).

Vote Popup tab: votePopup.enabled (checkbox), scrollPercentage (number 5–100, default 75), blockId (default site-popup-vote), heading, subheading, replyPrompt, thankYouMessage (text); colors accentColor (default #ff9529), backgroundColor, textColor, textSecondaryColor (ThemeColorPicker); borderRadius (global / 0 / 4 / 8 / 16 / 24 / 9999), shadow (none / small / medium / large, default large).


Theme

Global Slug: theme Admin Group: Site Configuration

Colors tab:

  • Brand Colors: primary (#4e73ae), secondary (#4c9d8d), accent (#fe7a7a), highlight (#f4c371), dark (#743939)
  • Surface Colors: background (#fefefe), surface (#f8f8f8), surfaceVariant (#f0f0f0), surfaceContainer (#eaeaea), surfaceContainerHigh (#e0e0e0)
  • Text Colors: primary (#1a1a2e), secondary (#555770)

Typography tab:

  • Fonts (FontSelectField): heading (Playfair Display), body (Inter), button (Inter), nav (inherit / body)
  • Heading Overrides: h1h6 per-heading font override (inherit)
  • Typography Settings: headingWeight (700), bodyWeight (400), headingLetterSpacing, bodyLetterSpacing, headingTextTransform, headingLineHeight (1.2), bodyLineHeight (1.6), paragraphSpacing
  • Font Scale: fontScale — compact / default / large / xl

Layout tab:

  • containerMaxWidth (1200px) — 1000 / 1200 / 1400 / 1600
  • sectionPadding — small / medium / large
  • borderRadius — none / small / medium / large / xl / pill

Buttons tab:

  • Button Style: filledBg, filledText, outlinedBorderWidth, fontWeight, textTransform
  • Button Padding: paddingPreset, borderRadius (button-specific override)
  • Button Hover: hoverEffect (lift / glow / darken / none), hoverScale, hoverShadow, transitionDuration

Animation tab:

  • enableAnimations (true) — toggle all entrance animations
  • animationIntensity — subtle / standard / expressive
  • enableDarkMode (false) — enable dark mode support

Components

Vote Popup

File: src/components/VotePopup.tsx

A scroll-triggered feedback widget that collects star ratings and optional text feedback from visitors.

  • Scroll trigger — appears once the user scrolls past scrollPercentage (default: 75%).
  • Star rating — 5-star system with emoji feedback (😡 😕 😐 😊 🤩) and labels; clicking a star submits via POST /api/vote.
  • Optional feedback — a reply form (first name + textarea) slides in; both fields optional. Empty submit shows the thank-you state without an API call; otherwise updates the vote record.
  • Skip — bypass feedback straight to the thank-you state.
  • localStorage persistence — votes and dismiss/minimize state persist so the popup won't re-appear.
  • Average score — after submission, fetches and displays the average from /api/vote-results.
  • Delete vote — a "Delete my vote" link removes the rating.

Props: all configured via Site Settings → Vote Popup (see that section for fields and defaults).


API Routes

POST /api/contact

Submit a contact form message. Body: { firstname, email, message, website, _t }

  • website honeypot and _t timestamp (< 3s) both silently succeed (bot detected).
  • Rate-limited to 5 submissions per IP per 10 min (429).
  • Validates required fields with length limits; on success creates a contact-messages document.

POST /api/vote

Submit a star rating. Body: { blockId, rating, reply?, firstName?, page? }

  • Validates blockId and rating (1–5); builds a fingerprint from IP + User-Agent + blockId to prevent duplicates.
  • Existing vote + new reply → updates it; existing vote, no reply → 409 { alreadyVoted: true }; otherwise creates a vote and returns { success, id }.

DELETE /api/vote

Body: { voteId } (single) or { blockId } (all for that block). Returns { success, deleted }.

GET /api/vote-results

Groups all votes by blockId. Returns { totalVotes, blocks: [{ blockId, totalVotes, averageRating, distribution: { 1–5 }, replies: [...] }] }.

Auto-generated Payload APIs

  • /api/[...slug] — REST API for all collections and globals
  • /api/graphql — GraphQL endpoint
  • /api/graphql-playground — GraphQL Playground (dev)

Note: This document reflects the current state of all modules. If new blocks are added or existing ones are modified, please update this overview accordingly.