`). No block tags. |
| `richText` | `body` (HTML string) | Supports full HTML |
| `basicText` | `text`, `tag` (p/div/span/figcaption/address/figure), `link`, `wordsLimit`, `readMore` | Plain paragraph without WYSIWYG toolbar — use over `richText` when no inline formatting/headings needed. |
| `image` | `src`, `alt`, `link`, `alignment` | |
| `logo` | `sourceMode` (auto/image/text), `src`, `text`, `inverseSrc`, `height`, `width`, `linkType` (home/url/none), `link` | Site Logo. Default `sourceMode: 'auto'` pulls name + logo from Settings → General. `inverseSrc` swaps in once scroll > 50px (sticky/dark header). |
| `video` | `url` (YouTube), `aspectRatio` (16/9, 4/3, 1/1) | |
| `button` | `text`, `link`, `linkType` (url/whatsapp/checkout), `whatsappNumber`, `whatsappMessage`, `productId` (checkout mode), `icon`, `iconPosition`, `iconGap`, `iconSize` | `linkType='checkout'` adds 1 of `productId` to cart → /checkout (replaces the deprecated Checkout Button) and auto-fires AddToCart. Supports pixel events. |
| `textLink` | `text`, `link`, `alignment` | |
| `counter` | `count`, `label`, `prefix`, `suffix`, `alignment` | Animated number |
| `divider` | `height`, `width`, `style`, `color`, `space` | |
| `spacer` | `height` (px), `mobileHeight?` | |
| `accordion` | `items[]`, `variant`, `iconType`, `allowMultiple` | FAQ component |
| `iconList` | `children: iconListItem[]` (no props — grid = `style.desktop.layout.display: 'grid'`) | Feature list / checklist (items are child elements) |
| `iconListItem` | `icon`, `title`, `description?`, `highlight?`, `highlightLabel?`, `titleTag?`, `iconAfterTitle?` | One item inside an Icon List (child-only) |
| `alertBanner` | `message`, `variant` (info/success/warning/error), `isDismissible` | |
| `socialIcons` | `items[]` (platform, url), `size`, `variant`, `alignment` | |
| `table` | `headers[]`, `rows[]`, `striped`, `bordered` | |
| `countdownTimer` | `mode` (fixed/evergreen), `targetDate`, `evergreenSeconds`, `evergreenOnEnd`, `layout` (boxes/minimal), `alignment` | evergreen = per-visitor countdown, resumes across refresh |
| `customHtml` | `html` | Raw HTML |
| `htmlEmbed` | `html` | Embed widgets |
| `mapEmbed` | `embedUrl`, `height`, `borderRadius` | Google Maps |
| `form` | `formId` | References DB form. Success message / redirect / notifications live on the form (edit via Form Builder), not on this element. |
| `slider` | `perPage`/`perPageTablet`/`perPageMobile`, `gap`, `arrows`, `arrowsPosition` (`inside`\|`outside`), `pagination`, `sliderType` (`slide`\|`loop`\|`fade`), `autoplay`/`interval`, `speed`, `drag` | Carousel (SplideJS); each direct child = a slide. For a dynamic carousel, give it ONE child card with `queryLoop` (expands to one slide per item). Has children ✅ |
### Marketing
| Type | Key Props | Notes |
|------|-----------|-------|
| `testimonial` | `items[]` (name, rating, quote, avatar?) | |
### eCommerce
| Type | Key Props | Notes |
|------|-----------|-------|
| `productGrid` | `columns`, `limit`, `orderBy`, `showPrice` | Auto-fetches products |
| `productImageGallery` | `featuredImageSrc`, `thumbnailPosition`, `enableZoom` | Use shortcodes in templates |
| `checkoutButton` | `text`, `productId`, `alignment`, `width` | Direct to checkout |
| `checkoutItems` | `title`, `showImage`, `showQuantity` | Cart items list |
| `checkoutForm` | `title`, `showPhone`, `showAddress` | Shipping form |
| `checkoutShipping` | `title` | Shipping method picker |
| `checkoutPayment` | `title` | Payment method picker |
| `checkoutSummary` | `title`, `buttonText`, `showPromoCode` | Order total + pay button |
| `miniCheckout` | `selectedId`, `selectedType`, `successAction`, `enableCoupon` | Self-contained inline checkout for 1 product/bundle — place on landing pages |
| `courseGrid` | `columns`, `limit`, `showPrice` | Auto-fetches courses |
| `curriculumList` | `sections[]`, `defaultExpanded`, `accentColor` | Course curriculum |
### Navigation & Forms
| Type | Key Props | Notes |
|------|-----------|-------|
| `menu` | `items[]` (each with `link.type`+`dropdownType`), `desktop.layout`, `mobile.mode`, `bar.mobileLayout`, `dropdown.openOn` | Self-contained nav; items live in element props. Per-item `dropdownType: 'none' \| 'simple' \| 'mega'`. Mega items have a `megaContent: BlockSchema[]` editable via builder focused-edit. Mobile (hamburger) header arrangement via `bar.mobileLayout`: `logo-left-actions-right` \| `logo-left-burger-right` (default) \| `burger-left-actions-right` \| `burger-left-logo-right` \| `burger-left` \| `burger-right` \| `burger-left-logo-center` \| `actions-left-logo-center`. Layouts with an "actions" zone keep enabled actions (e.g. cart) on the bar; others fold them into the drawer. Drawer (panel saat hamburger diklik) styled via `mobile.drawer`: `mode` = `overlay` (default, floating absolute di bawah bar) \| `fullscreen` (panel layar penuh via portal fixed di site, item di tengah + tombol close); plus `bg`/`padding`/`borderRadius`/`shadow`/`gap`/`itemColor`/`itemColorHover`/`dividerColor`/`dividerWidth`/`maxHeight` (overlay only). |
| `searchBar` | `placeholder`, `width`, `alignment` | Site-wide search |
| `nameField` | `label`, `placeholder`, `required`, `width` | Form builder only |
| `emailField` | `label`, `placeholder`, `required` | Form builder only |
| `phoneField` | `label`, `placeholder`, `required` | Form builder only |
| `textareaField` | `label`, `rows`, `required` | Form builder only |
| `selectField` | `label`, `options[]`, `required` | Form builder only |
| `checkboxField` | `label`, `required` | Form builder only |
| `submitButton` | `text`, `alignment`, `width` | Form builder only |
### Dynamic (content-driven, template-only)
These elements auto-fill from the current post / product / page / course at render time. They ONLY make sense inside their compatible template type — placing them elsewhere yields placeholder text. The library filter (`TEMPLATE_ONLY_ELEMENTS`) hides them outside their context, so the AI should match `templateType` from the request when emitting.
> **Tip:** title/body can ALSO be composed from primitives + tags — `heading` + `{post_title}`/`{product_title}`/`{page_title}`/`{course_title}`, `richText` + `{post_content}`/`{product_description}`. Inside a Query Loop, the same entity tags resolve against the current iteration's row (so a `heading` with `{product_title}` inside a `queryLoop` on products renders the per-iteration product name). Use `{{loop.index}}` / `{{loop.first}}` etc. for iteration metadata. The legacy data-source-agnostic `{{item.*}}` set has been removed.
| Type | Compatible Templates | Key Props | Notes |
|------|----------------------|-----------|-------|
| `postTitle` | single_post, post_archive, post_category, search | `level`, `alignment`, `linkToPost` | Reads `post.title` |
| `postContent` | single_post | `plainText` | Reads `post.content` (HTML) |
| `postFeaturedImage` | single_post, post_archive, post_category, search | `aspectRatio`, `fit`, `preset`, `linkToPost` | Reads `post.featuredImageUrl` |
| `postExcerpt` | single_post, post_archive, post_category, search | `maxLength`, `fallbackToContent`, `ellipsis` | Reads `post.excerpt`, falls back to trimmed content |
| `postMeta` | single_post, post_archive, post_category, search | `showAuthor/Date/Category`, `dateFormat`, `separator`, `alignment` | Composite: author • date • category |
| `productTitle` | single_product, shop_catalog, product_category, search | `level`, `alignment`, `linkToProduct` | Reads `product.name` |
| `productPrice` | single_product, shop_catalog, product_category, search | `showOriginalOnSale`, `saleColorScheme`, `size`, `alignment` | Auto-shows sale strikethrough |
| `productDescription` | single_product | `plainText` | Reads `product.description` (HTML) |
| `productImage` | single_product, shop_catalog, product_category, search | `aspectRatio`, `fit`, `preset`, `linkToProduct` | Single thumbnail (use `productImageGallery` for gallery) |
| `addToCartButton` | single_product | `label`, `mode`, `width`, `variant`, `size`, `alignment`, `outOfStockLabel`, `needsSelectionLabel` | mode=`cart` adds + stays, `buy-now` adds + redirects to /checkout |
| `productQuantity` | single_product | `label`, `minQuantity`, `maxQuantity`, `size`, `alignment` | Stepper input; pair w/ addToCartButton |
| `productCustomerNote` | single_product | `label`, `placeholder`, `maxLength`, `rows` | Optional note textarea; value carried to cart by addToCartButton |
| `productVariants` | single_product | `style` (pills/dropdown/list), `label`, `showPrice`, `showStockState`, `alignment` | Variant picker (size/color/etc.) |
| `productStock` | single_product, shop_catalog, product_category, search | `inStockLabel`, `outOfStockLabel`, `lowStockLabel`, `lowStockThreshold`, `showCount`, `variant`, `size`, `alignment` | State badge — In Stock / Low / Out |
| `productSku` | single_product | `prefix`, `hideIfEmpty`, `size`, `alignment` | Shows SKU code |
| `productSalePercent` | single_product, shop_catalog, product_category, search | `showAs` (percent/amount/both), `variant`, `amountPrefix`, `hideWhenNoSale`, `size`, `alignment` | Discount badge — auto-hides when no sale |
| `productSalePrice` | single_product, shop_catalog, product_category, search | `alignment`, `size`, `hideWhenNoSale`, `outOfStockLabel`, `variantPriceDisplay` | Discounted price only — auto-hides when no sale |
| `productRegularPrice` | single_product, shop_catalog, product_category, search | `alignment`, `size`, `strikethrough` (onSale/always/never), `hideWhenNoSale`, `variantPriceDisplay` | Original price only — strikethrough pairs with Sale Price |
| `productCountdown` | single_product | `label`, `variant`, `showDays`, `onExpired`, `expiredText`, `labelDays/Hours/Minutes/Seconds`, `alignment` | Countdown to sale end |
| `productShare` | single_product | `label`, `platforms`, `variant`, `iconSize`, `shareText`, `alignment` | Social share buttons w/ template `{name}` `{url}` |
| `productWholesaleTable` | single_product | `title`, `layout` (table/cards/inline), `showSavings`, `qtyFormat`, `qtySuffix`, `hideWhenNoTiers`, `alignment` | Volume pricing tier table |
| `pageTitle` | single_page, search | `level`, `alignment` | Reads `page.title` (also inside a `pages` query loop). TEMPLATE only — in a tenant Page use `heading` |
| `pageContent` | single_page | `plainText` | Reads `page.content` — empty on builder-mode pages. TEMPLATE only — in a tenant Page use `richText` |
| `pageFeaturedImage` | single_page | `aspectRatio`, `fit`, `preset` | Reads `page.featuredImageUrl` — ⚠️ the `pages` table has no such column, so this always renders its placeholder. Use `image` |
| `courseTitle` | single_course, course_archive, search | `level`, `alignment` | Reads `course.title` |
| `courseDescription` | single_course | `plainText` | Reads `course.description` |
| `courseImage` | single_course, course_archive, search | `aspectRatio`, `fit`, `preset` | Reads `course.thumbnailUrl` |
> **AI guidance:** dedicated Dynamic elements (above) and primitive+tag composition are both supported. Dedicated elements (`postTitle`, `productTitle`, …) are friendlier for users dragging from the library; `{post_title}` shortcodes inside a `heading`/`richText` are handy for inline text and resolve per-iteration inside a query loop on the matching data source.
---
## Common Patterns
### Navbar (Logo + Menu + CTA)
```json
{
"id": "el-nav",
"type": "section",
"props": { "htmlTag": "header", "layoutMode": "advanced" },
"style": { "desktop": { "layout": { "display": "flex", "direction": "row", "alignItems": "center", "justifyContent": "space-between", "gap": "16px", "paddingTop": "16px", "paddingBottom": "16px", "paddingLeft": "24px", "paddingRight": "24px" }, "background": { "color": "#ffffff" } } },
"children": [
{ "id": "el-logo", "type": "logo", "props": { "sourceMode": "auto", "linkType": "home", "height": "40px" } },
{
"id": "el-nav-menu",
"type": "block",
"props": { "htmlTag": "div", "layoutMode": "advanced" },
"style": { "desktop": { "layout": { "display": "flex", "direction": "row", "flexGrow": 1, "justifyContent": "center", "alignItems": "center", "gap": "16px" } } },
"children": [
{ "id": "el-menu", "type": "menu", "props": { "items": [{ "id": "i1", "label": "Home", "link": { "type": "custom", "url": "/" }, "dropdownType": "none" }, { "id": "i2", "label": "Shop", "link": { "type": "custom", "url": "/shop" }, "dropdownType": "none" }, { "id": "i3", "label": "About", "link": { "type": "custom", "url": "/about" }, "dropdownType": "none" }], "desktop": { "layout": "horizontal", "alignment": "center", "gap": "8px" }, "mobile": { "breakpoint": "768px", "mode": "hamburger", "alignment": "right", "gap": "0px", "hamburger": { "label": "Menu", "color": "", "bg": "", "borderRadius": "" } }, "dropdown": { "openOn": "hover", "animation": "fade", "animationDuration": 200, "hoverDelay": 120 }, "styling": { "level1": { "fontSize": "", "fontWeight": "", "color": "", "colorHover": "", "bg": "", "bgHover": "", "px": "", "py": "", "borderRadius": "" }, "submenu": { "fontSize": "", "fontWeight": "", "color": "", "colorHover": "", "bg": "", "bgHover": "", "px": "", "py": "", "borderRadius": "" }, "dropdown": { "bg": "", "borderRadius": "", "shadow": "", "padding": "", "minWidth": "" } } } }
]
},
{ "id": "el-cta", "type": "button", "props": { "text": "Mulai Sekarang", "link": "#", "alignment": "right", "width": "auto" } }
]
}
```
### Hero Section (Text Left, Image Right)
```json
{
"id": "el-hero",
"type": "section",
"props": { "htmlTag": "section", "layoutMode": "simple" },
"style": { "desktop": { "layout": { "paddingTop": "80px", "paddingBottom": "80px" } } },
"children": [
{
"id": "el-hero-cont",
"type": "container",
"props": { "htmlTag": "div", "layoutMode": "advanced" },
"style": { "desktop": { "layout": { "display": "grid", "gridTemplateColumns": "1fr 1fr", "gap": "48px", "alignItems": "center" } } },
"children": [
{
"id": "el-hero-col1",
"type": "block",
"props": { "htmlTag": "div", "layoutMode": "simple" },
"style": { "desktop": { "layout": { "display": "flex", "gap": "24px" } } },
"children": [
{ "id": "el-h1", "type": "heading", "props": { "text": "Solusi Terbaik untuk Bisnis Kamu", "level": "h1", "alignment": "left" } },
{ "id": "el-sub", "type": "richText", "props": { "body": "Deskripsi singkat yang menarik perhatian calon pelanggan kamu.
" } },
{ "id": "el-cta-btn", "type": "button", "props": { "text": "Mulai Gratis", "link": "#", "alignment": "left", "width": "auto" } }
]
},
{
"id": "el-hero-col2",
"type": "block",
"props": { "htmlTag": "div", "layoutMode": "advanced" },
"style": { "desktop": { "layout": { "display": "flex", "alignItems": "center", "justifyContent": "center" } } },
"children": [
{ "id": "el-hero-img", "type": "image", "props": { "src": "", "alt": "Hero Image" } }
]
}
]
}
]
}
```
---
## Shortcodes (Template Pages)
Use in `src`, `text`, or `body` props for template pages:
| Shortcode | Used In | Value |
|-----------|---------|-------|
| `{site_logo}` | header/footer | Site logo image URL |
| `{site_name}` | any | Site name string |
| `{site_tagline}` | any | Site tagline |
| `{site_year}` | footer | Current year |
| `{product_title}` | single_product | Product name |
| `{product_price}` | single_product | Current price, formatted (sale-aware) — no filter needed |
| `{product_sale_price}` | single_product | Discounted price, formatted; empty when not on sale |
| `{product_original_price}` | single_product | Pre-sale price, formatted (for strikethrough); empty when not on sale |
| `{product_description}` | single_product | Product description HTML |
| `{product_image}` | single_product | Featured image URL |
| `{product_gallery_images}` | single_product | Gallery images JSON |
| `{post_title}` | single_post | Post title |
| `{post_content}` | single_post | Post body HTML |
| `{post_featured_image}` | single_post | Featured image URL |
| `{cart_count}` | header/checkout | Number of cart items |
---
## Common Lucide Icons
`Check` `CheckCircle` `Shield` `Star` `Zap` `Heart` `Globe` `Lock` `Users` `Mail` `Phone` `MapPin` `Clock` `Calendar` `Award` `Lightbulb` `Rocket` `TrendingUp` `Package` `ShoppingCart` `CreditCard` `Truck` `Headphones` `MessageSquare` `ArrowRight` `ChevronRight` `Code` `Settings` `Search` `Menu` `Home` `User` `Eye` `Download` `Share2` `Facebook` `Instagram` `Youtube` `Linkedin`
---
## Tips for AI Generation
- **Always use `section → container`** as the base structure for each page section.
- **For any side-by-side / multi-column layout**: use a `container` with `style.desktop.layout.display: "grid"` and `gridTemplateColumns: "1fr 1fr"` (or `"repeat(N, 1fr)"`). Drop to `repeat(1, 1fr)` at `style.mobile.layout` if you want columns to stack.
- **For a horizontal row** (stats, buttons, icons): set `style.desktop.layout.direction: "row"` on a `block` or `container` and emit `props.layoutMode: "advanced"`.
- **Dark/colored sections**: set `section style.background.color`.
- **White text on dark bg**: set element `style.typography.color: "#ffffff"`.
- **Full-width buttons**: set `width: "full"` on `button`.
- **Center content**: set `alignItems: "center"` on the parent container.
- **Vertical spacing between sections**: use `spacer` or `paddingTop/Bottom` on section style.
- **Custom nav without `menu` element**: section(row) → [image(logo), block(flex-grow=1, row) → [textLink × n], button(CTA)].
- **Generate complete schemas** — don't leave empty element arrays, fill with placeholder content.
## Worked examples (ready to import)
Each block below is a complete page schema — paste it straight into Import. Adapt the copy/content to the request, keep the structure.
### landing-shop — Full-page landing for an online store (template type: home). Demonstrates: nav section, two-column hero with CTA, iconList feature row, dynamic product grid via queryLoop, testimonials, dark CTA band with explicit background, and a multi-column footer. Topic: fashion/retail store.
```json
{
"elements": [
{
"id": "el-nav",
"type": "section",
"props": {
"htmlTag": "header",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"alignItems": "center",
"justifyContent": "space-between",
"gap": "var(--theme-space-md)",
"paddingTop": "var(--theme-space-md)",
"paddingBottom": "var(--theme-space-md)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-surface-card, #ffffff)"
}
}
},
"children": [
{
"id": "el-logo",
"type": "logo",
"props": {
"sourceMode": "auto",
"linkType": "home",
"height": "40px"
}
},
{
"id": "el-nav-menu",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"flexGrow": 1,
"justifyContent": "center",
"alignItems": "center",
"gap": "var(--theme-space-md)"
}
}
},
"children": [
{
"id": "el-menu",
"type": "menu",
"props": {
"items": [
{
"id": "i1",
"label": "Beranda",
"link": {
"type": "custom",
"url": "/"
},
"dropdownType": "none"
},
{
"id": "i2",
"label": "Katalog",
"link": {
"type": "custom",
"url": "/shop"
},
"dropdownType": "none"
},
{
"id": "i3",
"label": "Tentang",
"link": {
"type": "custom",
"url": "/about"
},
"dropdownType": "none"
}
]
}
}
]
},
{
"id": "el-nav-cta",
"type": "button",
"props": {
"text": "Belanja",
"link": "/shop",
"alignment": "right",
"width": "auto",
"icon": "ShoppingCart",
"iconPosition": "left"
}
}
]
},
{
"id": "el-hero",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-hero-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "1fr 1fr",
"gap": "var(--theme-space-xl)",
"alignItems": "center"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-hero-col1",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-hero-h1",
"type": "heading",
"props": {
"text": "Gaya Baru, Setiap Hari",
"level": "h1",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"fontSize": "48px",
"fontWeight": "700"
}
}
}
},
{
"id": "el-hero-sub",
"type": "richText",
"props": {
"body": "Koleksi pakaian premium dengan harga bersahabat. Pengiriman cepat ke seluruh Indonesia.
"
}
},
{
"id": "el-hero-actions",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"gap": "var(--theme-space-md)"
}
}
},
"children": [
{
"id": "el-hero-cta1",
"type": "button",
"props": {
"text": "Belanja Sekarang",
"link": "/shop",
"alignment": "left",
"width": "auto"
}
},
{
"id": "el-hero-cta2",
"type": "button",
"props": {
"text": "Lihat Koleksi",
"link": "/shop?sort=new",
"alignment": "left",
"width": "auto"
}
}
]
}
]
},
{
"id": "el-hero-col2",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"alignItems": "center",
"justifyContent": "center"
}
}
},
"children": [
{
"id": "el-hero-img",
"type": "image",
"props": {
"src": "",
"alt": "Model mengenakan koleksi terbaru"
}
}
]
}
]
}
]
},
{
"id": "el-features",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xxl)",
"paddingBottom": "var(--theme-space-xxl)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "color-mix(in srgb,var(--theme-ink,#111) 4%,#fff)"
}
}
},
"children": [
{
"id": "el-features-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {}
}
},
"children": [
{
"id": "el-features-list",
"type": "iconList",
"props": {
"layout": "grid",
"columns": 3
},
"children": [
{
"id": "el-feat-1",
"type": "iconListItem",
"props": {
"icon": "Truck",
"title": "Gratis Ongkir",
"description": "Untuk pembelian di atas Rp200.000"
}
},
{
"id": "el-feat-2",
"type": "iconListItem",
"props": {
"icon": "Shield",
"title": "Garansi Kualitas",
"description": "Tukar gratis dalam 7 hari"
}
},
{
"id": "el-feat-3",
"type": "iconListItem",
"props": {
"icon": "Headphones",
"title": "Dukungan 24/7",
"description": "Tim kami siap membantu kapan saja"
}
}
]
}
]
}
]
},
{
"id": "el-products",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-products-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-xl)"
}
}
},
"children": [
{
"id": "el-products-h",
"type": "heading",
"props": {
"text": "Produk Terlaris",
"level": "h2",
"alignment": "center"
}
},
{
"id": "el-products-grid",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "repeat(3, 1fr)",
"gap": "var(--theme-space-lg)"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-product-card",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple",
"queryLoop": {
"enabled": true,
"source": "products",
"limit": 6,
"orderBy": "best_selling"
}
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-sm)"
}
}
},
"children": [
{
"id": "el-pc-img",
"type": "image",
"props": {
"src": "{product_image}",
"alt": "{product_title}",
"link": "{product_url}"
}
},
{
"id": "el-pc-title",
"type": "heading",
"props": {
"text": "{product_title}",
"level": "h3",
"alignment": "left"
}
},
{
"id": "el-pc-price",
"type": "richText",
"props": {
"body": "{product_price}
"
}
}
]
}
]
}
]
}
]
},
{
"id": "el-testi",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xxl)",
"paddingBottom": "var(--theme-space-xxl)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "color-mix(in srgb,var(--theme-ink,#111) 4%,#fff)"
}
}
},
"children": [
{
"id": "el-testi-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {}
}
},
"children": [
{
"id": "el-testi-grid",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "repeat(2, 1fr)",
"gap": "var(--theme-space-lg)"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-testi-1",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-sm)",
"paddingTop": "var(--theme-space-lg)",
"paddingBottom": "var(--theme-space-lg)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-surface-card, #ffffff)"
},
"border": {
"style": "solid",
"width": {
"top": "1px",
"right": "1px",
"bottom": "1px",
"left": "1px"
},
"color": "var(--theme-hairline, #e5e5e5)",
"radius": {
"topLeft": "12px",
"topRight": "12px",
"bottomRight": "12px",
"bottomLeft": "12px"
}
}
}
},
"children": [
{
"id": "el-testi-1-q",
"type": "richText",
"props": {
"body": "\"Kualitas bahannya bagus banget, pengiriman juga cepat!\"
"
}
},
{
"id": "el-testi-1-n",
"type": "heading",
"props": {
"text": "Sari W.",
"level": "h4",
"alignment": "left"
}
}
]
},
{
"id": "el-testi-2",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-sm)",
"paddingTop": "var(--theme-space-lg)",
"paddingBottom": "var(--theme-space-lg)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-surface-card, #ffffff)"
},
"border": {
"style": "solid",
"width": {
"top": "1px",
"right": "1px",
"bottom": "1px",
"left": "1px"
},
"color": "var(--theme-hairline, #e5e5e5)",
"radius": {
"topLeft": "12px",
"topRight": "12px",
"bottomRight": "12px",
"bottomLeft": "12px"
}
}
}
},
"children": [
{
"id": "el-testi-2-q",
"type": "richText",
"props": {
"body": "\"Sudah langganan, selalu puas dengan pelayanannya.\"
"
}
},
{
"id": "el-testi-2-n",
"type": "heading",
"props": {
"text": "Budi P.",
"level": "h4",
"alignment": "left"
}
}
]
}
]
}
]
}
]
},
{
"id": "el-cta",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-ink, #141413)"
}
}
},
"children": [
{
"id": "el-cta-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"alignItems": "center",
"gap": "var(--theme-space-lg)",
"maxWidth": "720px"
}
}
},
"children": [
{
"id": "el-cta-h",
"type": "heading",
"props": {
"text": "Daftar & Dapatkan Diskon 15%",
"level": "h2",
"alignment": "center"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-cta-p",
"type": "richText",
"props": {
"body": "Jadi member dan nikmati penawaran eksklusif setiap minggu.
"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-cta-btn",
"type": "button",
"props": {
"text": "Daftar Sekarang",
"link": "/register",
"alignment": "center",
"width": "auto"
}
}
]
}
]
},
{
"id": "el-footer",
"type": "section",
"props": {
"htmlTag": "footer",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xxl)",
"paddingBottom": "var(--theme-space-xl)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-surface-card, #ffffff)"
}
}
},
"children": [
{
"id": "el-footer-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "2fr 1fr 1fr",
"gap": "var(--theme-space-xl)"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-footer-brand",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-sm)"
}
}
},
"children": [
{
"id": "el-footer-logo",
"type": "logo",
"props": {
"sourceMode": "auto",
"linkType": "home",
"height": "32px"
}
},
{
"id": "el-footer-tag",
"type": "basicText",
"props": {
"text": "{site_tagline}",
"tag": "p"
}
},
{
"id": "el-footer-social",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"gap": "var(--theme-space-md)"
}
}
},
"children": [
{
"id": "el-footer-ig",
"type": "textLink",
"props": {
"text": "Instagram",
"link": "#",
"alignment": "left"
}
},
{
"id": "el-footer-fb",
"type": "textLink",
"props": {
"text": "Facebook",
"link": "#",
"alignment": "left"
}
}
]
}
]
},
{
"id": "el-footer-links1",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-xs)"
}
}
},
"children": [
{
"id": "el-fl1-h",
"type": "heading",
"props": {
"text": "Toko",
"level": "h4",
"alignment": "left"
}
},
{
"id": "el-fl1-a",
"type": "textLink",
"props": {
"text": "Katalog",
"link": "/shop",
"alignment": "left"
}
},
{
"id": "el-fl1-b",
"type": "textLink",
"props": {
"text": "Promo",
"link": "/shop?promo=1",
"alignment": "left"
}
}
]
},
{
"id": "el-footer-links2",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-xs)"
}
}
},
"children": [
{
"id": "el-fl2-h",
"type": "heading",
"props": {
"text": "Bantuan",
"level": "h4",
"alignment": "left"
}
},
{
"id": "el-fl2-a",
"type": "textLink",
"props": {
"text": "Kontak",
"link": "/contact",
"alignment": "left"
}
},
{
"id": "el-fl2-b",
"type": "textLink",
"props": {
"text": "Kebijakan",
"link": "/policy",
"alignment": "left"
}
}
]
}
]
}
]
}
]
}
```
### landing-service — Full-page landing for a service business / agency (template type: home). Demonstrates: centered hero, services grid built from container+block cards (no dynamic data), stats row with counters, FAQ via accordion+accordionItem, and a contact section referencing a DB form. Topic: digital agency / professional services.
```json
{
"elements": [
{
"id": "el-hero",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-ink, #141413)"
}
}
},
"children": [
{
"id": "el-hero-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"alignItems": "center",
"gap": "var(--theme-space-lg)",
"maxWidth": "760px"
}
}
},
"children": [
{
"id": "el-hero-h1",
"type": "heading",
"props": {
"text": "Kami Bantu Bisnis Kamu Tumbuh",
"level": "h1",
"alignment": "center"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)",
"fontSize": "52px",
"fontWeight": "700"
}
}
}
},
{
"id": "el-hero-sub",
"type": "richText",
"props": {
"body": "Strategi digital, desain, dan pengembangan web yang terukur untuk hasil nyata.
"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-hero-cta",
"type": "button",
"props": {
"text": "Konsultasi Gratis",
"link": "#kontak",
"alignment": "center",
"width": "auto"
}
}
]
}
]
},
{
"id": "el-services",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-services-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-xl)"
}
}
},
"children": [
{
"id": "el-services-h",
"type": "heading",
"props": {
"text": "Layanan Kami",
"level": "h2",
"alignment": "center"
}
},
{
"id": "el-services-grid",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "repeat(3, 1fr)",
"gap": "var(--theme-space-lg)"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-svc-1",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-sm)",
"paddingTop": "var(--theme-space-lg)",
"paddingBottom": "var(--theme-space-lg)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"border": {
"style": "solid",
"width": {
"top": "1px",
"right": "1px",
"bottom": "1px",
"left": "1px"
},
"color": "var(--theme-hairline, #e5e5e5)",
"radius": {
"topLeft": "12px",
"topRight": "12px",
"bottomRight": "12px",
"bottomLeft": "12px"
}
}
}
},
"children": [
{
"id": "el-svc-1-h",
"type": "heading",
"props": {
"text": "Web Development",
"level": "h3",
"alignment": "left"
}
},
{
"id": "el-svc-1-p",
"type": "richText",
"props": {
"body": "Website cepat, modern, dan siap konversi.
"
}
}
]
},
{
"id": "el-svc-2",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-sm)",
"paddingTop": "var(--theme-space-lg)",
"paddingBottom": "var(--theme-space-lg)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"border": {
"style": "solid",
"width": {
"top": "1px",
"right": "1px",
"bottom": "1px",
"left": "1px"
},
"color": "var(--theme-hairline, #e5e5e5)",
"radius": {
"topLeft": "12px",
"topRight": "12px",
"bottomRight": "12px",
"bottomLeft": "12px"
}
}
}
},
"children": [
{
"id": "el-svc-2-h",
"type": "heading",
"props": {
"text": "Branding & Desain",
"level": "h3",
"alignment": "left"
}
},
{
"id": "el-svc-2-p",
"type": "richText",
"props": {
"body": "Identitas visual yang kuat dan konsisten.
"
}
}
]
},
{
"id": "el-svc-3",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-sm)",
"paddingTop": "var(--theme-space-lg)",
"paddingBottom": "var(--theme-space-lg)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"border": {
"style": "solid",
"width": {
"top": "1px",
"right": "1px",
"bottom": "1px",
"left": "1px"
},
"color": "var(--theme-hairline, #e5e5e5)",
"radius": {
"topLeft": "12px",
"topRight": "12px",
"bottomRight": "12px",
"bottomLeft": "12px"
}
}
}
},
"children": [
{
"id": "el-svc-3-h",
"type": "heading",
"props": {
"text": "Digital Marketing",
"level": "h3",
"alignment": "left"
}
},
{
"id": "el-svc-3-p",
"type": "richText",
"props": {
"body": "Kampanye berbasis data untuk pertumbuhan.
"
}
}
]
}
]
}
]
}
]
},
{
"id": "el-stats",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xxl)",
"paddingBottom": "var(--theme-space-xxl)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "color-mix(in srgb,var(--theme-ink,#111) 4%,#fff)"
}
}
},
"children": [
{
"id": "el-stats-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "repeat(3, 1fr)",
"gap": "var(--theme-space-lg)"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-stat-1",
"type": "counter",
"props": {
"count": 250,
"suffix": "+",
"label": "Proyek Selesai",
"alignment": "center"
}
},
{
"id": "el-stat-2",
"type": "counter",
"props": {
"count": 98,
"suffix": "%",
"label": "Klien Puas",
"alignment": "center"
}
},
{
"id": "el-stat-3",
"type": "counter",
"props": {
"count": 12,
"suffix": " thn",
"label": "Pengalaman",
"alignment": "center"
}
}
]
}
]
},
{
"id": "el-faq",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-faq-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-lg)",
"maxWidth": "760px"
}
}
},
"children": [
{
"id": "el-faq-h",
"type": "heading",
"props": {
"text": "Pertanyaan Umum",
"level": "h2",
"alignment": "center"
}
},
{
"id": "el-faq-acc",
"type": "accordion",
"props": {
"allowMultiple": false,
"iconType": "chevron"
},
"children": [
{
"id": "el-faq-1",
"type": "accordionItem",
"props": {
"title": "Berapa lama pengerjaan sebuah proyek?"
},
"children": [
{
"id": "el-faq-1-b",
"type": "richText",
"props": {
"body": "Umumnya 2–6 minggu tergantung kompleksitas dan ruang lingkup.
"
}
}
]
},
{
"id": "el-faq-2",
"type": "accordionItem",
"props": {
"title": "Apakah ada garansi revisi?"
},
"children": [
{
"id": "el-faq-2-b",
"type": "richText",
"props": {
"body": "Ya, setiap paket mencakup revisi sesuai kesepakatan di awal.
"
}
}
]
}
]
}
]
}
]
},
{
"id": "el-kontak",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"selectorConfig": {
"cssId": "kontak"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "color-mix(in srgb,var(--theme-ink,#111) 4%,#fff)"
}
}
},
"children": [
{
"id": "el-kontak-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-lg)",
"maxWidth": "640px"
}
}
},
"children": [
{
"id": "el-kontak-h",
"type": "heading",
"props": {
"text": "Hubungi Kami",
"level": "h2",
"alignment": "center"
}
},
{
"id": "el-kontak-p",
"type": "richText",
"props": {
"body": "Hubungi kami lewat tombol di bawah — tim kami membalas dalam 1×24 jam.
"
}
},
{
"id": "el-kontak-info",
"type": "iconList",
"props": {
"layout": "vertical"
},
"children": [
{
"id": "el-kontak-email",
"type": "iconListItem",
"props": {
"icon": "Mail",
"title": "halo@contoh.com"
}
},
{
"id": "el-kontak-phone",
"type": "iconListItem",
"props": {
"icon": "Phone",
"title": "+62 812-3456-7890"
}
}
]
},
{
"id": "el-kontak-cta",
"type": "button",
"props": {
"text": "Chat via WhatsApp",
"linkType": "whatsapp",
"whatsappNumber": "6281234567890",
"whatsappMessage": "Halo, saya ingin konsultasi",
"icon": "MessageSquare",
"iconPosition": "left"
},
"style": {
"desktop": {
"layout": {
"alignSelf": "center"
}
}
}
}
]
}
]
}
]
}
```
### landing-course — Full-page landing for an online course / LMS (template type: home). Demonstrates: hero with single CTA, value-prop iconList, 'what you'll learn' checklist, dynamic course grid via queryLoop on the courses source, instructor highlight (two-col), and a dark CTA band. Topic: e-learning / eCourse.
```json
{
"elements": [
{
"id": "el-hero",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-hero-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"alignItems": "center",
"gap": "var(--theme-space-lg)",
"maxWidth": "780px"
}
}
},
"children": [
{
"id": "el-hero-badge",
"type": "alertBanner",
"props": {
"message": "Akses seumur hidup + sertifikat",
"variant": "info",
"isDismissible": false
}
},
{
"id": "el-hero-h1",
"type": "heading",
"props": {
"text": "Kuasai Skill Baru dari Nol",
"level": "h1",
"alignment": "center"
},
"style": {
"desktop": {
"typography": {
"fontSize": "52px",
"fontWeight": "700"
}
}
}
},
{
"id": "el-hero-sub",
"type": "richText",
"props": {
"body": "Belajar langsung dari praktisi dengan studi kasus nyata dan latihan terstruktur.
"
}
},
{
"id": "el-hero-cta",
"type": "button",
"props": {
"text": "Lihat Semua Kelas",
"link": "/courses",
"alignment": "center",
"width": "auto"
}
}
]
}
]
},
{
"id": "el-learn",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xxl)",
"paddingBottom": "var(--theme-space-xxl)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "color-mix(in srgb,var(--theme-ink,#111) 4%,#fff)"
}
}
},
"children": [
{
"id": "el-learn-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-lg)",
"maxWidth": "900px"
}
}
},
"children": [
{
"id": "el-learn-h",
"type": "heading",
"props": {
"text": "Yang Akan Kamu Pelajari",
"level": "h2",
"alignment": "center"
}
},
{
"id": "el-learn-list",
"type": "iconList",
"props": {
"layout": "grid",
"columns": 2
},
"children": [
{
"id": "el-learn-1",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "Dasar hingga mahir",
"description": "Kurikulum bertahap yang mudah diikuti"
}
},
{
"id": "el-learn-2",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "Proyek nyata",
"description": "Portofolio yang bisa langsung dipakai"
}
},
{
"id": "el-learn-3",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "Komunitas aktif",
"description": "Diskusi dan dukungan sesama peserta"
}
},
{
"id": "el-learn-4",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "Sertifikat resmi",
"description": "Bukti kompetensi setelah lulus"
}
}
]
}
]
}
]
},
{
"id": "el-courses",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-courses-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-xl)"
}
}
},
"children": [
{
"id": "el-courses-h",
"type": "heading",
"props": {
"text": "Kelas Populer",
"level": "h2",
"alignment": "center"
}
},
{
"id": "el-courses-grid",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "repeat(3, 1fr)",
"gap": "var(--theme-space-lg)"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-course-card",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple",
"queryLoop": {
"enabled": true,
"source": "courses",
"limit": 6,
"orderBy": "popular"
}
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-sm)"
}
}
},
"children": [
{
"id": "el-cc-img",
"type": "courseImage",
"props": {
"aspectRatio": "16/9",
"fit": "cover",
"preset": "cardWide"
}
},
{
"id": "el-cc-title",
"type": "courseTitle",
"props": {
"level": "h3",
"alignment": "left"
}
}
]
}
]
}
]
}
]
},
{
"id": "el-instr",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xxl)",
"paddingBottom": "var(--theme-space-xxl)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "color-mix(in srgb,var(--theme-ink,#111) 4%,#fff)"
}
}
},
"children": [
{
"id": "el-instr-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "1fr 2fr",
"gap": "var(--theme-space-xl)",
"alignItems": "center"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-instr-img-wrap",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"justifyContent": "center"
}
}
},
"children": [
{
"id": "el-instr-img",
"type": "image",
"props": {
"src": "",
"alt": "Foto instruktur"
}
}
]
},
{
"id": "el-instr-body",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-md)"
}
}
},
"children": [
{
"id": "el-instr-h",
"type": "heading",
"props": {
"text": "Diajar oleh Praktisi Berpengalaman",
"level": "h2",
"alignment": "left"
}
},
{
"id": "el-instr-p",
"type": "richText",
"props": {
"body": "Instruktur kami telah membimbing ribuan peserta dengan pendekatan praktis dan mudah dipahami.
"
}
}
]
}
]
}
]
},
{
"id": "el-cta",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-ink, #141413)"
}
}
},
"children": [
{
"id": "el-cta-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"alignItems": "center",
"gap": "var(--theme-space-lg)",
"maxWidth": "680px"
}
}
},
"children": [
{
"id": "el-cta-h",
"type": "heading",
"props": {
"text": "Mulai Belajar Hari Ini",
"level": "h2",
"alignment": "center"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-cta-btn",
"type": "button",
"props": {
"text": "Daftar Kelas",
"link": "/courses",
"alignment": "center",
"width": "auto"
}
}
]
}
]
}
]
}
```
### landing-saas — Full-page landing for a SaaS / digital product (template type: home). Demonstrates: centered hero, logos/trust row, feature blocks alternating two-col, a pricing section built from container+block plan cards with iconList feature checklists, and a final CTA. Topic: software product / app.
```json
{
"elements": [
{
"id": "el-hero",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-hero-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"alignItems": "center",
"gap": "var(--theme-space-lg)",
"maxWidth": "820px"
}
}
},
"children": [
{
"id": "el-hero-h1",
"type": "heading",
"props": {
"text": "Kelola Bisnis dalam Satu Dasbor",
"level": "h1",
"alignment": "center"
},
"style": {
"desktop": {
"typography": {
"fontSize": "56px",
"fontWeight": "700"
}
}
}
},
{
"id": "el-hero-sub",
"type": "richText",
"props": {
"body": "Otomatiskan pekerjaan rutin dan fokus pada yang penting. Coba gratis 14 hari, tanpa kartu kredit.
"
}
},
{
"id": "el-hero-actions",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"justifyContent": "center",
"gap": "var(--theme-space-md)"
}
}
},
"children": [
{
"id": "el-hero-cta1",
"type": "button",
"props": {
"text": "Coba Gratis",
"link": "/register",
"alignment": "center",
"width": "auto"
}
},
{
"id": "el-hero-cta2",
"type": "button",
"props": {
"text": "Lihat Demo",
"link": "#demo",
"alignment": "center",
"width": "auto",
"icon": "ArrowRight",
"iconPosition": "right"
}
}
]
}
]
}
]
},
{
"id": "el-feature",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xxl)",
"paddingBottom": "var(--theme-space-xxl)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-feature-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "1fr 1fr",
"gap": "var(--theme-space-xl)",
"alignItems": "center"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-feature-body",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-md)"
}
}
},
"children": [
{
"id": "el-feature-h",
"type": "heading",
"props": {
"text": "Analitik Real-Time",
"level": "h2",
"alignment": "left"
}
},
{
"id": "el-feature-p",
"type": "richText",
"props": {
"body": "Pantau performa bisnis kamu kapan saja dengan dasbor yang intuitif dan laporan otomatis.
"
}
},
{
"id": "el-feature-link",
"type": "textLink",
"props": {
"text": "Pelajari lebih lanjut",
"link": "#fitur",
"alignment": "left"
}
}
]
},
{
"id": "el-feature-img-wrap",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"justifyContent": "center"
}
}
},
"children": [
{
"id": "el-feature-img",
"type": "image",
"props": {
"src": "",
"alt": "Tangkapan layar dasbor"
}
}
]
}
]
}
]
},
{
"id": "el-pricing",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "color-mix(in srgb,var(--theme-ink,#111) 4%,#fff)"
}
}
},
"children": [
{
"id": "el-pricing-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-xl)"
}
}
},
"children": [
{
"id": "el-pricing-h",
"type": "heading",
"props": {
"text": "Harga Sederhana & Transparan",
"level": "h2",
"alignment": "center"
}
},
{
"id": "el-pricing-grid",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "repeat(3, 1fr)",
"gap": "var(--theme-space-lg)",
"alignItems": "stretch"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-plan-1",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-md)",
"paddingTop": "var(--theme-space-xl)",
"paddingBottom": "var(--theme-space-xl)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-surface-card, #ffffff)"
},
"border": {
"style": "solid",
"width": {
"top": "1px",
"right": "1px",
"bottom": "1px",
"left": "1px"
},
"color": "var(--theme-hairline, #e5e5e5)",
"radius": {
"topLeft": "16px",
"topRight": "16px",
"bottomRight": "16px",
"bottomLeft": "16px"
}
}
}
},
"children": [
{
"id": "el-plan-1-name",
"type": "heading",
"props": {
"text": "Starter",
"level": "h3",
"alignment": "left"
}
},
{
"id": "el-plan-1-price",
"type": "heading",
"props": {
"text": "Rp99rb/bln",
"level": "h2",
"alignment": "left"
}
},
{
"id": "el-plan-1-feats",
"type": "iconList",
"props": {
"layout": "vertical"
},
"children": [
{
"id": "el-p1-f1",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "1 pengguna"
}
},
{
"id": "el-p1-f2",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "Laporan dasar"
}
}
]
},
{
"id": "el-plan-1-cta",
"type": "button",
"props": {
"text": "Pilih Starter",
"link": "/register?plan=starter",
"alignment": "left",
"width": "full"
}
}
]
},
{
"id": "el-plan-2",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-md)",
"paddingTop": "var(--theme-space-xl)",
"paddingBottom": "var(--theme-space-xl)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-ink, #141413)"
},
"border": {
"style": "solid",
"width": {
"top": "1px",
"right": "1px",
"bottom": "1px",
"left": "1px"
},
"color": "var(--theme-ink, #141413)",
"radius": {
"topLeft": "16px",
"topRight": "16px",
"bottomRight": "16px",
"bottomLeft": "16px"
}
}
}
},
"children": [
{
"id": "el-plan-2-name",
"type": "heading",
"props": {
"text": "Pro",
"level": "h3",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-plan-2-price",
"type": "heading",
"props": {
"text": "Rp249rb/bln",
"level": "h2",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-plan-2-feats",
"type": "iconList",
"props": {
"layout": "vertical"
},
"children": [
{
"id": "el-p2-f1",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "5 pengguna"
}
},
{
"id": "el-p2-f2",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "Analitik lanjutan"
}
},
{
"id": "el-p2-f3",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "Dukungan prioritas"
}
}
]
},
{
"id": "el-plan-2-cta",
"type": "button",
"props": {
"text": "Pilih Pro",
"link": "/register?plan=pro",
"alignment": "left",
"width": "full"
}
}
]
},
{
"id": "el-plan-3",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-md)",
"paddingTop": "var(--theme-space-xl)",
"paddingBottom": "var(--theme-space-xl)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-surface-card, #ffffff)"
},
"border": {
"style": "solid",
"width": {
"top": "1px",
"right": "1px",
"bottom": "1px",
"left": "1px"
},
"color": "var(--theme-hairline, #e5e5e5)",
"radius": {
"topLeft": "16px",
"topRight": "16px",
"bottomRight": "16px",
"bottomLeft": "16px"
}
}
}
},
"children": [
{
"id": "el-plan-3-name",
"type": "heading",
"props": {
"text": "Business",
"level": "h3",
"alignment": "left"
}
},
{
"id": "el-plan-3-price",
"type": "heading",
"props": {
"text": "Hubungi kami",
"level": "h2",
"alignment": "left"
}
},
{
"id": "el-plan-3-feats",
"type": "iconList",
"props": {
"layout": "vertical"
},
"children": [
{
"id": "el-p3-f1",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "Pengguna tak terbatas"
}
},
{
"id": "el-p3-f2",
"type": "iconListItem",
"props": {
"icon": "Check",
"title": "SLA & onboarding khusus"
}
}
]
},
{
"id": "el-plan-3-cta",
"type": "button",
"props": {
"text": "Hubungi Sales",
"link": "/contact",
"alignment": "left",
"width": "full"
}
}
]
}
]
}
]
}
]
},
{
"id": "el-cta",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-section)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-cta-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"alignItems": "center",
"gap": "var(--theme-space-lg)",
"maxWidth": "680px"
}
}
},
"children": [
{
"id": "el-cta-h",
"type": "heading",
"props": {
"text": "Siap Meningkatkan Produktivitas?",
"level": "h2",
"alignment": "center"
}
},
{
"id": "el-cta-btn",
"type": "button",
"props": {
"text": "Mulai Uji Coba Gratis",
"link": "/register",
"alignment": "center",
"width": "auto"
}
}
]
}
]
}
]
}
```
### template-single-product — Template: single_product. Standard 2-column product detail (gallery left, info+CTA right) using dedicated Dynamic elements. NOTE: do NOT include header/footer — they are global chrome added automatically. Required: productTitle, productPrice. Dynamic elements bind to the ambient product at render.
```json
{
"elements": [
{
"id": "el-pd",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xl)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-pd-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "1fr 1fr",
"gap": "var(--theme-space-xl)",
"alignItems": "start"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-pd-gallery-wrap",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"children": [
{
"id": "el-pd-gallery",
"type": "productImageGallery",
"props": {
"thumbnailPosition": "bottom",
"enableZoom": true
}
}
]
},
{
"id": "el-pd-info",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-md)"
}
}
},
"children": [
{
"id": "el-pd-stock",
"type": "productStock",
"props": {
"variant": "badge",
"size": "sm",
"alignment": "left"
}
},
{
"id": "el-pd-title",
"type": "productTitle",
"props": {
"level": "h1",
"alignment": "left"
}
},
{
"id": "el-pd-price-row",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"alignItems": "center",
"gap": "var(--theme-space-sm)"
}
}
},
"children": [
{
"id": "el-pd-price",
"type": "productPrice",
"props": {
"showOriginalOnSale": true,
"size": "lg",
"alignment": "left"
}
},
{
"id": "el-pd-salepct",
"type": "productSalePercent",
"props": {
"showAs": "percent",
"variant": "badge",
"hideWhenNoSale": true,
"size": "sm",
"alignment": "left"
}
}
]
},
{
"id": "el-pd-desc",
"type": "productDescription",
"props": {
"plainText": false
}
},
{
"id": "el-pd-variants",
"type": "productVariants",
"props": {
"style": "pills",
"label": "Pilihan",
"showPrice": false,
"alignment": "left"
}
},
{
"id": "el-pd-buy-row",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"alignItems": "end",
"gap": "var(--theme-space-md)"
}
}
},
"children": [
{
"id": "el-pd-qty",
"type": "productQuantity",
"props": {
"label": "Jumlah",
"minQuantity": 1,
"size": "md",
"alignment": "left"
}
},
{
"id": "el-pd-atc",
"type": "addToCartButton",
"props": {
"label": "Tambah ke Keranjang",
"mode": "cart",
"width": "full",
"size": "lg",
"alignment": "left"
}
}
]
},
{
"id": "el-pd-sku",
"type": "productSku",
"props": {
"prefix": "SKU:",
"hideIfEmpty": true,
"size": "sm",
"alignment": "left"
}
},
{
"id": "el-pd-share",
"type": "productShare",
"props": {
"label": "Bagikan:",
"platforms": [
"whatsapp",
"facebook",
"x"
],
"variant": "icon",
"alignment": "left"
}
}
]
}
]
}
]
}
]
}
```
### template-single-post — Template: single_post. Blog article layout using dedicated Dynamic post elements. NOTE: do NOT include header/footer (global chrome). Demonstrates featured image, title, meta (author/date/category), and full content. Dynamic elements bind to the ambient post at render.
```json
{
"elements": [
{
"id": "el-post",
"type": "section",
"props": {
"htmlTag": "article",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xl)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-post-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-lg)",
"maxWidth": "760px"
}
}
},
"children": [
{
"id": "el-post-title",
"type": "postTitle",
"props": {
"level": "h1",
"alignment": "left",
"linkToPost": false
}
},
{
"id": "el-post-meta",
"type": "postMeta",
"props": {
"showAuthor": true,
"showDate": true,
"showCategory": true,
"dateFormat": "long",
"separator": "•",
"alignment": "left"
}
},
{
"id": "el-post-img",
"type": "postFeaturedImage",
"props": {
"aspectRatio": "16/9",
"fit": "cover",
"preset": "cardWide",
"linkToPost": false
}
},
{
"id": "el-post-content",
"type": "postContent",
"props": {
"plainText": false
}
}
]
}
]
}
]
}
```
### template-shop-catalog — Template: shop_catalog. Product archive using the repeat-self Query Loop model instead of the (deprecated) productGrid element. NOTE: do NOT include header/footer (global chrome). ONE card block carries props.queryLoop and is repeated once per product; descendants read the current row via product Dynamic elements.
```json
{
"elements": [
{
"id": "el-cat",
"type": "section",
"props": {
"htmlTag": "section",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xl)",
"paddingBottom": "var(--theme-space-section)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
}
}
},
"children": [
{
"id": "el-cat-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-xl)"
}
}
},
"children": [
{
"id": "el-cat-h",
"type": "heading",
"props": {
"text": "Semua Produk",
"level": "h1",
"alignment": "left"
}
},
{
"id": "el-cat-grid",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "repeat(4, 1fr)",
"gap": "var(--theme-space-lg)"
}
},
"tablet": {
"layout": {
"gridTemplateColumns": "repeat(2, 1fr)"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-cat-card",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-sm)"
}
}
},
"children": [
{
"id": "el-cat-card-imgwrap",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"position": "relative"
}
}
},
"children": [
{
"id": "el-cat-img",
"type": "productImage",
"props": {
"aspectRatio": "1/1",
"fit": "cover",
"preset": "cardMedium",
"linkToProduct": true
}
},
{
"id": "el-cat-salepct",
"type": "productSalePercent",
"props": {
"showAs": "percent",
"variant": "badge",
"hideWhenNoSale": true,
"size": "sm",
"alignment": "left"
},
"style": {
"desktop": {
"layout": {
"position": "absolute",
"top": "var(--theme-space-sm)",
"left": "var(--theme-space-sm)"
}
}
}
}
]
},
{
"id": "el-cat-title",
"type": "productTitle",
"props": {
"level": "h3",
"alignment": "left",
"linkToProduct": true
}
},
{
"id": "el-cat-price",
"type": "productPrice",
"props": {
"showOriginalOnSale": true,
"size": "md",
"alignment": "left"
}
},
{
"id": "el-cat-stock",
"type": "productStock",
"props": {
"variant": "text",
"size": "sm",
"alignment": "left"
}
}
],
"queryLoop": {
"enabled": true,
"source": "products",
"limit": 12,
"orderBy": "newest"
}
}
]
}
]
}
]
}
]
}
```
### template-header — Template: header (global chrome fragment). Compact bar (56–80px): logo left, menu center, CTA + cart right. Required: section (root htmlTag header). Uses the `cart` element for the cart icon + slide-in panel. Sticky behavior is handled by the site layout / headerSettings, not here.
```json
{
"elements": [
{
"id": "el-hdr",
"type": "section",
"props": {
"htmlTag": "header",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-md)",
"paddingBottom": "var(--theme-space-md)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-surface-card, #ffffff)"
},
"border": {
"style": "solid",
"width": {
"top": "0",
"right": "0",
"bottom": "1px",
"left": "0"
},
"color": "var(--theme-hairline, #e5e5e5)"
}
}
},
"children": [
{
"id": "el-hdr-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"alignItems": "center",
"justifyContent": "space-between",
"gap": "var(--theme-space-md)",
"maxWidth": "1200px"
}
}
},
"children": [
{
"id": "el-hdr-logo",
"type": "logo",
"props": {
"sourceMode": "auto",
"linkType": "home",
"height": "36px"
}
},
{
"id": "el-hdr-nav",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"flexGrow": 1,
"justifyContent": "center",
"alignItems": "center"
}
}
},
"children": [
{
"id": "el-hdr-menu",
"type": "menu",
"props": {
"items": [
{
"id": "m1",
"label": "Beranda",
"link": {
"type": "custom",
"url": "/"
},
"dropdownType": "none"
},
{
"id": "m2",
"label": "Katalog",
"link": {
"type": "custom",
"url": "/shop"
},
"dropdownType": "none"
},
{
"id": "m3",
"label": "Blog",
"link": {
"type": "custom",
"url": "/blog"
},
"dropdownType": "none"
},
{
"id": "m4",
"label": "Kontak",
"link": {
"type": "custom",
"url": "/contact"
},
"dropdownType": "none"
}
]
}
}
]
},
{
"id": "el-hdr-actions",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"alignItems": "center",
"gap": "var(--theme-space-sm)"
}
}
},
"children": [
{
"id": "el-hdr-search",
"type": "searchBar",
"props": {
"placeholder": "Cari produk...",
"width": "200px",
"alignment": "right"
}
},
{
"id": "el-hdr-cart",
"type": "cart",
"props": {
"hideCartDetails": false
}
},
{
"id": "el-hdr-cta",
"type": "button",
"props": {
"text": "Masuk",
"link": "/login",
"alignment": "right",
"width": "auto"
}
}
]
}
]
}
]
}
]
}
```
### template-footer — Template: footer (global chrome fragment). Multi-column footer: brand + tagline + social, two link columns, and a bottom copyright bar using the {site_year} and {site_name} shortcodes. Required: section (root htmlTag footer).
```json
{
"elements": [
{
"id": "el-ftr",
"type": "section",
"props": {
"htmlTag": "footer",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"paddingTop": "var(--theme-space-xxl)",
"paddingBottom": "var(--theme-space-lg)",
"paddingLeft": "var(--theme-space-lg)",
"paddingRight": "var(--theme-space-lg)"
},
"background": {
"color": "var(--theme-ink, #141413)"
}
}
},
"children": [
{
"id": "el-ftr-cont",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-xl)"
}
}
},
"children": [
{
"id": "el-ftr-top",
"type": "container",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "grid",
"gridTemplateColumns": "2fr 1fr 1fr",
"gap": "var(--theme-space-xl)"
}
},
"mobile": {
"layout": {
"gridTemplateColumns": "repeat(1, 1fr)"
}
}
},
"children": [
{
"id": "el-ftr-brand",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-sm)"
}
}
},
"children": [
{
"id": "el-ftr-logo",
"type": "logo",
"props": {
"sourceMode": "auto",
"linkType": "home",
"height": "32px",
"inverseSrc": ""
}
},
{
"id": "el-ftr-tag",
"type": "basicText",
"props": {
"text": "{site_tagline}",
"tag": "p"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-ftr-social",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "advanced"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "row",
"gap": "var(--theme-space-md)"
}
}
},
"children": [
{
"id": "el-ftr-ig",
"type": "textLink",
"props": {
"text": "Instagram",
"link": "#",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-ftr-fb",
"type": "textLink",
"props": {
"text": "Facebook",
"link": "#",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-ftr-yt",
"type": "textLink",
"props": {
"text": "YouTube",
"link": "#",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
}
]
}
]
},
{
"id": "el-ftr-col1",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-xs)"
}
}
},
"children": [
{
"id": "el-ftr-c1-h",
"type": "heading",
"props": {
"text": "Perusahaan",
"level": "h4",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-ftr-c1-a",
"type": "textLink",
"props": {
"text": "Tentang",
"link": "/about",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-ftr-c1-b",
"type": "textLink",
"props": {
"text": "Karier",
"link": "/careers",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
}
]
},
{
"id": "el-ftr-col2",
"type": "block",
"props": {
"htmlTag": "div",
"layoutMode": "simple"
},
"style": {
"desktop": {
"layout": {
"display": "flex",
"direction": "column",
"gap": "var(--theme-space-xs)"
}
}
},
"children": [
{
"id": "el-ftr-c2-h",
"type": "heading",
"props": {
"text": "Bantuan",
"level": "h4",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-ftr-c2-a",
"type": "textLink",
"props": {
"text": "Kontak",
"link": "/contact",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
},
{
"id": "el-ftr-c2-b",
"type": "textLink",
"props": {
"text": "Kebijakan Privasi",
"link": "/privacy",
"alignment": "left"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)"
}
}
}
}
]
}
]
},
{
"id": "el-ftr-divider",
"type": "divider",
"props": {
"height": 1,
"width": "100%",
"style": "solid",
"color": "var(--theme-hairline, #333333)"
}
},
{
"id": "el-ftr-copy",
"type": "basicText",
"props": {
"text": "© {site_year} {site_name}. Semua hak dilindungi.",
"tag": "p"
},
"style": {
"desktop": {
"typography": {
"color": "var(--theme-on-dark, #ffffff)",
"fontSize": "14px"
}
}
}
}
]
}
]
}
]
}
```
## Theme tokens
Standardize every value through a token: `var(--token, #fallback)` for spacing (gap/padding), radius (`borderRadius`), shadow (`boxShadow`), font-size, line-height, colors, and fonts. Always include a fallback; never invent token names.
| Token | Category | Meaning |
|---|---|---|
| `--theme-primary` | color | CTA / accent fill |
| `--theme-primary-active` | color | Pressed / hover-darker primary |
| `--theme-on-primary` | color | Text/icon on primary fill |
| `--theme-canvas` | color | Page background |
| `--theme-surface-card` | color | Content card background |
| `--theme-surface-dark` | color | Dark band / footer background |
| `--theme-surface-dark-elevated` | color | Card / divider on dark surface |
| `--theme-on-dark` | color | Text/icon on dark surface |
| `--theme-on-dark-soft` | color | Muted text/icon on dark surface |
| `--theme-ink` | color | Heading + strong text on canvas |
| `--theme-body` | color | Running paragraph text |
| `--theme-muted` | color | Sub-text, captions |
| `--theme-hairline` | color | 1px borders / dividers on canvas |
| `--theme-success` | color | Success / positive state |
| `--theme-warning` | color | Warning / caution state |
| `--theme-error` | color | Error / destructive state |
| `--theme-info` | color | Informational notice |
| `--theme-shadow-xs` | shadow | Subtle hover lift |
| `--theme-shadow-sm` | shadow | Small card / dropdown |
| `--theme-shadow-md` | shadow | Raised card / modal |
| `--theme-shadow-lg` | shadow | Overlay / dialog |
| `--theme-heading-font` | font | Display / headlines (h1–h3) |
| `--theme-body-font` | font | Body / UI default |
| `--theme-mono-font` | font | Code / pre |
| `--theme-text-display-xl` | text-size | Hero / landing display |
| `--theme-text-display-lg` | text-size | Page h1 |
| `--theme-text-display-md` | text-size | Section heading h2 |
| `--theme-text-title-lg` | text-size | Card title large |
| `--theme-text-title-md` | text-size | Card title default |
| `--theme-text-body-md` | text-size | Body / paragraph default |
| `--theme-text-body-sm` | text-size | Small body / nav |
| `--theme-text-caption` | text-size | Caption / overline |
| `--theme-leading-tight` | leading | Display / headings |
| `--theme-leading-normal` | leading | Body default |
| `--theme-leading-relaxed` | leading | Long-form content |
| `--theme-radius-xs` | radius | Chips, tags, small badges |
| `--theme-radius-sm` | radius | Buttons, inputs, tabs |
| `--theme-radius-md` | radius | Cards, panels |
| `--theme-radius-lg` | radius | Modals, images, blocks |
| `--theme-radius-xl` | radius | Hero / large feature cards |
| `--theme-radius-full` | radius | Pills, avatars (9999px) |
| `--theme-space-xxs` | spacing | Ultra tight (4px) |
| `--theme-space-xs` | spacing | Tight (8px) |
| `--theme-space-sm` | spacing | Small (12px) |
| `--theme-space-md` | spacing | Default (16px) |
| `--theme-space-lg` | spacing | Large (24px) |
| `--theme-space-xl` | spacing | Extra large (32px) |
| `--theme-space-xxl` | spacing | Section padding (48px) |
| `--theme-space-section` | spacing | Hero / page section (96px) |
| `--theme-container-width` | layout | Default width for container element (clamped by max-width:100%). Legacy alias: --theme-container-max-width |