feat: Stripe subscriptions, tier-based permissions, dark mode, and UX improvements

- Fix Stripe SDK v14 compatibility (bracket notation for subscription items)
- Fix subscription period dates from subscription items instead of subscription object
- Add tier-based permissions (can_accept_payments, etc.) on tenant signup
- Add stripe_customer_id field to Tenant model
- Add clickable logo on login page (navigates to /)
- Add database setup message during signup wizard
- Add dark mode support for payment settings and Connect onboarding
- Add subscription management endpoints (cancel, reactivate)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-02 20:50:18 -05:00
parent 08b51d1a5f
commit ef58e9fc94
12 changed files with 1337 additions and 167 deletions

View File

@@ -5,6 +5,12 @@ from django.urls import path
from .views import (
# Config status
PaymentConfigStatusView,
# Subscription plans & add-ons
SubscriptionPlansView,
CreateCheckoutSessionView,
SubscriptionsView,
CancelSubscriptionView,
ReactivateSubscriptionView,
# API Keys (Free Tier)
ApiKeysView,
ApiKeysValidateView,
@@ -33,6 +39,13 @@ urlpatterns = [
# Payment configuration status
path('config/status/', PaymentConfigStatusView.as_view(), name='payment-config-status'),
# Subscription plans & add-ons
path('plans/', SubscriptionPlansView.as_view(), name='subscription-plans'),
path('checkout/', CreateCheckoutSessionView.as_view(), name='create-checkout'),
path('subscriptions/', SubscriptionsView.as_view(), name='subscriptions'),
path('subscriptions/cancel/', CancelSubscriptionView.as_view(), name='cancel-subscription'),
path('subscriptions/reactivate/', ReactivateSubscriptionView.as_view(), name='reactivate-subscription'),
# API Keys endpoints (free tier)
path('api-keys/', ApiKeysView.as_view(), name='api-keys'),
path('api-keys/validate/', ApiKeysValidateView.as_view(), name='api-keys-validate'),