terms_accepted and privacy_accepted boolean properties to CreateTenantWithPlan componentterms_accepted_at and privacy_accepted_at timestamps when creating tenantterms_accepted_at and privacy_accepted_at (timestamp nullable) to tenants table/sa/tenants/{id}openSubscriptionForm(), createSubscription(), closeSubscriptionForm() in TenantShow component/sa/tenants)
subscription-status-badge component for consistencyresetPhoneForm() method in TenantShow componentsubscription-status-badge component instead of manual status badges
trial_ends_at AND ends_at fields
trial_ends_at and left ends_at as NULLends_at for expiration checkstrial_ends_at historical value when activating/renewing paid subscriptions
trial_ends_at was set to NULL during renewal, losing historical recordends_at for existing trial subscriptions (sets ends_at = trial_ends_at where NULL)SubscriptionService::activateManual() - Always sets ends_at regardless of trial statusSubscriptionService::renewManual() - No longer clears trial_ends_at during renewalTenantsCreate component for creating new tenants with form validationTenantsEdit component for updating tenant information/sa/tenants/create, /sa/tenants/{tenant}/editUsersIndex component with search and filtering (by type, role, tenant)UsersShow component with inline editing of basic info and passwordUsersCreate component with multi-tenant assignment/sa/users, /sa/users/create, /sa/users/{user}TenantsIndex from card layout to compact table formatSubscriptionsIndex from card layout to table format.github/copilot-instructions.md)PaymentGatewayInterface for multi-gateway supportManualGateway encapsulating existing manual payment logicLemonSqueezyGateway with direct API integration (no official package dependency)WebhookController for processing Lemon Squeezy webhooks with signature verificationlemon_monthly_variant_id and lemon_yearly_variant_id to plans tableyearly_price_cents to plans table for annual billing supportbilling_cycle (monthly/yearly) to subscriptions tablenext_billing_date to subscriptions table (fixes missing field used in code)Plan::getYearlyPrice() accessor for annual pricingPlan::getLemonVariantId($billingCycle) helper methodPlan::hasLemonSqueezyIntegration() check methodbilling_cycle and next_billing_date to Subscription fillable/castsgetGateway($provider) method for gateway resolutioncreateCheckout($tenant, $plan, $provider, $billingCycle) for checkout URL generationclearNotifications() and sendActivationEmail() now public for gateway accesslemon_squeezy section to config with api_key, store_id, signing_secret/webhooks/lemon-squeezy webhook endpoint (POST, no auth)/plans route for plan selection (auth + tenant required)ManualGatewaynext_billing_date column migration was missing despite being used in codeLEMON_SQUEEZY_INTEGRATION.md with setup guide, webhook reference, and troubleshooting/sa/subscriptions/{id})next_billing_date when activatedtrial_ends_at, ends_at, and next_billing_date fieldsAvailableLimit modelmax_installationsmax_installations limit now appears in tenant management dropdowndefault_value field to bigInteger to support large values like storage quotas in bytes/sa/plans (SuperAdmin only)ThunderPack\Livewire\SuperAdmin\PlansIndexpartials.superadmin-nav view (allows apps to add custom menu items)[@subscriptionStatus](https://github.com/subscriptionStatus) Blade directive for easy integration in layouts[@subscriptionStatus](https://github.com/subscriptionStatus) or [@livewire](https://github.com/livewire)('thunder-pack::subscription-status-badge') anywheretrial_ends_at and ends_at in subscription activation messagesCreateTenantWithPlan componentCreateTenantWithPlan Livewire component for user-initiated tenant creationSubscriptionService::activateManual() to support trial mode with new $isTrial parameter/sa/* routestenant, subscription, superadminBelongsToTenant trait for automatic model scopingHasTenants trait for user-tenant relationships/docs folderHow can I help you explore Laravel packages today?