Appearance
Billing and Access Control
Dockit's current billing provider is Paddle. Previous Lemon Squeezy dependencies have been removed, and user entitlements are managed through Paddle state plus a server-side projection.
Core Components
- Paddle.js checkout
confirmPaddleCheckoutpaddleWebhook- billing reconciliation
/users/{uid}profile projection
Checkout Flow
- The user starts an upgrade on the Billing page
- The frontend opens a Paddle.js overlay checkout
- The transaction ID is stored after checkout
confirmPaddleCheckoutattempts immediate activation- Webhook and reconciliation align long-term entitlement state
Why Webhook Alone Is Not Enough
Webhooks can be delayed, missed, or retried unexpectedly. Dockit adds periodic reconciliation to reduce entitlement drift.
Admin Overrides
For operations and testing, admin accounts can override a user's test plan directly.
- Force Free
- Force Pro
- Use Billing
This is a testing layer applied on top of the entitlement projection.
Security Principles
- API keys and webhook secrets stay in server-side secrets only
- The client sees only the Paddle client-side token
- Direct writes to
/usersare minimized - Profile updates flow through callables and server logic
What Users Experience
From the user's perspective, the important behavior is:
- Upgrade begins inside Dockit
- Pro can activate immediately after checkout
- Long-term status is corrected by webhook and reconciliation
- Admin testing tools are separate from real billing state