Billing & Subscriptions

Overview

Nigall platform subscriptions unlock Tools hub modules. Plans include Free, Essentials (basic), Presenter Pro (plus), Operations Suite (pro), and Planner Pro (planner_pro). Enterprise adds Exhibitors via sales. Billing is processed through Stripe.

Purpose

Align subscription tier with operational needs while keeping free event hosting available.

Who should use it

  • Organizers upgrading for modules
  • Finance approving SaaS spend
  • Admins assigning plans

Benefits

  • Clear tool matrix per tier
  • Monthly and annual billing cycles
  • Balance-due calculation on upgrades
  • Lower transaction fees on higher tiers (3% vs 5%)

Action Path
Pricing page /pricing/
Subscription pricing /pricing/subscription/
Select plan /pricing/select/
Stripe checkout /payments/subscription/checkout/
Success /payments/subscription/success/
Tools hub /events/tools/

Prerequisites

  • Authenticated user
  • Stripe customer flow configured
  • Understanding of required tool keys

Plan comparison

Plan Code Monthly Annual Unlocked tools
Free free $0 $0 Event hosting only
Essentials basic $29 $276 Attendees, Program, Communications
Presenter Pro plus $79 $756 + Speakers, Talent, Venues
Operations Suite pro $149 $1,428 + Volunteers, Vendors, Sponsors
Planner Pro planner_pro $49 $468 Operations Suite + Event Planner CRM
Enterprise contact Custom Custom + Exhibitors

Transaction fees (ticket revenue)

Plan Platform fee
Free, Essentials 5%
Presenter Pro, Operations Suite, Planner Pro 3%

Function: calculate_payment_split() in payments/services.py.


Step-by-step — Upgrade plan

  1. Visit /pricing/.
  2. Click Select on target plan → /pricing/select/.
  3. Choose billing cycle (monthly/annual).
  4. Proceed to /payments/subscription/checkout/.
  5. Complete Stripe payment.
  6. On success, subscription_plan and subscription_billing_cycle updated on user.

[SCREENSHOT: Pricing comparison table]


Step-by-step — Downgrade to Free

  1. Select Free plan at /pricing/select/.
  2. System applies plan change with no balance due if downgrading.
  3. Module toggles on events may become locked on next edit.

Field descriptions

Field Description
subscription_plan free / basic / plus / pro / planner_pro
subscription_billing_cycle monthly / annual / per_event
PLAN_UPGRADE_FOR_TOOL Maps tool key → minimum plan
EVENT_FORM_FIELD_TOOL_KEYS Maps event toggles → tool keys

Business rules

Rule Detail
Free hosting Always allowed
Paid tools Require PAID_SUBSCRIPTION_PLANS
Exhibitors Enterprise label — not in PLAN_TOOL_KEYS
Upgrade balance calculate_subscription_balance — no negative due
Staff Bypass user_has_tool_access checks
Per-event billing Enum exists; prices $0 in current price table

Validation rules

  • Invalid plan name rejected at checkout
  • Cannot checkout Free via Stripe session

User permissions

Role Change own plan Assign others
User ✅ via Stripe
Admin ✅ via admin

Workflow

flowchart LR Pricing --> Select --> Checkout[Stripe checkout] Checkout --> Webhook[Payment success] Webhook --> PlanUpdate[user.subscription_plan] PlanUpdate --> Tools[Tools unlocked]

Examples

Meetup organizer: Essentials annual for Attendees + email blasts.

Festival producer: Operations Suite for vendors, sponsors, volunteers.

Best practices

  • Annual plan for 20%+ savings vs monthly
  • Upgrade before enabling gated module toggles
  • Review transaction fee tier when selling high-volume tickets

Tips

  • user_has_paid_tools_subscription() for feature flags
  • Hub display order: HUB_TOOLS_DISPLAY_ORDER

Common mistakes

Mistake Result Fix
Enable exhibitors on Pro Toggle locked Enterprise sales
Expect refund on downgrade Policy-dependent Contact support

FAQs

Do attendees pay subscription?
No — organizers pay; attendees pay tickets.

Essentials vs Basic?
Same plan — display name Essentials, code basic.

Troubleshooting

Symptom Cause Fix
Tools still locked Webhook delay Refresh; check payment success
Wrong plan after pay Session error Verify subscription_success view

Screenshot placeholders

  • [SCREENSHOT: Pricing page three tiers]
  • [SCREENSHOT: Tools hub locked vs unlocked cards]
  • [SCREENSHOT: Subscription checkout]

Administrator notes

  • Manually set plan in Django admin for comps
  • SUBSCRIPTION_PLAN_PRICES in payments/services.py

Developer/API notes

Item Location
Plan constants users.models.CustomUser
Tool matrix users/subscription_plans.py
Checkout payments/views.create_subscription_checkout_session

See also: Platform Overview