{% extends "base.html" %} {% from 'chirpui/bento_grid.html' import bento_grid, bento_item %} {% from 'chirpui/button.html' import btn %} {% from 'chirpui/card.html' import resource_card %} {% from 'chirpui/feature_section.html' import feature_section, feature_stack %} {% from 'chirpui/hero.html' import page_hero %} {% from 'chirpui/layout.html' import cluster, container, grid, stack %} {% from 'chirpui/logo_cloud.html' import logo_cloud %} {% from 'chirpui/metric_grid.html' import metric_card, metric_grid %} {% from 'chirpui/story_card.html' import story_card %} {% from 'chirpui/surface.html' import surface %} {% block content %} {% let page_title = page?.title ?? config?.title ?? 'Home' %} {% let page_desc = params?.description ?? '' %} {% let hero_eyebrow = params?.hero_eyebrow ?? 'chirp-ui' %} {% let hero_summary = params?.hero_summary ?? page_desc %} {% let hero_points = params?.hero_points ?? [] %} {% let cta_buttons = params?.cta_buttons ?? [] %} {% let hero_preview = params?.hero_preview ?? none %} {% let hero_panels = params?.hero_panels ?? [] %} {% let proof_metrics = params?.proof_metrics ?? [] %} {% let marketing_shapes = params?.marketing_shapes ?? [] %} {% let feature_sections = params?.feature_sections ?? [] %} {% let ecosystem_logos = params?.ecosystem_logos ?? [] %} {% let quick_links = params?.quick_links ?? [] %} {% let final_cta = params?.final_cta ?? none %} {% call container(max_width='88rem', cls='chirp-theme-home') %}
{% call page_hero(title=page_title, subtitle=hero_summary, variant='editorial', background='solid', cls='chirp-theme-home__hero') %} {% slot eyebrow %}{{ hero_eyebrow }}{% end %} {% slot actions %} {% if cta_buttons | length > 0 %} {% call cluster(gap='sm', cls='chirp-theme-home__actions') %} {% for button in cta_buttons %} {% let btn_url = button?.href ?? button?.url ?? '#' %} {% let btn_text = button?.text ?? 'Learn more' %} {% let btn_style = button?.style ?? 'primary' %} {{ btn(btn_text, href=btn_url | absolute_url, variant='primary' if btn_style == 'primary' else 'secondary') }} {% end %} {% end %} {% end %} {% end %} {% if hero_points | length > 0 %}
    {% for point in hero_points %}
  • {{ point }}
  • {% end %}
{% end %} {% end %}
{% if hero_preview and hero_preview?.nav_items %} {% end %}

{{ hero_preview?.eyebrow ?? 'Example interface' }}

{{ hero_preview?.title ?? 'Render common screens from Python.' }}

{{ hero_preview?.summary ?? 'Use ready-made components for pages, forms, navigation, and app shells.' }}

{% if hero_preview and hero_preview?.proof_items %}
{% for proof in hero_preview.proof_items %} {{ proof }} {% end %}
{% end %}
{{ hero_preview?.feature_title ?? 'Feature band' }}

{{ hero_preview?.feature_text ?? 'Reusable sections carry rhythm, actions, and media slots.' }}

{{ hero_preview?.cta_text ?? 'View showcase' }} {{ hero_preview?.resource_text ?? 'Patterns' }}
{% if (not hero_preview) and hero_panels | length > 0 %}
{% for panel in hero_panels %}
{{ panel?.label ?? 'Surface' }}

{{ panel?.text ?? '' }}

{% end %}
{% end %}
{% if proof_metrics | length > 0 %}
{% call metric_grid(cols=3, gap='md', cls='chirp-theme-home__metric-grid') %} {% for metric in proof_metrics %} {{ metric_card(metric?.value ?? '', metric?.label ?? '', hint=metric?.hint ?? none, cls='chirp-theme-home__metric') }} {% end %} {% end %}
{% end %} {% if marketing_shapes | length > 0 %}

What you can build

Reusable UI for pages and product screens.

Chirp UI gives Python projects a practical starting point for the interfaces teams build repeatedly.

{% call bento_grid(cls='chirp-theme-home__bento') %} {% for shape in marketing_shapes %} {% call bento_item(span=2 if loop.first else none, cls='chirp-theme-home__bento-item') %} {{ shape?.eyebrow ?? 'Shape' }} {{ shape?.title ?? 'Component shape' }}

{{ shape?.description ?? '' }}

{% if shape?.layout == 'hero' %} {% elif shape?.layout == 'feature' %} {% elif shape?.layout == 'proof' %} {% elif shape?.layout == 'links' %} {% elif shape?.layout == 'cta' %} {% end %}
{% end %} {% end %} {% end %}
{% end %} {% if feature_sections | length > 0 %}

How it fits

Render HTML first. Add behavior where it helps.

{% call feature_stack(cls='chirp-theme-home__feature-stack') %} {% for item in feature_sections %} {% call feature_section(layout='balanced', variant='muted', reverse=item?.reverse ?? false, cls='chirp-theme-home__feature') %} {% slot eyebrow %}{{ item?.eyebrow ?? 'Recipe' }}{% end %} {% slot title %}{{ item?.title ?? 'Feature section' }}{% end %}

{{ item?.description ?? '' }}

{% slot actions %} {{ btn(item?.label ?? 'Read more', href=(item?.href ?? '#') | absolute_url, variant='secondary') }} {% end %} {% slot media %} {% call surface(variant='muted', cls='chirp-theme-home__feature-surface') %}

{{ item?.visual_title ?? 'Component kit' }}

{% if item?.visual_items %} {% end %} {% end %} {% end %} {% end %} {% end %} {% end %}
{% end %}

Why it works

The UI stays inspectable from Python.

{% call grid(cols=2, gap='md', cls='chirp-theme-home__story-grid') %} {{ story_card( customer='Python teams', outcome='Pages and application screens can share the same component library.', summary='Use Chirp UI for cards, forms, navigation, surfaces, grids, and actions instead of rebuilding each screen by hand.', metric='one library' ) }} {{ story_card( customer='Maintainers', outcome='Components are easier to audit because the Python API, templates, CSS, and docs are kept in sync.', summary='Generated references and tests help keep the shipped UI surface documented instead of hidden in one-off markup.', metric='inspectable' ) }} {% end %}
{% if ecosystem_logos | length > 0 %}

Ecosystem

Part of a Python-first HTML stack.

{{ logo_cloud(items=ecosystem_logos, label='Bengal ecosystem projects', cls='chirp-theme-home__logo-cloud') }}
{% end %} {% if quick_links | length > 0 %} {% end %} {% if final_cta %} {% call surface(variant='gradient-border', cls='chirp-theme-home__cta') %}

Start

{{ final_cta?.title ?? 'Build with chirp-ui' }}

{{ final_cta?.description ?? '' }}

{{ btn(final_cta?.primary_text ?? 'Get started', href=(final_cta?.primary_url ?? '/docs/get-started/') | absolute_url, variant='primary') }} {{ btn(final_cta?.secondary_text ?? 'API reference', href=(final_cta?.secondary_url ?? '/api/') | absolute_url, variant='secondary') }}
{% end %} {% end %}
{% end %} {% end %}