Hollahoop

HollaHoop

General

Anything else.

API rate limiting and abuse hardening (platform-wide)

Generalises the per-key rate limiter already shipped in src/lib/api/rest.ts to every public ingress, not just the v1 REST endpoints. Per-IP limits on unauthenticated public surfaces (feedback submission, comments, vote, signup, login, password reset, public hub reads), per-user limits on authenticated mutations, per-project burst caps so a single noisy project cannot drown the platform, and per-org daily envelopes so a misbehaving customer cannot spike infrastructure. Implementation: a small ratelimit table keyed on (scope, identifier, window_start) backed by a Postgres advisory-lock token bucket, plus an in-memory layer for hot endpoints. Fail-closed on Supabase outage; fail-open only when the limiter itself is unhealthy. Brute-force throttling on /login and /auth/* with exponential backoff per IP and per email. Captcha challenge (hCaptcha or Turnstile) auto-injected on suspicious traffic patterns - not on every request. Strict body size limits per endpoint (e.g. post body 20kb, ticket body 200kb, attachments via the upload card only). Slow-loris timeouts. Standard 429 responses with x-ratelimit-* headers and Retry-After. Surfaces a /admin/abuse internal dashboard (Hollahoop staff only, gated by is_hollahoop_admin) showing recent 429s, top noisy IPs, and a manual block list. Audit log integration: every block/unblock recorded. Out of scope: WAF/CDN-level DDOS (handled by the deployment edge if used), full bot detection ML - this card is the deterministic safety net.

PlannedGeneral·2 days ago·0

Feature flags + Labs page (per-org and per-user beta opt-in)

Foundation that lets us ship features behind an opt-in beta toggle and graduate them when they are tested. Three small tables: feature_flags (key text PK, label, description, status enum stable|beta|internal|deprecated, default_on boolean, scope enum org|user|both, graduating_target date), org_feature_overrides (org_id, flag_key, enabled), user_feature_overrides (user_id, flag_key, enabled). Stable flags ignore overrides and are always on; internal flags are only visible to Hollahoop staff (auth metadata is_hollahoop_admin); beta flags surface in a new Labs settings page; deprecated flags show a sunset notice and refuse new opt-ins. New routes: /app/{org}/settings/labs (org owner toggles beta features for the whole org, with a per-flag "default for new members" choice) and /app/account/labs (each user toggles personal-experience flags). Code-side: useFeatureFlag(key) hook on client, isFeatureEnabled(key, {orgId, userId}) server helper, both pulling from a single in-memory registry that the build seeds from feature_flags. UI: every flag-gated screen renders a small "Beta" pill near its title pulled from the same registry, plus a one-line "this is opt-in and may change" disclaimer at the top. Cards already in the planned column (support inbox + ingestion + AI assist, team chat, live view, AI Suggest, AI moderation, GitHub integration, Twilio MFA) will register themselves with status=beta from day one and graduate to stable individually as they reach quality bar. Out of scope: percentage rollouts (50% of orgs see X), cohort-based gating, A/B experiment metrics - this is opt-in betas only, not an experimentation platform.

ShippedGeneral·2 days ago·1
HollahoopGet yours