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