From 4cee343e2b34bbf2d0113b88fe2ffbe6f162272b Mon Sep 17 00:00:00 2001 From: clibequilibrium <105135724+clibequilibrium@users.noreply.github.com> Date: Tue, 13 Oct 2026 18:43:46 -0400 Subject: [PATCH 1/3] agents.md and llms.txt stick to ASCII punctuation Static text files can be served or opened without a charset declaration, and the UTF-8 em-dashes then render as mojibake (a-circumflex sequences) under Windows-1252. The rest of the repo's prose already uses plain hyphens; now these two files do too. --- static/agents.md | 44 ++++++++++++++++++++++---------------------- static/llms.txt | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) 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. From 3d7d3df78a15d86407f0632944eade16aa5c54c2 Mon Sep 17 00:00:00 2001 From: clibequilibrium <105135724+clibequilibrium@users.noreply.github.com> Date: Tue, 13 Oct 2026 18:47:46 -0400 Subject: [PATCH 2/3] Install heads the landing page's card/white band rotation The install section landed as a plain band directly under the plain runtime strip, which stacked two white-ish bands and left the alternation starting one section late. It now takes the card band (with border-y) that pricing used to hold, and every band below flips to keep the rhythm: pricing white, compare card, API white, architecture card, roadmap white, FAQ card, CTA white - the CTA also drops its border-t, since the FAQ card band's own bottom border draws that line. The agent-names strip inside the box switches to bg-background/60 so it still reads against the card band. Also carries the working tree's GitHub stat refresh (233 stars, 17 forks). --- src/routes/(marketing)/+page.svelte | 43 +++++++++++++++-------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/routes/(marketing)/+page.svelte b/src/routes/(marketing)/+page.svelte index 1f5c140..4e77639 100644 --- a/src/routes/(marketing)/+page.svelte +++ b/src/routes/(marketing)/+page.svelte @@ -467,10 +467,10 @@ class="mt-6 flex flex-wrap items-center justify-center gap-x-5 gap-y-1.5 font-mono text-xs text-muted-foreground/70" > - 231 stars on GitHub + 233 stars on GitHub - 10 forks + 17 forks 900+ demo backends created @@ -788,8 +788,9 @@ -
+ terminal block on this page. This is the card band that heads the + card/white alternation; every band below flips accordingly. --> +
{#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. --> +
- -
+ +
- -
+ +
- -
+ +
- -
+ +
- -
+ +
- -
+ +
From dd58fc7a980455e9570f10b41284cc30cf6e3bea Mon Sep 17 00:00:00 2001 From: clibequilibrium <105135724+clibequilibrium@users.noreply.github.com> Date: Tue, 13 Oct 2026 18:49:25 -0400 Subject: [PATCH 3/3] Lock --- agents/db/package-lock.json | 4 ++-- agents/db/package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/agents/db/package-lock.json b/agents/db/package-lock.json index 847e6f9..edee1ad 100644 --- a/agents/db/package-lock.json +++ b/agents/db/package-lock.json @@ -1,12 +1,12 @@ { "name": "@frostbase-dev/db", - "version": "0.6.1", + "version": "0.7.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@frostbase-dev/db", - "version": "0.6.1", + "version": "0.7.1", "license": "Apache-2.0", "dependencies": { "@sentry/cloudflare": "^10.66.0", diff --git a/agents/db/package.json b/agents/db/package.json index 4d79595..6a5bf4b 100644 --- a/agents/db/package.json +++ b/agents/db/package.json @@ -1,6 +1,6 @@ -{ +{ "name": "@frostbase-dev/db", - "version": "0.7.0", + "version": "0.7.1", "description": "Documents with live queries and schema-first SQL tables on Cloudflare Durable Objects, one isolated instance per collection or table - the database primitive behind Frostbase.", "license": "Apache-2.0", "type": "module",