Rewrite the landing page below the fold to describe Coder

073c3b496bce · AtlantisPleb · · parent 43173ccf31d1

Rewrite the landing page below the fold to describe Coder

The hero announces Coder and the rest of the page then described the
forge: a feature grid of issues, projects, milestones and receipts, an
FAQ about the component system and the API shape, and a closing action
that asked the reader to open an issue. A reader who arrives, is told
what Coder is, and scrolls into eight statements about an issue tracker
has to work out for themselves which product they are being sold.

So the page now says what Coder does, and says it in terms of the forge
rather than instead of it -- the integration is the argument. It opens a
session or runs a command; it works in the checkout you are standing in;
it reads and writes issues, labels, milestones, assignees and projects
over the GitHub-shaped API this site serves; it installs a Git credential
helper so `git push` works and leaves a receipt; its transcript is
written to the server so a session resumes on another machine; its extra
tools are digest-pinned WebAssembly mounted read-only; it delegates to a
child agent on a rented sandbox or a machine you paired; and every call
meters against one balance with no ceiling on session length.

The questions change with it: what the install command actually does,
whether an account is needed and what the device flow does with your
GitHub token, which model answers, and -- kept, because it is still true
and still the point -- whether this is the whole application. The closing
action installs Coder rather than pointing at the docs index, and the
footer's first column is Coder rather than Product.

Every claim here is checked against `priv/docs/install-cli.md`, the model
catalog in `config/config.exs`, and `OpenAgents.Inference.Credit`.
Nothing from `docs/2026-08-23-openagents-coder-cli-spec.md` is used: that
document's own header says none of it is implemented. Pull requests, code
review, webhooks, `gh` compatibility, SSH transport, named `issue` and
`project` subcommands, and buying credit are all absent from the copy
because they are absent from the product.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014wPUM1Fr44hwBGPP42iMxP
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

pushed
by user · WAL seq 456 · 2026-08-26T17:33:54.555014Z

Changed files

  • modified lib/openagents_web/live/home_live.ex

Diff

1 file changed, +59 -35

lib/openagents_web/live/home_live.ex modified +59 -35

@@ -613,75 +613,99 @@ defmodule OpenAgentsWeb.HomeLive do

613 613
          --%>
614 614
        </Landing.hero>
615 615
616
        <Landing.feature_grid title="Everything the work needs. Nothing it doesn't.">
617
          <:item title="Issues" icon="file-document">
618
            Plan, assign, label and close, over an API shaped after the one you already
619
            use.
616
        <Landing.feature_grid title="One agent, wired to the forge it ships from.">
617
          <:item title="A session, or a command" icon="terminal">
618
            Run it bare and it opens a coding session. Give it a command and it runs
619
            that instead. Three names, one binary.
620 620
          </:item>
621
          <:item title="Projects" icon="grid">
622
            Group issues into work that has a beginning and an end.
621
          <:item title="Where your code already is" icon="folder">
622
            It reads files and runs shell commands in the checkout you are standing in,
623
            on your machine, under your account.
623 624
          </:item>
624
          <:item title="Milestones" icon="flag">
625
            Dates and scope, stated where the work is rather than in another tool.
625
          <:item title="Issues and projects" icon="file-document">
626
            Read and write issues, labels, milestones, assignees, and projects from the
627
            session, over the GitHub-shaped API this forge serves.
626 628
          </:item>
627
          <:item title="Code" icon="code">
628
            Browse repositories and commits beside the issues that changed them.
629
          <:item title="Push, already authenticated" icon="branch">
630
            One command installs a Git credential helper scoped to this origin. After
631
            it, plain <code>git push</code> works, and every accepted push leaves a
632
            receipt.
629 633
          </:item>
630
          <:item title="Agents" icon="bolt">
631
            Durable workers that pick up an issue and see it through.
634
          <:item title="Sessions that survive" icon="memory-on-remember">
635
            The transcript is written to the server as the session runs, so resuming
636
            picks up where you stopped — on this machine or another one.
632 637
          </:item>
633
          <:item title="Receipts" icon="check-circle">
634
            Every run leaves evidence that can be read afterwards.
638
          <:item title="Plugins in a sandbox" icon="plugin">
639
            Extra tools ship as WebAssembly, mounted read-only and pinned to a digest.
640
            Ask for one and the session loads it.
