Skip to content

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
  • confirmPaddleCheckout
  • paddleWebhook
  • billing reconciliation
  • /users/{uid} profile projection

Checkout Flow ​

  1. The user starts an upgrade on the Billing page
  2. The frontend opens a Paddle.js overlay checkout
  3. The transaction ID is stored after checkout
  4. confirmPaddleCheckout attempts immediate activation
  5. 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 /users are 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

Dockit documentation