Content Types Builder

The Content Types Builder lets you define custom content schemas visually. Create structured content types for any domain—products, recipes, articles, documentation—with full control over fields, validation, and AI indexing.

Accessing Content Types

  1. Navigate to your site in the Fig1 dashboard
  2. Click CMS in the left sidebar
  3. Select the Types tab

Interface Overview

The Content Types interface shows:

  • Types List - All your content types with status
  • Create Button - Add new content type
  • Type Editor - Configure fields and settings

Creating a Content Type

Step 1: Basic Information

  1. Click Create Content Type
  2. Enter the basic details:

| Field | Description | Example | |-------|-------------|---------| | Name | Display name | "Blog Post" | | Slug | URL identifier (auto-generated) | "blog-post" | | Plural Name | Plural form | "Blog Posts" | | Description | Help text for editors | "Articles for the company blog" | | Icon | Visual identifier | Article icon |

Step 2: Built-in Fields

Toggle which standard fields to include:

| Field | Description | Default | |-------|-------------|---------| | Title | Content title | ✓ On | | Slug | URL-friendly identifier | ✓ On | | Content | Rich text body | ✓ On | | Excerpt | Short summary | Off | | Featured Image | Hero image | Off | | Author | Content author | Off | | Published At | Publication date | ✓ On |

Step 3: Custom Fields

Add fields specific to your content type. Click Add Field and configure:

  1. Field Type - Select from 16 available types
  2. Name - camelCase identifier (e.g., readingTime)
  3. Label - Display label (e.g., "Reading Time")
  4. Description - Help text for editors
  5. Validation - Rules like required, min/max
  6. Default Value - Pre-filled value

Step 4: AI Configuration

Configure how AI interacts with this content type:

| Setting | Description | |---------|-------------| | Indexed | Include in AI knowledge base | | Summarize | Auto-generate summaries | | Extract Keywords | Auto-extract keywords | | Instruction Template | Context for AI responses |

Step 5: Save

Click Save Content Type to create. The type is now available in the Content Manager.

Field Types Reference

Text Fields

Text

Single-line text input.

Validation: minLength, maxLength, pattern (regex)
Example: Product SKU, Short title

Textarea

Multi-line text with optional rich text.

Validation: minLength, maxLength
Example: Description, Body content

URL

URL input with validation.

Validation: Must be valid URL
Example: Website, External link

Email

Email address input.

Validation: Must be valid email
Example: Contact email, Author email

Numeric Fields

Number

Numeric value input.

Validation: min, max
Example: Price, Quantity, Duration

Boolean Fields

Boolean

True/false toggle switch.

Default: true or false
Example: Featured, In Stock, Published

Date Fields

Date

Date picker (no time).

Validation: minDate, maxDate
Example: Event date, Birthday

Datetime

Date and time picker.

Validation: minDate, maxDate
Example: Event start, Deadline

Selection Fields

Select

Single selection dropdown.

Options: Array of string values
Example: Category, Status, Difficulty

Configuration:

  1. Add Options in validation
  2. Enter each option value
  3. User selects one option

Multiselect

Multiple selection chips.

Options: Array of string values
Validation: min, max selections
Example: Tags, Categories, Features

Media Fields

Media

Image or video picker from Media Library.

Validation: accept (MIME types)
Example: Hero image, Gallery images

Opens Media Library picker when clicked.

File

Document or file attachment.

Validation: accept (MIME types), maxSize
Example: PDF download, Attachment

Reference Fields

Reference

Link to one content item.

Validation: contentType (target type slug)
Example: Author profile, Related product

Opens content picker filtered by type.

References

Link to multiple content items.

Validation: contentType, min, max
Example: Related posts, Product variants

Advanced Fields

JSON

Raw JSON data editor.

Example: Configuration, Metadata, Structured data

Shows code editor for JSON input.

Color

Color picker with hex output.

Example: Brand color, Theme color

Shows color picker UI.

Location

Latitude/longitude coordinates.

Example: Store location, Event venue

Shows map picker or coordinate inputs.

Field Configuration

Validation Rules

| Rule | Applies To | Description | |------|------------|-------------| | required | All | Field must have a value | | minLength | Text, Textarea | Minimum character count | | maxLength | Text, Textarea | Maximum character count | | pattern | Text, URL | Regex pattern to match | | min | Number | Minimum value | | max | Number | Maximum value | | minDate | Date, Datetime | Earliest allowed date | | maxDate | Date, Datetime | Latest allowed date | | options | Select, Multiselect | Available choices | | accept | Media, File | Allowed MIME types | | maxSize | File | Maximum file size in bytes | | contentType | Reference(s) | Target content type slug |