635 641
          </:item>
636
          <:item title="Changelog" icon="text">
637
            What shipped, generated from what actually shipped.
642
          <:item title="Delegation" icon="robot">
643
            Hand part of the work to a child agent, on a rented sandbox or on a machine
644
            you paired yourself, and keep going.
638 645
          </:item>
639
          <:item title="Status" icon="info">
640
            The system's own account of whether it is working.
646
          <:item title="Credit, not a bill" icon="credits">
647
            Every call meters against one balance, and the session can tell you what is
648
            left. No plan to pick, and no ceiling on how long a session runs.
641 649
          </:item>
642 650
        </Landing.feature_grid>
643 651
644 652
        <Landing.faq title="Questions">
645
          <:item question="Is this the whole application?" open>
653
          <:item question="What does that install command do?" open>
646 654
            <p>
647
              Yes. The repository is AGPL-3.0, and every surface on this site is built
648
              from the same component system documented in the component library.
655
              It detects your operating system and processor, downloads the matching
656
              build, fetches the checksum file separately, and refuses anything it
657
              cannot verify — the bytes are never made executable before the
658
              comparison succeeds. Then it links three names, <code>openagents</code>, <code>coder</code>, and <code>oa</code>, into <code>~/.openagents/bin</code>. macOS builds are signed and notarized, so
659
              Gatekeeper admits them without a right-click override.
649 660
            </p>
650 661
          </:item>
651
          <:item question="Does it work without JavaScript?">
662
          <:item question="Do I need an account?">
652 663
            <p>
653
              The marketing and documentation surfaces do. Menus are native popovers and
654
              disclosures are native <code>&lt;details&gt;</code> elements, so navigation
655
              works before any bundle has loaded.
664
              Yes, and identity comes from GitHub — there is no separate
665
              OpenAgents password. Signing in from the terminal runs the device flow: it prints a
666
              code and a URL, you approve it in a browser, and the token lands in your
667
              operating system's credential store. Your GitHub token stays here and
668
              never reaches the terminal.
656 669
            </p>
657 670
          </:item>
658
          <:item question="What does the API look like?">
671
          <:item question="Which model answers?">
659 672
            <p>
660
              It is shaped after GitHub's REST API and served under <code>/api/v1</code>. An existing client usually needs only a base URL
661
              change.
673
              One you picked, for the whole session. The
674
              <.link navigate={~p"/models"}>models page</.link>
675
              lists every model this deployment serves with its rates and context
676
              window, and no call is ever answered by a different model than the one
677
              you asked for.
678
            </p>
679
          </:item>
680
          <:item question="Is this the whole application?">
681
            <p>
682
              Yes. The repository is AGPL-3.0, the forge Coder talks to is this site,
683
              and every surface on it is built from the same component system
684
              documented in the component library.
662 685
            </p>
663 686
          </:item>
664 687
        </Landing.faq>
665 688
666 689
        <Landing.cta
667
          title="Start shipping."
668
          description="Open an issue and let an agent pick it up."
690
          title="Put it in your terminal."
691
          description="One command, and the agent is where the work is."
669 692
        >
670 693
          <:actions>
671
            <.button navigate={~p"/docs"} variant={:primary} size={:lg}>
672
              Read the docs
694
            <.button navigate={~p"/docs/install-cli"} variant={:primary} size={:lg}>
695
              Install Coder
673 696
            </.button>
674 697
          </:actions>
675 698
        </Landing.cta>
676 699
677 700
        <Landing.landing_footer
678
          tagline="Purpose-built for planning and shipping issues."
701
          tagline="Your all-in-one coding agent, wired to the forge it ships from."
679 702
          copyright="© 2026 OpenAgents, Inc."
680 703
          note="AGPL-3.0. Every surface here is in the repository."
681 704
        >
682
          <:column title="Product">
705
          <:column title="Coder">
706
            <.link navigate={~p"/docs/install-cli"}>Install</.link>
683 707
            <.link navigate={~p"/docs"}>Documentation</.link>
684
            <.link navigate={~p"/docs/issues"}>Issues</.link>
708
            <.link navigate={~p"/models"}>Models</.link>
685 709
          </:column>
686 710
          <:column title="Transparency">
687 711
            <.link navigate={~p"/changelog"}>Changelog</.link>

This page updates live while a promote is in flight · changelog