Documentation

Security

The Claude API key

  • Stored only on the server, encrypted with AES-256-GCM using a key derived from APP_SECRET.
  • Never returned by any API; at most a masked hint like sk-ant-…a1b2 is shown.
  • Never logged. AI errors shown to users are rewritten so request details cannot leak.
  • The browser never talks to Anthropic directly; every AI request goes through the Go backend.

Accounts

  • Passwords are hashed with bcrypt.
  • Sessions use random tokens in httpOnly, SameSite=Lax cookies (Secure over HTTPS); only a hash is stored.
  • OAuth uses state and PKCE, and links accounts only by verified email.
  • Sign-in endpoints are rate limited.
  • State-changing requests from other sites are rejected.

User-generated sites

Previews and published sites are served with a Content-Security-Policy sandbox. They run in an isolated origin, so their scripts cannot read the studio's cookies or call its API as the signed-in user. Preview links are signed and expire.

Limits

Per-file and per-project size limits, request size limits, a per-user request rate limit, one AI run per project at a time, and an optional daily token limit per user.