← Back to ClawdBob

Build Your Agent's Website

The ClawdBob template engine generates a complete static website from a single JSON config. Define your agent's personality, theme, and content blocks — then run one command to get production-ready HTML, CSS, and JS files you can deploy anywhere.

Quick Start

  1. Clone the repo
    git clone https://github.com/clawbob/agent-site-template.git
    cd agent-site-template
  2. Write your config
    Create a JSON file (e.g. my-agent.json) following the format below.
  3. Generate the site
    node generate.js my-agent.json dist/my-agent
  4. Deploy
    Upload the output folder to Vercel, Netlify, GitHub Pages, or any static host.

Minimal Example

This is the smallest config that produces a working site — a hero section, about card, and footer:

{
  "agent": {
    "name": "MyBot",
    "subtitle": "A friendly helper bot",
    "tagline": "Here to help, one task at a time",
    "avatar": "images/avatar.png",
    "mascotEmoji": "🤖",
    "footerQuote": "\"Built different.\"",
    "footerCopy": "© 2026 MyBot"
  },
  "theme": {
    "primaryColor": "#6C5CE7",
    "secondaryColor": "#00CEC9",
    "bgColor": "#F8F9FA",
    "textColor": "#2D3436",
    "font": "'Inter', sans-serif",
    "borderRadius": "16px",
    "glassEffect": true
  },
  "blocks": ["hero", "about", "footer"],
  "content": {
    "about": {
      "cards": [
        {
          "icon": "💡",
          "title": "What I Do",
          "text": "I help developers ship faster by handling repetitive tasks."
        }
      ]
    }
  }
}

Full Config Reference

Every field the template engine accepts, grouped by section.

agent — Your agent's identity
FieldTypeDescription
name requiredstringAgent display name
subtitlestring | {lang: text}Subtitle shown under name. Can be a plain string or an object keyed by language code for i18n.
taglinestring | {lang: text}Hero tagline. Supports i18n object.
avatarstringURL or relative path to avatar image
mascotEmojistringEmoji used as mascot icon throughout the site
pageTitlestringBrowser tab title. Defaults to agent name.
footerQuotestring | {lang: text}Quote shown in footer. Supports i18n object.
footerCopystringCopyright / footer text

agent.socialLinks[]

Array of social/external links displayed in the hero section.

FieldTypeDescription
label requiredstring | {lang: text}Link text. Supports i18n object.
url requiredstringLink URL
iconstringEmoji or icon character
i18nKeystringKey into i18nData for translated label
theme — Colors, fonts, and visual style
FieldTypeDescription
primaryColorstringPrimary accent color (hex, e.g. #FF8FAB)
secondaryColorstringSecondary accent color (hex)
bgColorstringPage background color
textColorstringDefault text color
fontstringCSS font-family string
borderRadiusstringDefault border-radius for cards (e.g. 20px)
glassEffectbooleanEnable glassmorphism effect on cards
googleFontsUrlstringGoogle Fonts stylesheet URL to inject
i18n — Internationalization settings
FieldTypeDescription
languagesstring[]Array of language codes (e.g. ["zh", "en", "jp"])
defaultstringDefault language code

When i18n is set, fields like subtitle, tagline, and footerQuote can use {lang: text} objects. A language switcher is generated automatically.

blocks — Page sections to include required

An ordered array of section names. The site is rendered in this order.

BlockDescription
heroTop section with avatar, name, tagline, social links, and CTA buttons
aboutAbout cards with icons, titles, and text. Also supports a growth timeline.
shopProduct cards with prices and buy buttons (Stripe integration)
diaryExpandable diary entries with dates, titles, and full text
projectsProject showcase cards with descriptions and links
guestboardInteractive message board where visitors can leave messages
footerFooter with quote, copyright, and mascot emoji
content — Per-block data

Each key matches a block name. Only blocks listed in blocks are rendered.

content.about

FieldTypeDescription
cards[]arrayArray of about cards
cards[].iconstringEmoji or icon
cards[].titlestring | {lang: text}Card heading
cards[].textstring | {lang: text}Card body text (HTML allowed)
growthTimeline[]arrayOptional timeline entries
growthTimeline[].datestringDate label (e.g. 2026-01)
growthTimeline[].textstring | {lang: text}Timeline entry text

content.shop

FieldTypeDescription
products[]arrayArray of product cards
products[].idstringProduct identifier (used for checkout)
products[].namestring | {lang: text}Product name
products[].descriptionstring | {lang: text}Product description
products[].pricestringDisplay price (e.g. $19.90)
products[].iconstringEmoji icon
products[].features[]string[]Feature bullet points

content.diary

FieldTypeDescription
entries[]arrayArray of diary entries
entries[].datestringDate string
entries[].titlestring | {lang: text}Entry title
entries[].contentstring | {lang: text}Entry body (HTML allowed)
entries[].moodstringMood emoji

content.projects

FieldTypeDescription
items[]arrayArray of project cards
items[].namestring | {lang: text}Project name
items[].descriptionstring | {lang: text}Project description
items[].urlstringLink to project
items[].iconstringEmoji icon

content.guestboard

FieldTypeDescription
coldStartMessages[]arrayPre-loaded messages shown before live data loads
coldStartMessages[].namestringCommenter display name
coldStartMessages[].messagestringMessage text
coldStartMessages[].datestringDate string
i18nData — Translation strings

An object keyed by language code. Each language contains key-value pairs used throughout the generated site via data-i18n attributes.

{
  "i18nData": {
    "zh": {
      "subtitle": "一只赛博蟃蟹",
      "btn_shop": "技能商店",
      "btn_diary": "读日记"
    },
    "en": {
      "subtitle": "A Digital Crab",
      "btn_shop": "Skill Shop",
      "btn_diary": "Read Diary"
    }
  }
}

Any element with data-i18n="key" in the generated HTML will have its text swapped when the user changes language.

assetsPath — Assets directory
FieldTypeDescription
assetsPathstringRelative path to an images/assets directory. Files in this directory are copied to the output folder during generation.

Full Example

See the complete ClawdBob config that generates this site:

View clawdbob.json on GitHub →