Feature registry
Scope: the feature → plan/quota mapping that is still true, verified against the entitlements code. The legacy registry's FR §X.Y numbering, [v1]/[v1-roadmap] status tags, and never-built sections are historical — the legacy file stays put for the B-021 archive; do not migrate its backlog prose.
Source-checked against optolink-backend @ 29f8589, 2026-10-07 (
src/entitlements/plans.config.ts—FEATURE_KEYS,QUOTA_KEYS, per-planfeatures/quotas; cross-checked with the plan matrix on Entitlements enforcement).
The four feature gates
Everything feature-gated flows through EntitlementsService.canUseFeature
against exactly four FeatureKeys:
| FeatureKey | Unlocks | First plan with it |
|---|---|---|
custom_domains | Org-owned CNAME domains with auto-SSL | Solo |
team_members | Inviting team members (seats are the team_members quota) | Solo |
api_access | The API-key surface — SDK integration at all | Growth |
analytics_export | Analytics export (the Scale differentiator) | Scale |
Starter has none of the four — full deep-linking core (links, deferred
matching, QR, managed subdomain, templates, basic analytics), no team, no API,
no custom branding. api_keys is not a quota: the two fixed keys per org
are structural, gated by the api_access feature.
The five quota keys
| QuotaKey | Counts |
|---|---|
links | total Link rows |
clicks_per_month | clicks since the subscription period start |
domains | domains not in their removal grace window |
team_members | OrgMember rows + pending Clerk invitations |
templates | non-system LinkTemplate rows |
Per-plan limits: Pricing & plans. Free Starter is the
only hard-stop tier; paid tiers run clicks_per_month as overage, everything
else as block.
Shipped but ungated (no FeatureKey)
Short links (Base62 codes), deep links (Universal/App Links), deferred deep linking (clipboard → fingerprint ladder), QR codes (fixed shape), link expiry + fallbacks, tags/metadata, link deactivation, managed subdomain, link templates (system + org), click analytics (per-link + org summary), Clerk auth with the five-role RBAC, billing self-service (upgrade/downgrade/cancel), ops surface.
Registry entries never built (status: deferred)
From the legacy registry, still true at HEAD — nothing ships a gate, endpoint, or surface for: install attribution (lookback windows, last/first-click models), in-app event tracking, conversion eligibility rules, campaign management, A/B testing, fraud detection, smart banners, referral/invite link types, webhooks & integrations, MMP/CRM/warehouse exports, sandbox environments, white-label/custom themes, configurable dashboards, scheduled email reports. The Web SDK and React Native plugin also never shipped (the four SDKs are Flutter, iOS, Android, Node). MAU as a quota/meter is backlog B-026.