Open source project page

An open source project page has one job: get someone from “what is this” to a working install before they lose interest. Cut everything that does not serve that.

Front matter

Put the install command in the hero. It is the single most-copied string on the page.

yaml
---
title: "Widget"
description: "A single-binary task runner for small teams."
hero:
  title: "Task running without"
  titleAccent: "the YAML sprawl."
  subtitle: "One binary, no runtime, MIT licensed."
  highlights:
    - icon: "mdi:package-variant-closed"
      label: "Single binary"
    - icon: "mdi:scale-balance"
      label: "MIT"
  primary:
    label: "Get started"
    url: "/docs/installation"
  secondary:
    label: "Source"
    url: "https://codeberg.org/you/widget"
  code:
    tabs:
      - name: "macOS"
        icon: "simple-icons:apple"
        language: bash
        content: |
          brew install widget
      - name: "Linux"
        icon: "simple-icons:linux"
        language: bash
        content: |
          curl -sSf https://widget.dev/install.sh | sh
---

Body

markdown
{{< section >}}
## What it does

{{< feature-grid >}}
  {{< feature-card title="No daemon" icon="mdi:power-plug-off-outline" >}}
  Runs and exits. Nothing left behind on your machine.
  {{< /feature-card >}}
  {{< feature-card title="Readable config" icon="mdi:file-document-outline" >}}
  Twenty lines of TOML, not two hundred of YAML.
  {{< /feature-card >}}
  {{< feature-card title="Docs" icon="mdi:book-open-page-variant" url="/docs" >}}
  Every flag documented, with examples.
  {{< /feature-card >}}
{{< /feature-grid >}}
{{< /section >}}

{{< section width="narrow" >}}
## Try it

{{< steps >}}
  {{< step number="1" title="Install" >}}
  Pick your platform above.
  {{< /step >}}
  {{< step number="2" title="Initialise" >}}
  Run `widget init` in your project root.
  {{< /step >}}
  {{< step number="3" title="Run" >}}
  Run `widget run build` and watch it exit cleanly.
  {{< /step >}}
{{< /steps >}}
{{< /section >}}

{{< cta title="Found a rough edge?" primary="Good first issues|https://codeberg.org/you/widget/issues" secondary="Contributing guide|/docs/contributing" >}}
Bug reports are contributions too.
{{< /cta >}}

What to change

PieceReplace with
hero.code.tabsThe platforms you actually publish builds for
secondary.urlYour repository, not a docs page
CTA linksYour issue label and contributing guide