Clubvolare
← All reference
feature

AI Gating & Quotas

What it does

Server-side fair-use limits on every AI call. Multiple layers stacked.

Layers (in order)

  1. Admin bypass — if profiles.is_admin = true, skip ALL checks below
  2. Burst limit — 20 requests / 60s per user (in-process, resets on function cold start)
  3. User status — ai_usage_limits.status can be banned (403), paused (403), throttled (cap halved)
  4. Feature kill switch — feature_flags.{ai_assistant_enabled,ai_planner_enabled,ai_email_import_enabled}
  5. Per-user daily cap — ai_budget_config.per_user_caps JSON; default 50/day for chat & smart-fill, 5/day for planner
  6. Global daily USD budget — ai_budget_config.global_daily_usd_cap (default $25)
  7. Input size cap — 8000 chars per request

Admin controls

  • /admin/ai-usage — live usage chart, per-user limits, reset
  • /admin/feature-flags — kill switches
  • DB direct: ai_budget_config row id=default for caps and costs

Audit trail

Every blocked call writes to audit_logs with action=ai_blocked and the reason.

Related files

supabase/functions/ai-assistant/index.ts, tables: ai_usage_daily, ai_usage_limits, ai_budget_config, ai_global_budget

Tags: ai, gating, admin, quota
Updated 5/26/2026