diff --git a/public/home/behold.png b/public/home/behold.png
new file mode 100644
index 0000000..0a6ebef
Binary files /dev/null and b/public/home/behold.png differ
diff --git a/scripts/lint-prose.mjs b/scripts/lint-prose.mjs
index 812e6f3..e32d0f8 100644
--- a/scripts/lint-prose.mjs
+++ b/scripts/lint-prose.mjs
@@ -59,6 +59,7 @@ for (const file of files) {
.replace(/^---\n[\s\S]*?\n---\n/, (s) => s.replace(/^---$/gm, " "))
.replace(/^import .*$/gm, (m) => " ".repeat(m.length))
.replace(/<[A-Z][\s\S]*?\/>/g, (m) => " ".repeat(m.length))
+ .replace(/<\/?[A-Z][^>]*>/g, (m) => " ".repeat(m.length)) // wrapper tags such as and
.replace(/^(\s*)[-*+] /gm, (m) => " ".repeat(m.length))
// Heading markers are punctuation, not words: blank the hashes and keep
// the heading text, so a run of short sections is not read as anaphora.
diff --git a/src/components/Home.astro b/src/components/Home.astro
new file mode 100644
index 0000000..c23ab4d
--- /dev/null
+++ b/src/components/Home.astro
@@ -0,0 +1,384 @@
+---
+// The home page's sections. Each part wraps prose written in index.mdx, so
+// the words stay in the one file the prose lint reads and this file only
+// lays them out.
+// hero the eye, the headline, one line and two buttons
+// pillars an optional heading and line, then "**label** line" items as cards
+// steps the reader's delivery steps as a row of tiles (an ordered list)
+// tools a list of links laid out as cards
+// code prose, then code blocks in a grid of `cols` columns (3 by default)
+// behold prose beside a screenshot of the demo
+// contact the closing band
+interface Props {
+ part: 'hero' | 'pillars' | 'steps' | 'tools' | 'code' | 'behold' | 'contact';
+ img?: string;
+ alt?: string;
+ href?: string;
+ cols?: number;
+}
+const { part, img, alt = '', href, cols = 3 } = Astro.props;
+---
+{part === 'hero' && (
+
+)}
+{part === 'pillars' && }
+{part === 'steps' && }
+{part === 'tools' && }
+{part === 'code' && }
+{part === 'behold' && (
+
+
+
+
+)}
+{part === 'contact' && }
+
+
diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx
index 67eaa56..07ac8b7 100644
--- a/src/content/docs/index.mdx
+++ b/src/content/docs/index.mdx
@@ -1,50 +1,103 @@
---
title: Intentius
-description: An infrastructure consultancy. I build open-source tools and help teams put them to work.
+description: "From intent to delivery. Infrastructure and software on every cloud, with jobs on GitHub, GitLab or Forgejo."
template: splash
tableOfContents: false
+wide: true
---
-import Landing from '../../components/Landing.astro';
-import Arenas from '../../components/Arenas.astro';
-import { LEAD, CONTROL, TERRAFORM, PULUMI, BEHOLD } from '../../data/compare-platforms.mjs';
+import Home from '../../components/Home.astro';
-
+
-
+# from intent to delivery
-Skip to [Terraform in detail](#terraform-in-detail) or [Pulumi in detail](#pulumi-in-detail) if you run one engine.
+where you already are
-## The control plane
+[Contact me](/contact/)
+[Open the demo](https://demo.intentius.io/)
-behold against the HCP Terraform, Pulumi Cloud and Spacelift consoles, across both engines.
+
-
-## Terraform in detail
+
-terragucci and choudoufu against HCP Terraform and Spacelift.
+- **Change control** Every change is planned, approved and recorded before it reaches the cloud.
+- **Drift** If someone changes the cloud by hand, chant finds it and opens a pull request.
+- **Releases** Each component releases on its own, signed. chant writes the pipelines.
-
+
-## Pulumi in detail
+
-plywood and plunge against Pulumi Cloud, and against Spacelift where it runs Pulumi. Pulumi calls a plan a preview, and an apply an update.
+## Your delivery, step by step
-
+Most teams do these five steps. chant writes each step as a job in GitHub, GitLab or Forgejo. You keep the steps you have and add the ones you need.
-## behold across both engines
+1. Build and test
-
+ Each change is built and tested.
-## Help me
+2. Plan
-
+ See exactly what will change before it happens.
-## Open source
+3. Approve
-The tools are free, and the docs for each are on its own site.
+ Someone approves that exact change. Every approval is recorded.
-
+4. Release
-[All the tools](/tools/), or [what I do with them](/work/).
+ The change goes out. For software, chant signs and publishes the release.
+
+5. Watch
+
+ Know what is running and when it changes.
+
+
+
+
+
+## Terraform and Pulumi are optional
+
+chant writes each cloud's own format, such as CloudFormation. The cloud runs it, and there is no state file.
+
+- **Clear ownership** Each resource carries a label that names its team. chant never deletes anything without one.
+- **No waiting** Teams change different resources at the same time. There is no shared lock.
+- **Your IAM** The cloud permissions you already have are the gate. There is no extra tool to manage.
+- **No lock-in** If you stop using chant, you keep everything it wrote.
+
+
+
+
+
+## See all of it
+
+[behold](https://intentius.io/behold/) shows Terraform, Pulumi and chant resources in one view. During a move, you can see both sides.
+
+[Open the demo](https://demo.intentius.io/)
+
+
+
+
+
+## Keep your engine for now
+
+Add the delivery steps to what you run today. When you are ready, chant carve moves Terraform resources to the cloud's own format, one at a time. Nothing is deleted or created again.
+
+- [terragucci](https://intentius.io/terragucci/) for Terraform and OpenTofu teams
+- [plywood](https://intentius.io/plywood/) for Pulumi teams
+
+See how they [compare](/compare/terraform-platforms/) with HCP Terraform, Pulumi Cloud and Spacelift. For SQL teams, there is [SQL Yodeler](https://intentius.io/sql-yodeler/).
+
+
+
+
+
+## Work with me
+
+The tools are free. I'm available to help.
+
+[Tell me how your team delivers today](/contact/)
+
+