{#each agentNames as name (name)}
{name}
@@ -869,8 +870,9 @@
-
+ the API section on purpose, with /pricing's own hero copy.
+ White band, now that the install card band sits above it. -->
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
diff --git a/static/agents.md b/static/agents.md
index d4e8c2b..455ba4a 100644
--- a/static/agents.md
+++ b/static/agents.md
@@ -8,23 +8,23 @@ architecture.
Pick ONE path, then run the Verify step for it.
-- **Path A — throwaway demo.** No account, no deploy, ready in seconds.
+- **Path A - throwaway demo.** No account, no deploy, ready in seconds.
Best for prototypes, hackathons, and trying the API.
-- **Path B — the user's own Cloudflare account.** A real, self-hosted backend.
+- **Path B - the user's own Cloudflare account.** A real, self-hosted backend.
Best for production.
-- **Path C — a managed console project.** The user already has an account on
+- **Path C - a managed console project.** The user already has an account on
frostbase.dev or a self-hosted console.
-## Path A — throwaway demo (no account)
+## Path A - throwaway demo (no account)
Mint a project id: `demo-` + 12 random lowercase hex characters, generated
-with a CSPRNG — the id is the only credential, so it must be unguessable.
+with a CSPRNG - the id is the only credential, so it must be unguessable.
```bash
node -e "console.log('demo-'+require('crypto').randomBytes(6).toString('hex'))"
```
-The project exists the moment you touch it — there is no create call. Your
+The project exists the moment you touch it - there is no create call. Your
base URLs (replace ``):
```
@@ -35,7 +35,7 @@ OpenAPI https://frostbase.dev/api/projects//openapi.json
Console https://frostbase.dev/dashboard/
```
-Fetch the OpenAPI document first — it is public and describes every endpoint
+Fetch the OpenAPI document first - it is public and describes every endpoint
for this exact project. Point the user at the Console URL: it is a full
dashboard for their demo project and updates live as your code writes data.
@@ -46,7 +46,7 @@ project; graduate to Path B or C instead.
### Verify (Path A)
Collections default to authenticated access, so mint a project token, create
-the collection explicitly, then write — anonymous sign-in counts as signing
+the collection explicitly, then write - anonymous sign-in counts as signing
in:
```bash
@@ -65,15 +65,15 @@ curl -s -X POST $BASE/db/collections/posts/documents \
```
Step 4 answers `201` with the document, now visible in the Console URL above.
-Create every collection explicitly, as in step 3 — writes also auto-create on
+Create every collection explicitly, as in step 3 - writes also auto-create on
first touch, but explicit creation is deterministic and is where access modes
are set. If a write ever answers `503 {"error":"collection is unavailable"}`,
create the collection explicitly and retry the write.
-## Path B — the user's own Cloudflare account
+## Path B - the user's own Cloudflare account
Requires Node 20+ and a Cloudflare account (the free tier is enough).
-`npx wrangler login` opens a browser — have the user run it, or let them set
+`npx wrangler login` opens a browser - have the user run it, or let them set
`CLOUDFLARE_API_TOKEN`. Ask before deploying; it creates resources on their
account.
@@ -93,9 +93,9 @@ Existing Worker project: run `frostbase add ` inside it instead of
`init`. It npm-installs the package, merges the agent's config fragment into
`wrangler.jsonc`, wires the entrypoint, and reruns `wrangler types`. It is
idempotent and never overwrites values the user set. `wrangler.toml` projects
-are declined — convert to `wrangler.jsonc` first.
+are declined - convert to `wrangler.jsonc` first.
-The deployed Worker serves every project id under these bases — pick one id
+The deployed Worker serves every project id under these bases - pick one id
(for example the app's name) and use it everywhere; the first request
provisions it:
@@ -106,7 +106,7 @@ Storage https://.workers.dev/agents/storage-agent/
```
No secrets are required: each project generates its own signing key. Sign-in
-works immediately — the deployment trusts its own origin. Only add
+works immediately - the deployment trusts its own origin. Only add
`TRUSTED_ORIGINS` (in `wrangler.jsonc` vars) for *extra* origins, like a
separate domain serving the UI.
@@ -117,11 +117,11 @@ curl -s https://.workers.dev/agents/auth-agent//config
```
JSON config comes back. Operator routes (`/admin/*`, `/overview`) answer 404
-on this Worker by design — they are reachable from server code through the
+on this Worker by design - they are reachable from server code through the
Durable Object binding, never over public HTTP. Do not set
`EXPOSE_OPERATOR_API` on a Worker with a public hostname.
-## Path C — a managed console project
+## Path C - a managed console project
```bash
npm install -g @frostbase-dev/cli
@@ -131,14 +131,14 @@ frostbase key create # server-side service key, shown once
```
Base URLs are the console's, same shapes as Path A with the real project id.
-Service keys (`fsb_…`) are admin-grade and server-only: the API refuses any
+Service keys (`fsb_...`) are admin-grade and server-only: the API refuses any
request carrying an `Origin` header, so a key leaked into frontend code fails
at the desk, not in production. Put the key in an env var
(`FROSTBASE_SERVICE_KEY`), never in the bundle or the repo.
## Integrate the app
-Auth — the stock Better Auth client works as-is:
+Auth - the stock Better Auth client works as-is:
```ts
import { createAuthClient } from 'better-auth/client'; // or /react, /svelte
@@ -146,7 +146,7 @@ const auth = createAuthClient({ baseURL: '' });
await auth.signUp.email({ name, email, password });
```
-Database — documents, typed tables, and live queries:
+Database - documents, typed tables, and live queries:
```ts
import { createDbClient } from '@frostbase-dev/db/client';
@@ -163,10 +163,10 @@ posts.subscribe({ orderBy: [{ field: 'votes', direction: 'desc' }], limit: 25 },
{ onSnapshot: (docs) => render(docs) });
```
-Storage — `createStorageClient` from `@frostbase-dev/storage/client`, same
+Storage - `createStorageClient` from `@frostbase-dev/storage/client`, same
`baseUrl`/`getToken` pattern; `upload()` handles multipart above 100 MB.
-Everything is also plain HTTP — no SDK is required. The per-project OpenAPI
+Everything is also plain HTTP - no SDK is required. The per-project OpenAPI
document is the complete, machine-readable contract; prefer it over guessing
routes.
@@ -182,4 +182,4 @@ routes.
- Demo projects are throwaway: unguessable-id access, capped, erased in ~30
days. Say so in your handoff to the user.
-Source: https://github.com/frostbase-dev/frostbase · Site: https://frostbase.dev
+Source: https://github.com/frostbase-dev/frostbase - Site: https://frostbase.dev
diff --git a/static/llms.txt b/static/llms.txt
index 6c18cd0..bd8b861 100644
--- a/static/llms.txt
+++ b/static/llms.txt
@@ -7,7 +7,7 @@ Frostbase is agent-first: every backend primitive ships as a versioned npm packa
## Site
- [Home](https://frostbase.dev/): what it is, how it compares to Firebase and Supabase, architecture, and roadmap.
-- [agents.md](https://frostbase.dev/agents.md): setup instructions written for coding agents — throwaway demo projects, self-hosted deploys, and managed projects.
+- [agents.md](https://frostbase.dev/agents.md): setup instructions written for coding agents - throwaway demo projects, self-hosted deploys, and managed projects.
- [Pricing](https://frostbase.dev/pricing): the same workload priced on Cloudflare, Firebase, and Supabase, with dated sources.
- [Live demo](https://frostbase.dev/dashboard): an ephemeral throwaway project, no sign-up.