ProductSection

apps/www/src/components/ProductSection.astro · 23 lines · group Features & lists

Used by

Live sites: pages.gitt.one.

Samples 2

pages.gitt.one/how-it-works/

Two builder images, two kinds of website

Pick the image that matches what you are publishing. Everything else — the markdown pipeline, image optimization, SEO files, caching rules — is inherited from it.

{project}/docs

Knowledge bases

The markdown files your team already writes in GitLab, published as a website. Clients read the site instead of walking into your repository.

  • Plain .md and .mdx files, no front matter required
  • README.md becomes the site root, links between .md files are rewritten into slugs
  • Optional intranet mode behind basic auth
{project}/www

Landing pages

Marketing sites with strictly typed content: the structure is fixed, the copy changes often — and changing it never touches the layout.

  • Content written as semantic typed tags in MDX
  • Images, PDFs and other assets served straight from the repository
  • A single pages.config.js per site: title, contacts, logo, locales, menu
MDX of this sample
import BookOpenIcon from 'astro-heroicons/outline/BookOpen.astro';
import GlobeAltIcon from 'astro-heroicons/outline/GlobeAlt.astro';

<ProductSection
  title="Two builder images, two kinds of website"
  description="Pick the image that matches what you are publishing. Everything else — the markdown pipeline, image optimization, SEO files, caching rules — is inherited from it."
>
  <ProductItem
    kicker="{project}/docs"
    title="Knowledge bases"
    description="The markdown files your team already writes in GitLab, published as a website. Clients read the site instead of walking into your repository."
    Icon={BookOpenIcon}
    bullets={[
      'Plain .md and .mdx files, no front matter required',
      'README.md becomes the site root, links between .md files are rewritten into slugs',
      'Optional intranet mode behind basic auth',
    ]}
  />
  <ProductItem
    kicker="{project}/www"
    title="Landing pages"
    description="Marketing sites with strictly typed content: the structure is fixed, the copy changes often — and changing it never touches the layout."
    Icon={GlobeAltIcon}
    bullets={[
      'Content written as semantic typed tags in MDX',
      'Images, PDFs and other assets served straight from the repository',
      'A single pages.config.js per site: title, contacts, logo, locales, menu',
    ]}
  />
</ProductSection>
pages.gitt.one/

Two kinds of website, one production line

Whatever you publish, the engine arrives as a ready-made builder image and your repository stays down to content plus a few lines of Dockerfile.

{project}/docs

Knowledge bases

The markdown your team already writes in GitLab, published as a website. Clients read the site instead of walking into your repository.

  • Plain .md files — no front matter, no rewriting for the web
  • A page looks the same in the repository and on the public site
  • Publish to the world or keep it intranet behind basic auth
{project}/www

Landing pages

Marketing sites with strictly typed content: the structure is fixed, the copy changes often — and changing it never touches the layout.

  • Content written as semantic typed tags, separate from the design
  • Edited by a content manager, an AI agent, or both
  • One config file per site: title, contacts, logo, locales, menu
MDX of this sample
import BookOpenIcon from 'astro-heroicons/outline/BookOpen.astro';
import GlobeAltIcon from 'astro-heroicons/outline/GlobeAlt.astro';

<ProductSection
  title="Two kinds of website, one production line"
  description="Whatever you publish, the engine arrives as a ready-made builder image and your repository stays down to content plus a few lines of Dockerfile."
>
  <ProductItem
    kicker="{project}/docs"
    title="Knowledge bases"
    description="The markdown your team already writes in GitLab, published as a website. Clients read the site instead of walking into your repository."
    Icon={BookOpenIcon}
    bullets={[
      'Plain .md files — no front matter, no rewriting for the web',
      'A page looks the same in the repository and on the public site',
      'Publish to the world or keep it intranet behind basic auth',
    ]}
  />
  <ProductItem
    kicker="{project}/www"
    title="Landing pages"
    description="Marketing sites with strictly typed content: the structure is fixed, the copy changes often — and changing it never touches the layout."
    Icon={GlobeAltIcon}
    bullets={[
      'Content written as semantic typed tags, separate from the design',
      'Edited by a content manager, an AI agent, or both',
      'One config file per site: title, contacts, logo, locales, menu',
    ]}
  />
</ProductSection>

Props

NameTypeRequiredDefaultDescription
titlestringyes
descriptionstring

Source apps/www/src/components/ProductSection.astro @ gitt.one

---
interface Props {
  title: string;
  description?: string;
}

const { title, description } = Astro.props;
---

<div class="bg-white">
  <div class="mx-auto max-w-7xl px-4 py-16 sm:px-6 lg:px-8 lg:py-24">
    <div class="max-w-3xl">
      <h2 class="text-3xl font-extrabold tracking-tight text-gray-900 sm:text-4xl">
        {title}
      </h2>
      {description && <p class="mt-4 text-lg text-gray-500">{description}</p>}
    </div>
    <div class="mt-12 grid grid-cols-1 gap-8 lg:grid-cols-2">
      <slot />
    </div>
  </div>
</div>

Source links point to engine-astro@e857a859. Samples are cut from the sites' own content by scripts/gallery-extract.mjs; nothing is merged or removed yet.