ProductSection
apps/www/src/components/ProductSection.astro · 23 lines · group Features & lists
Used by
- pages.gitt.one /how-it-works/ × 2
- pages.gitt.one / × 2
Live sites: pages.gitt.one.
Samples 2
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}/docsKnowledge 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}/wwwLanding 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>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}/docsKnowledge 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}/wwwLanding 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
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| title | string | yes | ||
| description | string |
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.