Agent skill

Tabler Demo Page Builder

by tabler in tabler/tabler

Builds or updates a Tabler component preview page under preview/pages, covering the page skeleton, header, and card grid conventions.

MITAuto-check passedFrontend & Design

Install Tabler Demo Page Builder

skills CLI
$ npx skills add tabler/tabler --skill demo-pages -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install tabler/tabler demo-pages --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/demo-pages .claude/skills/demo-pages && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
demo-pages
GitHub stars
42k
Token cost
~2.2k tokens
SKILL.md length
1,080 words
Files
1
Skills in repo
21
Repo updated
First seen
Licence
MIT

At a glance

Builds or updates a Tabler component preview page under preview/pages, covering the page skeleton, header, and card grid conventions.

  • Works in 11 steps: Page skeleton → Page header extras → Card grid → …
  • Adding a demo page for a new shared UI component
  • SKILL.md covers 1. Page skeleton, 2. Page header extras, 3. Card grid and 4. Heading levels, plus 7 more sections
  • Calls pnpm and curl

What it does

This skill explains that a demo page exists to show a component's variants side by side, not to document it, so prose stays to one line per card while real depth lives in separate docs content. The title prop both sets the browser title and becomes the page header, so a pageHeader prop is only for text that differs from the title, or false to remove the header entirely.

Anything to the right of the title, such as a docs link or a prebuilt action-button group, goes in the page-header-actions slot as a direct child of the layout component, and a docs link's path is checked against the actual docs content tree by a lint command so a typo fails before anyone opens a browser. The card grid itself uses one card per variant in a row of consistent column widths.

When your agent uses it

  • Adding a demo page for a new shared UI component
  • Extending an existing component preview page with a new variant
  • Fixing a broken docs link on a Tabler preview page

Example prompts

  • “Add a demo page for the new Avatar component.”
  • “Add a docs link to the badge preview page.”
  • “Why does the docs-link check fail on this preview page?”

Workflow steps

11 steps, taken from the step headings in SKILL.md.

  1. Page skeleton
  2. Page header extras
  3. Card grid
  4. Heading levels
  5. Spacing between inline elements
  6. No page-level styles
  7. Accessible demo markup
  8. Data and repetition
  9. Registering the page
  10. Verify in the browser
  11. Quality checklist

What it can do on your machine

Read from SKILL.md and the folder at commit c2a7cbf. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm
    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pnpm and curl, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Tabler Demo Page Builder loads about 2.2k tokens when it runs. Until then it costs about 113 tokens; SKILL.md has 1,080 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~113
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from tabler/tabler at commit c2a7cbf, republished under its MIT licence (© tabler). 1,080 words, ~2,213 tokens.

