Skip to content

Server & keys ​

The Account → Server & keys screen is where you connect the app to its services and check that everything is working. What it shows depends on where the app is running:

The app runs on…The screen shows
npx estudar on your computerStatus + forms for the keys + table creation + publishing
Cloudflare (published)Status, read-only — the keys are Worker secrets and can't be read
Static files onlyA local-mode notice and how to connect a server

The status panel ​

Status panel with one dot per service
Green: responds. Red: there's a problem, with the reason alongside. Grey: not configured yet.
DotWhat it checksHow
AppThe server responds, and where it runsGET /api/health
SupabaseThe project responds and the public key is acceptedGET <url>/auth/v1/health
DatabaseThe tables existGET <url>/rest/v1/user_data?limit=1
AIThe key and model are validQueries the model metadata — uses no tokens
Usage limitThere's a secret key to limit generations per personConfiguration
CloudflareThe app is published and the address respondsGET <published url>/api/health

The Account sheet shows a summary with three dots (Supabase, AI, Cloudflare).

Account sheet with the status summary
The summary on the Account sheet.

Common messages ​

MessageWhat to do
Invalid public (anon/publishable) keyCopy the publishable/anon key again from Project Settings → API Keys
Tables not created yetUse Set up (with a token) or copy the SQL
Model X doesn't existFix the Model field or leave it empty to use the default
Invalid key or no accessCheck the key and that it has access to that provider's API
Cloudflare account not connectedConnect Cloudflare account and authorise it in the browser
Wrangler isn't installedRun npx estudar@latest again; in a copy of the repository, npm install

Variables ​

Locally they live in .dev.vars (in ~/.estudar, or in the project folder in a copy of the repository); on Cloudflare, as Worker secrets. The screen writes and uploads these for you.

VariableRequiredWhat for
SUPABASE_URLfor account and syncProject URL (public)
SUPABASE_ANON_KEYfor account and syncpublishable/anon key (public; RLS rules protect the data)
SUPABASE_SERVICE_KEYnosecret/service_role key; enables the daily AI limit. Server only
AI_PROVIDERnogemini (default), anthropic or openai
AI_API_KEYfor AIThe provider's key
AI_MODELonly for openaiOverrides the default model
AI_BASE_URLnoFor OpenAI-compatible APIs (e.g. https://openrouter.ai/api/v1)
MAX_PLANS_PER_DAYnoAI requests per person per day (default 10)
AUTH_GOOGLEnotrue to show sign-in with Google

Security of the setup screen ​

The setup routes (/api/setup/*) exist only on the local server (npx estudar), never in the published Worker. In addition:

  • the local server listens only on 127.0.0.1;
  • the routes only accept requests with a localhost Host and Origin and with the app's own header — another site open in your browser can't use them;
  • secret keys are never sent back to the browser in full (they show as ••••1234);
  • the Supabase personal token (sbp_…) stays only in memory during the session.

More in Privacy and security.

Released under the MIT licence.