Display Options

| Option | Description | |--------|-------------| | Show in List | Display in content list table | | Searchable | Include in search index | | Sortable | Allow sorting by this field | | Order | Display order in form |

AI Options

| Option | Description | |--------|-------------| | AI Indexed | Include field in AI knowledge base | | Weight | Relevance weight for search |

Set AI Indexed: false on fields that shouldn't influence AI responses (e.g., internal notes).

Example: Blog Post Type

Name: Blog Post
Slug: blog-post
Plural: Blog Posts

Built-in Fields:
✓ Title
✓ Slug
✓ Content
✓ Excerpt
✓ Featured Image
✓ Published At

Custom Fields:
┌────────────────┬────────────┬─────────────────────────┐
│ Name           │ Type       │ Validation              │
├────────────────┼────────────┼─────────────────────────┤
│ subtitle       │ text       │ maxLength: 200          │
│ readingTime    │ number     │ min: 1, max: 60         │
│ category       │ select     │ options: [Tech, News]   │
│ tags           │ multiselect│ options: [...]          │
│ featured       │ boolean    │ default: false          │
│ author         │ reference  │ contentType: author     │
│ relatedPosts   │ references │ contentType: blog-post  │
└────────────────┴────────────┴─────────────────────────┘

AI Config:
✓ Indexed
✓ Summarize
  Instruction: "This is a blog post. Focus on the main topic and key takeaways."

Example: Product Type

Name: Product
Slug: product
Plural: Products

Built-in Fields:
✓ Title
✓ Slug
✓ Content (as description)
✓ Featured Image

Custom Fields:
┌────────────────┬────────────┬─────────────────────────┐
│ Name           │ Type       │ Validation              │
├────────────────┼────────────┼─────────────────────────┤
│ sku            │ text       │ required, pattern       │
│ price          │ number     │ required, min: 0        │
│ salePrice      │ number     │ min: 0                  │
│ inStock        │ boolean    │ default: true           │
│ category       │ select     │ options: [...]          │
│ gallery        │ media      │ accept: image/*         │
│ specifications │ json       │ -                       │
│ relatedProducts│ references │ contentType: product    │
└────────────────┴────────────┴─────────────────────────┘

AI Config:
✓ Indexed
  Instruction: "This is a product. Include price, availability, and key features."

Managing Content Types

Editing a Type

  1. Click on a content type in the list
  2. Modify fields, validation, or settings
  3. Click Save Changes

Note: Removing fields doesn't delete existing data, but those values won't be editable.

Archiving a Type

  1. Open the content type
  2. Click Archive in the menu
  3. Confirm the action

Archived types are hidden from the Content Manager but data is preserved.

Deleting a Type

  1. Open the content type
  2. Click Delete in the menu
  3. Confirm deletion

Warning: This removes the type definition. Existing content keeps its data but loses its schema.

API Integration

Manage content types via SDK:

// List all types
const types = await fig1.contentTypes.list();

// Get a specific type
const blogType = await fig1.contentTypes.get('blog-post');

// Create a type
const recipeType = await fig1.contentTypes.create({
  name: 'Recipe',
  slug: 'recipe',
  pluralName: 'Recipes',
  fields: [
    {
      name: 'prepTime',
      label: 'Prep Time (minutes)',
      type: 'number',
      validation: { min: 0 }
    },
    {
      name: 'difficulty',
      label: 'Difficulty',
      type: 'select',
      validation: { options: ['easy', 'medium', 'hard'] }
    }
  ],
  builtInFields: {
    title: true,
    content: true,
    featuredImage: true
  },
  aiConfig: {
    indexed: true,
    summarize: true
  }
});

// Update a type
await fig1.contentTypes.update('recipe', {
  fields: [...existingFields, newField]
});

// Delete a type
await fig1.contentTypes.delete('recipe');

See the Content Types API Reference for complete documentation.

Best Practices

  1. Plan your schema first - Sketch out fields before creating
  2. Use meaningful slugs - They become API identifiers
  3. Set validation rules - Catch errors before they're saved
  4. Configure AI carefully - Exclude internal-only fields from indexing
  5. Use references - Link related content for richer data
  6. Start simple - Add fields as needs evolve
  7. Document your types - Use descriptions to help editors

Next Steps