POLICY · SECURITY

Security Policy

Last updated May 19, 2026. This policy describes how Ajolla protects the data inside your workspace, the responsibilities you take on as a customer, and the channel for reporting suspected vulnerabilities. It is a working document — controls are added as we mature the product, not back-filled marketing claims.

1. Architecture and isolation

  • Workspace content is stored in Supabase (Postgres + object storage). Tenant isolation is enforced by row-level security on every workspace table and by owner-prefixed paths in object storage.
  • Server-side data mutations re-check project ownership before touching artifacts, so a tampered or stale identifier returns a friendly 404 rather than a server error.
  • Cross-tenant requests are blocked at the database layer (RLS) and again at the application layer (explicit owner_id checks in server actions).
  • Generated artifacts are written to short-lived signed URLs (60-second expiry) and never exposed via a long-lived public link.

2. Authentication and session management

  • Sign-in is delivered through Supabase Auth using either magic links (single-use OTP tokens) or OAuth with Google and GitHub.
  • Magic-link requests are rate-limited at our edge per IP and per email to defend against email-cost and reputation abuse.
  • Session cookies are HTTP-only, Secure, and SameSite=Lax. Sign-out clears the session server-side via a POST-only route to prevent CSRF via image tags.
  • Service-role credentials are scoped to server-only contexts and never exposed to the browser.

3. Network and transport

  • All traffic to the production domain is served over HTTPS (TLS 1.2+) with HSTS, including subdomain preload.
  • Strict security response headers are applied to every response: Content-Security-Policy with a per-request nonce, frame-ancestors 'none', Referrer-Policy strict-origin-when-cross-origin, Permissions-Policy minimizations, X-Content-Type-Options nosniff, and Cross-Origin-Opener-Policy same-origin.
  • URL ingestion enforces an SSRF-resistant fetcher: hostnames are DNS-resolved and every returned address is checked against private and reserved ranges; redirects are followed manually and re-validated at each hop.
  • Outbound fetches stream and size-cap responses to defend against zip-bomb-style payloads.

4. Data at rest

  • Database and object storage are encrypted at rest by Supabase using AES-256.
  • Backups follow Supabase’s managed schedule and are encrypted at rest.
  • Secrets are provided to the runtime via Vercel environment variables; we do not commit credentials to source control.
  • Customer-side encryption keys are not currently supported. Highly sensitive specs should be sanitized of secrets before upload.

5. Logging, monitoring, and incident response

  • Server-side errors are forwarded to Sentry with PII scrubbing applied at ingestion. Application logs are retained for at most 90 days.
  • Rate-limit counters and abuse signals are stored in Upstash Redis with short TTLs.
  • Suspected security incidents are triaged, contained, and remediated as quickly as the severity warrants. Customers materially affected by a confirmed incident will be notified without undue delay and given the information they need to assess the impact.
  • Post-incident, we document the root cause and the corrective action and apply the change to prevent recurrence.

6. Vulnerability management

  • Dependencies are tracked through the npm lockfile and reviewed regularly for known advisories.
  • Production deploys go through automated typecheck, lint, and build verification before they reach users.
  • Security-relevant changes to authentication, storage, or network boundaries are reviewed with elevated scrutiny.

7. Customer responsibilities

  • Use a unique, strong password on the email account or OAuth provider used to sign in to Ajolla.
  • Treat any spec that contained a live credential as compromised and rotate the credential immediately.
  • Apply human review on every generated SDK, docs site, and MCP server before deploying it in production or exposing it to autonomous agents.
  • Apply least-privilege when configuring generated MCP servers; do not enable destructive or admin tools by default.

8. Responsible disclosure

  • Email security@ajolla.dev with the affected route or workflow, reproduction steps, expected and observed behavior, and any logs or screenshots that help us assess impact.
  • Acknowledgement target: within 3 business days. Initial triage: within 7 business days. Fix timeline depends on severity; critical issues are prioritized over feature work.
  • Please do not publicly disclose a vulnerability until it has been investigated and remediated. We will credit researchers who follow this process in the resolution notice if they wish.

9. In-scope and out-of-scope for reports

  • In scope: ajolla.dev and www.ajolla.dev application surfaces, server actions, authentication flows, ingestion endpoints, and the safety classification logic of generated MCP servers.
  • Out of scope (without an exception agreed in writing): denial-of-service testing, automated scanner output without a working proof-of-concept, social-engineering attacks against Ajolla staff, and findings in third-party services that we operate via sub-processor (Supabase, Vercel, Upstash, Sentry, Resend, Cloudflare) — please report those to the relevant vendor.

10. Contact

For security disclosures, email security@ajolla.dev. For general security questions, you may also use hello@ajolla.dev.

Ajolla Security Policy