Retrail/Page Builder

Page Builder

Every block you can put on your page, with all of its fields.

The page is the blocks array in settings.json, drawn top to bottom. Put blocks in any order, use a block more than once, and hide one with "enabled": false.

Hero Block

Your name, avatar, headline, bio, a status badge and buttons.

{
  "type": "hero",
  "enabled": true,
  "name": "Example Name",
  "headline": "Example Title & Profession",
  "bio": "Short personal bio or mission statement.",
  "avatar": "https://example.com/avatar.jpg",
  "avatarPosition": "left",
  "avatarSize": 56,
  "statusText": "Available for projects",
  "statusColor": "neon-green",
  "statusEnabled": true,
  "align": "left",
  "actions": [
    {
      "label": "Get in touch",
      "url": "mailto:[email protected]",
      "variant": "filled",
      "icon": "mail",
      "enabled": true
    }
  ]
}
FieldTypeDescription
avatarPositionstringPosition of profile image: "left", "right", or "top" (default).
avatarSizenumberSize in pixels (defaults to 56 when inline, 84 when top).
statusColorstringColor for the status badge dot (e.g. "neon-green", "teal").
statusEnabledbooleanSet to false to hide the status indicator.
alignstringAlignment: "left", "center", or "right".

Projects Block

Cards for your projects, with tags, badges and links.

{
  "type": "projects",
  "enabled": true,
  "title": "Projects",
  "description": "Featured applications and tools.",
  "layout": "grid",
  "columns": 2,
  "items": [
    {
      "id": "project-1",
      "title": "Example Project",
      "description": "High-performance service with status tracking.",
      "image": "",
      "tags": ["Next.js", "Mantine", "TypeScript"],
      "featured": true,
      "enabled": true,
      "stats": [
        { "label": "Status", "value": "Online", "enabled": true }
      ],
      "links": [
        { "label": "Live Demo", "url": "https://example.com", "icon": "external", "enabled": true }
      ]
    }
  ]
}
FieldTypeDescription
layoutstring"grid" for responsive cards or "list" for single-column cards.
columnsnumberGrid column count: 1, 2, or 3.
featuredbooleanDisplays a prominent "Featured" badge on the project card.

Skills Block

Skills grouped by area, with an icon and level on each.

{
  "type": "skills",
  "enabled": true,
  "title": "Technical Skills",
  "description": "Core competencies and tools.",
  "categories": [
    {
      "name": "Frontend",
      "enabled": true,
      "skills": [
        { "name": "React", "level": "Advanced", "icon": "code", "enabled": true },
        { "name": "TypeScript", "level": "Advanced", "icon": "terminal", "enabled": true }
      ]
    }
  ]
}

Experience Block

A timeline of roles with companies, dates and tags.

{
  "type": "experience",
  "enabled": true,
  "title": "Work Experience",
  "description": "Previous engineering roles.",
  "items": [
    {
      "role": "Senior Software Engineer",
      "company": "Example Company",
      "period": "2023 - Present",
      "location": "Remote",
      "description": "Architected low-latency monitoring platforms.",
      "tags": ["TypeScript", "Docker"],
      "url": "https://example.com",
      "enabled": true
    }
  ]
}

Stats Block

A row of numbers, such as years of experience or projects shipped.

{
  "type": "stats",
  "enabled": true,
  "items": [
    { "label": "Experience", "value": "5+", "description": "Years active", "icon": "briefcase", "enabled": true },
    { "label": "Projects", "value": "25+", "description": "Shipped applications", "icon": "code", "enabled": true }
  ]
}

Section Block

A heading with a badge and subtitle, to start a part of the page.

{
  "type": "section",
  "enabled": true,
  "title": "Section Title",
  "description": "Optional lead paragraph.",
  "badge": "Category",
  "align": "left"
}

Separator Block

A horizontal line.

{
  "type": "separator",
  "enabled": true,
  "variant": "solid",
  "label": ""
}
FieldTypeDescription
variantstringLine style: "solid", "dashed", or "dotted".
labelstringOptional text rendered at the center of the divider.

Testimonials Block

Quotes from people you worked with.

{
  "type": "testimonials",
  "enabled": true,
  "title": "Client Endorsements",
  "description": "What partners say.",
  "items": [
    {
      "quote": "Consistently delivers clean, performant software.",
      "author": "Example Client",
      "role": "Product Director",
      "company": "Example Inc",
      "avatar": "",
      "enabled": true
    }
  ]
}

Contact Block

A card with a heading and an email button.

{
  "type": "contact",
  "enabled": true,
  "title": "Let's build something together",
  "description": "Feel free to reach out for project inquiries.",
  "email": "[email protected]",
  "buttonText": "Send an email",
  "badge": "Connect"
}

Socials Block

Buttons for your social profiles, with brand icons.

{
  "type": "socials",
  "enabled": true,
  "align": "center",
  "items": [
    { "platform": "discord", "label": "Discord", "url": "https://example.com/discord", "enabled": true },
    { "platform": "github", "label": "GitHub", "url": "https://example.com/github", "enabled": true },
    { "platform": "x", "label": "X", "url": "https://example.com/x", "enabled": true }
  ]
}

Supported Brand Platforms

  • Font Awesome: discord, github, x, twitter, linkedin, youtube, twitch, bluesky, reddit, steam, spotify, instagram, tiktok.
  • General Lucide: globe, mail, share, user.

Image Block

A full-width image, such as a screenshot or banner.

{
  "type": "image",
  "src": "/images/banner.png",
  "alt": "My latest project",
  "caption": "The dashboard I built in 2026.",
  "height": 320,
  "radius": "md",
  "align": "center"
}
FieldWhat it does
srcImage path or URL. Files in public/ are served from /.
altText for screen readers.
captionOptional text under the image.
heightHeight in pixels.
radiusCorner rounding: xs, sm, md, lg or xl.
alignleft, center or right.

Text Block

A paragraph of your own text.

{
  "type": "text",
  "content": "I build tools for game servers and small businesses.",
  "size": "md",
  "align": "left"
}
FieldWhat it does
contentThe text.
sizesm, md or lg.
alignleft, center or right.