Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ node_modules
dist
.DS_Store
*.log
site
27 changes: 26 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,33 @@ jobs:
AGENTBOX_HOME: ${{ runner.temp }}/agentbox-candidate-home
run: scripts/dev.sh -- setup

site:
name: site
runs-on: ubuntu-24.04
timeout-minutes: 15
defaults:
run:
working-directory: site
steps:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Set up Node
uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
with:
node-version: 24
- name: Install locked site dependencies
run: npm ci --ignore-scripts
- name: Type-check the site
run: npm run check
- name: Build the site
run: npm run build

required:
name: required
if: ${{ always() }}
needs: [quality, host, runtime, candidate]
needs: [quality, host, runtime, candidate, site]
runs-on: ubuntu-24.04
permissions: {}
steps:
Expand All @@ -123,8 +146,10 @@ jobs:
HOST: ${{ needs.host.result }}
RUNTIME: ${{ needs.runtime.result }}
CANDIDATE: ${{ needs.candidate.result }}
SITE: ${{ needs.site.result }}
run: |
test "$QUALITY" = success
test "$HOST" = success
test "$RUNTIME" = success
test "$CANDIDATE" = success
test "$SITE" = success
5 changes: 3 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@
published versions, URLs, and checksums.
- Use `scripts/dev.sh` for agent launches from a checkout. Never add vendor
executables to the repository, runtime image, or release archive.
- Keep public behavior, docs, completions, packaging, and deterministic tests in
sync. Run `npm run check` before handing off a change.
- Keep public behavior, docs, completions, packaging, the website in `site/`,
and deterministic tests in sync. Run `npm run check` before handing off a
change.
4 changes: 4 additions & 0 deletions site/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
dist/
.astro/
.vercel/
32 changes: 32 additions & 0 deletions site/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Agentbox website

The landing page, built with [Astro](https://astro.build) as a single static
page and deployed on Vercel with `site/` as the project root.

```sh
cd site
npm install
npm run dev # http://localhost:4321
npm run build # static output in dist/
```

## Release data

Version numbers, digests, sizes, and checksums are never typed into the page.
At build time `src/lib/release.ts` reads the version the Homebrew tap serves,
that release's provenance record, and `release-inputs.json` at the release's
source commit. None of those requests use the rate-limited GitHub API.

If any request fails or returns something unexpected, the build falls back to
`src/data/release-snapshot.json` and logs a warning instead of failing. Refresh
the snapshot with `npm run snapshot`.

The page only changes when it is rebuilt, so a new release appears after the
next deployment.

## Copy

The page restates `README.md` and `docs/`. When public behavior changes there,
update the matching copy in `src/pages/index.astro`. The `agentbox info`
transcript in `src/components/Transcript.astro` mirrors the format printed by
`libexec/host.sh`.
46 changes: 46 additions & 0 deletions site/astro.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { defineConfig, fontProviders } from "astro/config";

// Vercel exposes the production domain to every build, including previews, so
// canonical and Open Graph URLs always point at the public site.
const productionHost = process.env.VERCEL_PROJECT_PRODUCTION_URL;

export default defineConfig({
site: productionHost ? `https://${productionHost}` : "http://localhost:4321",
trailingSlash: "never",
fonts: [
{
provider: fontProviders.local(),
name: "Archivo",
cssVariable: "--font-archivo",
fallbacks: ["Helvetica Neue", "Arial", "sans-serif"],
options: {
variants: [
{
src: ["@fontsource-variable/archivo/files/archivo-latin-wdth-normal.woff2"],
weight: "100 900",
stretch: "62% 125%",
style: "normal",
display: "swap",
},
],
},
},
{
provider: fontProviders.local(),
name: "Martian Mono",
cssVariable: "--font-martian",
fallbacks: ["SFMono-Regular", "Menlo", "monospace"],
options: {
variants: [
{
src: ["@fontsource-variable/martian-mono/files/martian-mono-latin-wdth-normal.woff2"],
weight: "100 800",
stretch: "75% 112.5%",
style: "normal",
display: "swap",
},
],
},
},
],
});
Loading
Loading