Getting started
# Three steps. About five minutes.
AgentSite is the middleware that fixes Claude, ChatGPT, Gemini, and Perplexity reading your SPA as an empty shell. Getting started with AgentSite is three steps and about five minutes: sign up, paste one prompt to Claude, ship. The Install Prompt is the line Claude runs to wire your project — it picks the right pattern for your stack (nginx, Express, Express-sidecar, Edge, or streaming-SSR SDK), drops in the snippet, and verifies the rendered output. The Snippet is what renders your site on every agent fetch and serves the discovery files agents look for (`/llms.txt`, `/.well-known/*`, per-page markdown mirrors) — same response humans get.
1. 01
## Sign up. We mint your install token.
Create an account at [/auth/sign-up](/auth/sign-up). One account-level token (`asit_…`) gets generated automatically — Claude uses it to register your site for you in step 02. No "create a site" step before the install.
**No plan picker, no domain form.** Sign-up lands you straight here with the token already in hand. Claude registers the site the first time it calls `POST /site` with your URL.
2. 02
## Paste this prompt into Claude.
Site URL — optionalIntegration pattern — optionalAuto-detect from my repoNginxExpressExpress-SidecarEdgeSDK — Streaming SSR
Leave both blank for a one-line prompt — Claude reads `https://agentsite.app/install.md`, inspects your repo, and confirms the URL and pattern with you before writing any code.
prompt for Claude (or any coding agent)Copy prompt
```
Hey! Install agentsite.app. My token: asit_….
Read https://api.agentsite.app/agent.md end to end, then follow it: register the site via POST /site, install the snippet per https://api.agentsite.app/install.md, and verify with POST /site/:id/snippet-probe.
```
Pasted it and Claude finished? Open [/dashboard](/dashboard) — your site should appear as soon as Claude calls `POST /site`. If `snippet-probe` came back green, the install is live; if it didn't, paste Claude's report back into the conversation and we'll keep going.
No coding agent on hand? Scroll to [Doing it by hand](#by-hand) below — every recipe Claude can pick from is documented there too.
3. 03
## Deploy and enjoy.™
Push your branch. Once an AI bot fetches a page, the site flips from _report mode_ (the public-side AEO scan from §01) to _live_, and the dashboard starts counting real agent traffic with the before/after baseline preserved.

[/dashboard](/dashboard)
**Dashboard shows no live agent traffic after a few minutes? Run this curl.**
Most common cause: the token landed on the wrong container (API instead of frontend). This one-liner distinguishes a missing token from a render still warming up — hit your site with the AgentSiteBot user-agent and look for the enriched `<head>`:
```
curl -sA 'AgentSiteBot/1.0' https://yoursite.com/ | grep -E '<title>|og:description|application/ld\+json'
```
If you see an updated `<title>`, an `og:description`, and at least one `application/ld+json` block, the token landed in the right pod and the render is in flight. If the output matches a plain `curl https://yoursite.com/` (your unmodified shell), re-check which container's env you set `AGENTSITE_TOKEN` in.
**Doing it by hand? Same recipes, line by line — Express + Docker is canonical; everything else is a platform delta on top.**
## What does agentsite add given what your site already does?
Honest answer: how much agentsite is worth depends on how much HTML your site already serves before JavaScript runs.
| If your site is… | You get from agentsite |
| --- | --- |
| **A client-rendered SPA**<br>React / Vue / Svelte / Solid / vanilla — `curl /` returns an empty shell | Everything. Per-route `<head>`, auto JSON-LD, markdown body spliced into a preboot `<div>` (hidden via inline CSS once your JS boots; `<noscript>` available as a per-site override), `/llms.txt`, `/sitemap.xml`, `/.well-known/*`, `.md` content negotiation. |
| **Already SSR'd**<br>Next.js SSR, Nuxt SSR, Astro hybrid, SvelteKit SSR, Rails, Django, WordPress… | Limited but real value: `/llms.txt` + `/llms-full.txt` mirrors, `.md` content negotiation (some agents prefer markdown over HTML), `/.well-known/*` agent discovery, JSON-LD only where you didn't ship it. Skip head enrichment — your SSR handles it. |
| **Statically rendered**<br>Astro static, Next static export, Hugo, Jekyll, Eleventy | Same as SSR — the `<head>` is already on disk. Worth installing for `/llms.txt`, markdown mirrors, and discovery endpoints. |
Pick your integration. Express + Docker is canonical; every other recipe is a platform-specific delta on top of it. Each integration has its own page — bookmarkable, shareable.
Production-readyVerified in production today.
[Express + Docker]( /install/express-docker)
[ Nginx (VPS) — replace Nginx]( /install/nginx-replace)
[ Nginx (VPS) — keep Nginx (sidecar)]( /install/nginx-sidecar)
[Docker Compose]( /install/docker-compose)
[Kubernetes]( /install/kubernetes)
[fly.io]( /install/fly)
[render.com (Web Service)]( /install/render)
[Railway]( /install/railway)
[Heroku]( /install/heroku)
[Google Cloud Run / AWS ECS]( /install/cloud-run)
[Replit (Reserved VM / Autoscale)]( /install/replit)
[Reverse-proxy — any HTTP origin]( /install/reverse-proxy)
[Cloudflare Pages / Workers]( /install/cloudflare)
[Vercel (non-Next Vite SPA)]( /install/vercel)
[Netlify Edge Functions]( /install/netlify)
[Static-only hosts]( /install/static-host)
**Don't see your stack?** [Tell us what you're trying to install](/contact) — we'll walk through what an integration would look like for you (and most of the time turn it into a documented recipe).
## Where do I go from here?
- [Feature reference →](/features)
- [Why we built this →](/about)
- [About AgentSiteBot (Cloudflare allowlist) →](/bot)