Download SKILL.mdSave it as .claude/skills/demo-pages/SKILL.md (or your agent's skills folder).
name
demo-pages
description
Build or update a Tabler demo page under `preview/pages/*.astro` — the pages that show a component's variants side by side. Use whenever the user asks to add, extend, or clean up a preview/demo page, and on your own after adding a new `shared/ui` component that has no page showing it. Covers the page skeleton, the header (title, description, docs link, actions), the card grid, heading levels, and how to verify the result in the browser.

Write a Tabler demo page

Demo pages live in preview/pages/*.astro and are served at /<name> in dev, /<name>.html in the build. Each one shows the variants of a single component so a reader can compare them at a glance. They are not documentation — the prose is one line per card; the depth lives in docs/content/** (see the write-docs skill).

1. Page skeleton

astro
---
import DefaultLayout from '@shared/layouts/DefaultLayout.astro'
import Card from '@ui/Card.astro'
import CardBody from '@ui/CardBody.astro'
import CardTitle from '@ui/CardTitle.astro'
import CardSubtitle from '@ui/CardSubtitle.astro'
import DocsLink from '@ui/DocsLink.astro'
---

<DefaultLayout title="Badges" pageMenu="base.badges" description="Badges highlight a count, status, or short label attached to text, buttons, or menu items.">
  <DocsLink slot="page-header-actions" path="/ui/components/badge" />

  <div class="row row-cards">
    <div class="col-md-6 col-lg-4">
      <Card>
        <CardBody>
          <CardTitle>Basic</CardTitle>
          <CardSubtitle>One sentence on what this variant is for.</CardSubtitle>
          …
        </CardBody>
      </Card>
    </div>
  </div>
</DefaultLayout>
  • title — browser title. It also becomes the page header, so do not repeat it in a pageHeader prop; pageHeader exists only for a header that differs from the browser title (title="Dashboard" pageHeader="Boxed layout"), or as pageHeader={false} for a page with no header at all.
  • description — renders under the page title and fills <meta name="description">. One sentence, present tense, says what the component is for.
  • pageMenu — the menu entry to highlight, e.g. base.badges. Match an existing key in shared/data/menu.json.
  • Never hand-roll a title block inside the page body. The page header is the layout's job.

2. Page header extras

Anything to the right of the title goes in the page-header-actions slot, as a direct child of <DefaultLayout>:

astro
<DocsLink slot="page-header-actions" path="/ui/components/badge" />
  • Docs link: path is the page's path under docs/content/** without the extension — docs/content/ui/components/badge.mdx → /ui/components/badge. Add one whenever a matching docs page exists.
  • Check the path with pnpm run check:docs-links. It resolves every <DocsLink path="…"> against docs/content/** and fails on a typo, so you do not need a browser for this.
  • If you do open the link, use docs-dev.tabler.io, which serves dev. docs.tabler.io serves the last release and still has the pre-content-collection urls, so a valid page can 404 there. A 404 on production alone is never a reason to change a path.
  • Prebuilt action groups (HeaderActionsButtons, HeaderActionsPrint, HeaderActionsPhotos, …) live in shared/components/layout/ and go in the same slot: <HeaderActionsButtons slot="page-header-actions" />. There is no actions="buttons" prop any more.

3. Card grid

  • One card per variant, in <div class="row row-cards"> with col-* wrappers. Keep column widths consistent down the page.
  • CardTitle names the variant in 1-3 words. CardSubtitle explains it in one sentence, naming the prop or class it demonstrates: "Add showClose to let users close the alert."
  • Put the class or prop in <code> inside the subtitle. Readers scan for the token.
  • Never write <h3 class="card-title"> or <div class="card-subtitle"> by hand — use the components, which also keep the heading level right.

4. Heading levels

CardTitle and CardHeader render h2, directly under the page h1. Pass as="h3" only for a card nested under its own h2 section heading. Do not introduce raw <h3>/<h4> headings for card titles; that is what made pages mix levels before.

5. Spacing between inline elements

Use the list wrappers instead of margin utilities on each child:

WrapperFor
<ButtonList>rows of buttons
<BadgeList>rows of badges
<TagList>rows of tags
<AvatarList>rows or stacks of avatars

The pluralised class names (.badges-list, .tags-list) are deprecated aliases of .badge-list / .tag-list. Do not add me-2/mb-2 to individual items.

Icon action buttons: btn-action is always combined with btn (btn btn-action, plus btn-sm when small) — never use btn-action on its own.

6. No page-level styles

Never add a <style> block to a preview page or a shared component, and never import CSS from the frontmatter. The built HTML is the product: a plain <style> makes Astro stamp data-astro-cid-* on every element of the page, so a copied page carries dozens of attributes nobody wants. The block also bypasses build-css.ts, so a custom property written bare (var(--table-color)) stays unprefixed and never matches Tabler's --tblr-* names. is:global or is:inline avoids the stamping but not the prefix problem, and still hides styling where nobody looks for it.

If a demo needs a look the framework does not have, either use existing utilities in the markup or add the class to core/scss/ (core-scss skill). If neither fits, keep the plain markup; a demo page never justifies a one-off rule.

Show full SKILL.md (450 more words)Show less

7. Accessible demo markup

Demo markup is copied as-is, so a shortcut here becomes a shortcut in every user's app. The four that keep coming back:

  • An action with no destination is <button type="button" class="btn">, never <a class="btn"> without href. An anchor without href is not focusable, so keyboard users cannot reach it. An anchor that really links keeps href, and href="#" is fine for a demo link.
  • Every control has a name. A search box, a table-row <select>, a switch in a card footer: give it a <label for> or an aria-label. placeholder is not a name.
  • A <label> wraps exactly one control or points at one with for. A label wrapping a radio and an unrelated dropdown toggle selects the radio when the toggle is clicked.
  • A link or button whose only content is an icon or a logo gets aria-label. <Icon> renders aria-hidden, so without the label the control has no name at all.

Dropdown toggles are <button type="button" data-bs-toggle="dropdown">, or <a href="#" role="button" …> inside a nav; never a <label>. One .dropdown-menu per toggle — Bootstrap shows only the first sibling.

8. Data and repetition

  • Loop over shared/data/*.json (site.json colors, people.json, flags.json) instead of pasting 20 near-identical blocks.
  • Cast JSON entries to a named type in the frontmatter when you index into them; astro check is part of the quality gates.

9. Registering the page

  • Add the page to shared/data/menu.json so it is reachable, and use the same key in pageMenu.
  • A new shared/ui component usually needs both a demo page and a docs page. After finishing here, check docs/content/** and consult the write-docs skill if it is missing.

10. Verify in the browser

Never hand the page to the user unchecked.

  1. preview_start with the preview config from .claude/launch.json, then open /<page-name>.
  2. Screenshot it, and read the console for errors.
  3. For a page built by looping over data, assert the rendered structure instead of eyeballing it:
shell
curl -s http://localhost:3000/badges | grep -o '<h[1-6]' | sort | uniq -c

A demo page should show exactly one h1 and then h2s — no h3 in the card grid.

11. Quality checklist

  • title and description set; no pageHeader repeating the title
  • DocsLink present when a docs page exists; pnpm run check:docs-links passes
  • One card per variant; CardTitle + CardSubtitle on each
  • No raw card-title / card-subtitle / page-title markup
  • List wrappers instead of per-item margins
  • No <style> block and no CSS import; new looks go to core/scss/
  • Actions are <button type="button">, controls and icon-only links have a name, every <label> matches one control
  • Every <Icon name> exists in shared/data/icons.json (play does not; player-play does)
  • pnpm run format:prettier and pnpm run type-check clean (repo root, not a tail-filtered subset)
  • Page opened in the browser, console clean, heading order checked
  • Changeset written with the generate-changeset skill

© tabler, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/demo-pages of tabler/tabler.

Open the folder on GitHubat commit c2a7cbf

Compare with similar skills

Tabler Demo Page Builder next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Tabler Demo Page Builder compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tabler Demo Page Builder this skilltabler/tabler42k—~2.2kAutomated safety check: PassMIT
Kill AI Slopyetone/kill-ai-slop1.3k—~1.4kAutomated safety check: PassApache-2.0
Motion Dev Animations199-biotechnologies/motion-dev-animations-skill1141 repos~2.8kAutomated safety check: NotesMIT
Astrodevantler-tech/ksail1653 repos~1.1kAutomated safety check: PassMIT
UI Upstream Syncfulldotdev/ui610—~1.3kAutomated safety check: PassMIT
Check Docs Stylenrwl/nx29k—~1.3kAutomated safety check: PassMIT

Similar skills

  • Kill AI Slop

    yetone/kill-ai-slop

    Find and remove AI slop — the generic, machine-default visual and copy tics of vibe-coded products — from a web project.

    1.3k GitHub stars~1.4k tokensUpdated 24 days ago
    Frontend & DesignAuto-check passed
  • Motion Dev Animations

    199-biotechnologies/motion-dev-animations-skill

    Creates 120fps GPU-accelerated animations with Motion.dev (Framer Motion successor) for React, Next.js, Svelte, and Astro projects.

    114 GitHub starsUsed in 1 repo~2.8k tokens
    Frontend & DesignAuto-check: notes
  • Astro

    devantler-tech/ksail

    Skill for building with the Astro web framework. An agent skill from devantler-tech/ksail.

    165 GitHub starsUsed in 3 repos~1.1k tokens
    Frontend & DesignAuto-check passed
  • UI Upstream Sync

    fulldotdev/ui

    Audit and update the existing Fulldev Astro UI registry against current data-slot and shadcn/ui Base UI Vega.

    610 GitHub stars~1.3k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Check modified Nx documentation pages against the astro-docs style guide.

    29k GitHub stars~1.3k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Aholo Site Owner

    manycoretech/aholo-viewer

    Owns the Aholo Viewer Astro website shell and Playground integration, covering routes, layouts, i18n copy and scoped CSS, while leaving the renderer and example content to other skills.

    1.1k GitHub stars~530 tokensUpdated today
    Frontend & DesignAuto-check passed

More from tabler/tabler

All 21 skills in this repo
  • Starts the right Tabler dev server, keeps it from clashing with builds and verifies changes in the browser before a page or component is handed back.

    42k GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Rules for adding or fixing client-side scripts in Tabler's Astro components so the copied preview HTML stays readable, self-contained and runs in the right order.

    42k GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Sets the file structure, typing and Data API pattern for writing a new Bootstrap-style JavaScript component class in Tabler's vendored port of Bootstrap's JS.

    42k GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed
  • Writes or updates the classnames front matter that renders the class table at the end of a Tabler component docs page.

    42k GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Guidance for changing the Tabler framework's own JavaScript in core/js: the tabler.js and tabler-theme.js bundles, the Bootstrap port and their tests.

    42k GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Tabler Core SCSS

    tabler/tabler

    Rules for adding or changing styles in Tabler's core/scss framework: file placement, custom properties, dark mode, RTL, tests and build gates.

    42k GitHub stars~2k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Tabler Demo Page Builder

What does Tabler Demo Page Builder do?

Builds or updates a Tabler component preview page under preview/pages, covering the page skeleton, header, and card grid conventions. This skill explains that a demo page exists to show a component's variants side by side, not to document it, so prose stays to one line per card while real depth lives in separate docs content. The title prop both sets the browser title and becomes the page header, so a pageHeader prop is only for text that differs from the title, or false to remove the header entirely.

When should I use Tabler Demo Page Builder?

Tabler Demo Page Builder fits situations like: adding a demo page for a new shared UI component; extending an existing component preview page with a new variant; fixing a broken docs link on a Tabler preview page.

How do I install Tabler Demo Page Builder in Claude Code?

Run `npx skills add tabler/tabler --skill demo-pages -a claude-code`. Or copy the skill folder (.agents/skills/demo-pages in tabler/tabler) into .claude/skills/demo-pages in your project. Claude Code loads it when a task matches its description.

How do I install Tabler Demo Page Builder in Codex?

Run `npx skills add tabler/tabler --skill demo-pages -a codex`. Or copy the skill folder (.agents/skills/demo-pages in tabler/tabler) into .agents/skills/demo-pages in your project. Codex loads it when a task matches its description.

Can I use Tabler Demo Page Builder in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tabler/tabler --skill demo-pages -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/demo-pages, .gemini/skills/demo-pages, .github/skills/demo-pages and .opencode/skills/demo-pages in your project.

What does Tabler Demo Page Builder need to run?

Going by SKILL.md and its folder, Tabler Demo Page Builder needs the command-line tools its instructions call (pnpm and curl).

Does Tabler Demo Page Builder access the network?

SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Tabler Demo Page Builder safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Tabler Demo Page Builder use?

Tabler Demo Page Builder is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Tabler Demo Page Builder use?

About 2.2k tokens (SKILL.md is roughly 8.9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Tabler Demo Page Builder?

Skills that share tags, products or a category with Tabler Demo Page Builder: Kill AI Slop (yetone/kill-ai-slop, 1.3k stars), Motion Dev Animations (199-biotechnologies/motion-dev-animations-skill, 114 stars), Astro (devantler-tech/ksail, 165 stars) and UI Upstream Sync (fulldotdev/ui, 610 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Tabler Demo Page Builder?

tabler (a GitHub organization) maintains it in tabler/tabler, which has 41,833 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 8, 2026.

Source: tabler/tabler on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.