import { useAuth } from "@/client/auth"; import { StatusPill } from "@/client/components"; import { Badge, ButtonLink } from "@/client/components/ui"; const valueProps = [ { title: "Pipeline config lives in the repo", description: "anvil reads `.anvil.yml` from your branch — review it, revert it, override it per branch.", }, { title: "Serialized runs, no extra locking", description: "One active run per project, everything else in a durable FIFO queue.", }, { title: "Logs stream while the run is live", description: "See what's running, what failed, and what's queued next — during the run, not after.", }, { title: "Runs on Cloudflare end-to-end", description: "Durable Objects, Queues, D1, and Sandbox SDK — no glue services in between.", }, ]; const workflow = [ { step: "01", title: "Connect a repo", description: "Sign in through tessera, then point anvil at a repository and choose the default branch.", }, { step: "02", title: "Commit `.anvil.yml`", description: "Define steps in a YAML file checked into the repo. Branch it, review it, revert it — same workflow as the rest of your code.", }, { step: "03", title: "Trigger and watch", description: "Start a run manually or via webhook. Queue position, active steps, and the live log tail all show up in one view.", }, ]; const previewRuns = [ { id: "#218", name: "deploy-docs", detail: "manual trigger by rachel", status: "running" as const, }, { id: "#219", name: "smoke-check", detail: "queued from push to main", status: "queued" as const, }, { id: "#220", name: "release-verify", detail: "queued from release branch", status: "queued" as const, }, ]; const previewLogs = [ "$ git fetch origin main --depth=1", "$ anvil run deploy-docs", "build passed in 18.4s", "test passed in 43.1s", "deploy uploading assets to edge...", ]; const LandingActions = ({ isAuthenticated }: { isAuthenticated: boolean }) => isAuthenticated ? (
Go to Dashboard New Project
) : (
Sign in
); const ProductPreview = () => (
{/* Terminal header */}
anvil exec --tail edge-docs
branch: main
{/* Terminal Output Area */}
{/* Queue status */}

Queue Status

SERIALIZED FIFO
{previewRuns.map((run) => (

{run.id} {run.name}

{run.detail}

))}
{/* Live Stream */}
Live Output ID: RUN_01HQK...
{previewLogs.map((line, i) => { const isCmd = line.startsWith("$"); const isActive = line.includes("active") || line.includes("uploading"); return (

{line}

); })}
_
); export const LandingPage = () => { const { isAuthenticated } = useAuth(); return (
{/* Hero Section */}
System Active

EDGE-NATIVE CI/CD. BUILT FOR VELOCITY.

A streamlined, serialized execution engine built on Cloudflare Durable Objects. No glue services. No yaml bloat.

{/* Why anvil section */}

A CI designed for personal project velocity.

No complex DAGs. No infrastructure mapping. Just a single execution queue connected to your Cloudflare edge infrastructure.

{valueProps.map((feature, i) => (
0{i + 1}

{feature.title}

{feature.description}

))}
{/* How it works section */}

Implementation path.

Go from an empty queue to a live edge deployment in under three minutes, entirely defined in your git history.

{workflow.map((item, i) => (

{item.step}

{item.title}

{item.description}

))}
); };