Appearance
Billing & Plans
Manage your subscription, payment method, and invoices from Account → Billing & Plans.
Plans
| Plan | For | Account type |
|---|---|---|
| DEV | Local sandbox & personal experiments (free) | personal |
| PRO | Professional developers, cloud hosting, production | personal |
| ULTRA | Power users: scalability, compliance, infra planning | personal |
| TEAMS | Shared workspaces with Ultra accounts for every member | teams |
Switching plans is instant via the plan selector. The response re-issues your session token so the new plan and entitlements take effect immediately.
Pricing (env-configurable)
Plan amounts are not hardcoded. The plan catalog (PLAN_CATALOG) is built at runtime from NANOKIT_PRICE_* environment variables, expressed as integer cents. This lets a deployment set its own currency/amounts without code changes; the values below are the documented defaults, not fixed prices.
| Plan | Default price | Price env var(s) (cents) | Stripe price id env |
|---|---|---|---|
| DEV | Free (€0) | — | — |
| PRO | €19 / mo | NANOKIT_PRICE_PRO_MONTH, NANOKIT_PRICE_PRO_YEAR | STRIPE_PRICE_PRO_MONTH / _YEAR |
| ULTRA | €39 / mo | NANOKIT_PRICE_ULTRA_MONTH, NANOKIT_PRICE_ULTRA_YEAR | STRIPE_PRICE_ULTRA_MONTH / _YEAR |
| TEAMS | €49 / mo base + €39 / user | NANOKIT_PRICE_TEAMS_MONTH, NANOKIT_PRICE_TEAMS_YEAR, NANOKIT_PRICE_TEAMS_SEAT | STRIPE_PRICE_TEAMS_MONTH / _YEAR |
Note. Prices are integer cents — e.g.
NANOKIT_PRICE_PRO_MONTH=1900is €19.00. Yearly amounts are independent env vars (commonly discounted vs. 12× monthly).
Teams per-seat tiering
A Teams bill is base + per-seat, with an optional volume tier for large teams. The monthly total for n active seats is:
base
+ min(n, threshold) × perSeat
+ max(0, n − threshold) × volumeSeat| Env var (cents) | Default | Meaning |
|---|---|---|
NANOKIT_PRICE_TEAMS_MONTH | — | Base subscription, before seats. |
NANOKIT_PRICE_TEAMS_SEAT | — | Per-seat price up to the volume threshold (€39 documented). |
NANOKIT_PRICE_TEAMS_SEAT_VOLUME | — | Cheaper per-seat price above the threshold. |
NANOKIT_PRICE_TEAMS_VOLUME_THRESHOLD | 20 | Seat count at which the volume rate kicks in. |
Note.Choosing TEAMS unlocks team creation. The plan and the account type are kept in sync: moving to the Teams plan sets your account to
teams; moving to any other plan sets it back topersonal. Existing accounts that were on the Teams plan are reconciled automatically on next load. See Account types.
Seats (Teams plan)
A Teams subscription includes a number of seats. Active members count against seats; inviting beyond your seat count prompts you to add seats. Only the Owner manages billing and seats (see the roles matrix).
Payment method
Add or update a credit card from the Billing view. Card details are handled through a certified payment gateway — Nanokit never stores raw card numbers.
Invoices
The Invoice and Payment History table lists each invoice with its issue date, payment method, amount, and status (Paid / Pending). Download any invoice as a record for your accounting.
Billing modes (mock / sandbox / live)
Billing (the api-billing service) runs in one of three modes, selected per environment — never hardcoded. The Account UI shows the active mode so you always know whether charges are real.
| Mode | When | Behaviour |
|---|---|---|
| mock | Local dev (no Stripe key) | Fully in-process — plan changes activate instantly with a fake card. No network, no Stripe account needed. |
| sandbox | NANOKIT_STRIPE_SANDBOX=1 (e.g. staging/test) | Stripe test mode: real Checkout/webhooks with test cards, no real charges. If no test key is configured, falls back to the in-process simulation (still fake cards). |
| live | Production (sk_live_ key) | Real Stripe, real charges. |
Warning.Safety: while
NANOKIT_STRIPE_SANDBOXis on, a live Stripe key is refused — a sandbox/test environment can never charge a real card. A test key (sk_test_…) without the flag automatically runs in sandbox.
Configuration
| Variable | Purpose |
|---|---|
NANOKIT_STRIPE_SANDBOX | 1/true → force sandbox (test) mode for that environment. |
STRIPE_SECRET_KEY | Stripe secret key. sk_live_… for live; sk_test_… for sandbox. |
STRIPE_SECRET_KEY_TEST | Optional dedicated test key, preferred in sandbox. |
STRIPE_WEBHOOK_SECRET | Verifies incoming Stripe webhooks. |
Test cards (sandbox)
In sandbox mode use Stripe's test cards — they never move real money:
| Card number | Result |
|---|---|
4242 4242 4242 4242 | Payment succeeds |
4000 0025 0000 3155 | Requires 3D Secure authentication |
4000 0000 0000 9995 | Declined (insufficient funds) |
Use any future expiry date, any 3-digit CVC, and any postal code. More test numbers are in the Stripe testing docs.
Note. Nanokit's hosted environments use sandbox outside production, so you can try upgrades, downgrades, and team seats end-to-end with the test cards above — nothing is charged. Production runs in live mode.