Credits Expiration
Systematic 90-day expiration policy for all MLC (Meclabs Credits) ensuring predictable revenue recognition, healthy credit circulation, and automated customer communication at optimal intervention points.
Overview
The credits expiration system implements a uniform 90-day validity period across all credit types - plan allocations, Customer Kit credits, and top-ups. This consistency simplifies customer messaging while optimizing platform economics through managed breakage rates.
Expiration Policy
Universal 90-Day Rule
All credits expire exactly 90 days from their allocation or purchase date:
- Plan Credits: Allocated monthly with billing cycle, expire 90 days from allocation
- Customer Kit Credits: 1,000 MLC activated upon kit deployment, expire after 90 days
- Top-up Credits: Purchased on-demand at $0.0135/MLC, expire 90 days from purchase
- 21-Day Build Credits: Trial credits expire at day 21 decision gate if subscription declined
No Rollover or Extension
Credits cannot be rolled over, extended, or refunded after expiration. This policy applies uniformly regardless of credit source or customer tier.
Consumption Priority
Credits are consumed in FIFO (First In, First Out) order:
- Oldest credits consumed first to minimize expiration losses
- Automatic source selection prioritizes expiring credits
- Cross-pool consumption when primary pool exhausted
- Overage billing only after all available credits consumed
Tracking Architecture
Credit Ledger Structure
Each credit allocation maintains metadata for expiration tracking:
interface CreditAllocation {
id: string;
organizationId: string;
teamId?: string;
userId?: string;
// Credit details
amount: number; // MLC allocated
remaining: number; // MLC available
consumed: number; // MLC used
// Expiration tracking
allocatedAt: Timestamp; // Allocation timestamp
expiresAt: Timestamp; // Exactly 90 days later
expiredAmount: number; // MLC expired unused
// Source identification
source: "subscription" | "kit" | "topup" | "trial";
sourceId: string; // Plan/Kit/Transaction ID
}Daily Expiration Processing
Automated batch job runs daily at 2:00 AM UTC:
- Identify Expiring Credits: Query allocations where
expiresAt <= now() - Calculate Breakage: Record
expiredAmount = remaining - Update Balances: Zero out expired allocation remaining balance
- Generate Events: Emit expiration events for analytics and notifications
- Archive Records: Move expired allocations to historical storage
Notification System
Pre-Expiration Alerts
Multi-channel notifications at strategic intervals before expiration:
30-Day Warning (60 days remaining)
- Email: Monthly usage summary with expiration reminder
- Dashboard: Yellow warning badge on credit balance
- Message: "Your credits will expire in 60 days. Use them or lose them!"
14-Day Alert (76 days after allocation)
- Email: Targeted alert with usage suggestions
- In-App: Modal on login if >500 MLC expiring
- Dashboard: Orange alert banner
- Message: "Act now - 14 days until credit expiration"
7-Day Urgency (83 days after allocation)
- Email: Daily reminder if >1,000 MLC expiring
- In-App: Persistent notification bar
- Dashboard: Red critical alert
- Message: "Final week - use your expiring credits"
24-Hour Final Notice
- Email: Urgent notice with exact expiration time
- SMS: Optional for accounts >$500/month
- Message: "Last chance - credits expire tomorrow at [time]"
Post-Expiration Communication
Expiration Confirmation
Sent immediately after daily processing:
- Subject: "Credits Expired - Action Required"
- Content: Amount expired, renewal options, usage recommendations
- CTA: One-click top-up purchase or plan upgrade
Monthly Breakage Report
First Monday of each month for accounts with >10% breakage:
- Analysis: Credit utilization patterns and optimization tips
- Recommendations: Model selection, usage scheduling, team training
- Incentive: 10% bonus credits on next top-up if breakage reduced
Renewal Workflows
Automated Renewal Options
Auto Top-up
Configurable automatic credit purchases before expiration:
- Trigger Threshold: When <1,000 MLC remain with <7 days validity
- Purchase Amount: Preset blocks (10K, 25K, 50K, 100K MLC)
- Billing: Uses default payment method at $0.0135/MLC
- Notification: Email confirmation with invoice
Smart Renewal
ML-powered renewal recommendations based on usage patterns:
- Prediction Model: Forecasts next 30-day consumption
- Timing Optimization: Suggests purchase 7-14 days before depletion
- Amount Calculation: Historical usage + 20% buffer
- Approval: Requires one-click confirmation
Manual Renewal Process
Self-service renewal through billing dashboard:
- Usage Analytics: View consumption trends and projections
- Expiration Timeline: Visual calendar of credit expirations
- Quick Purchase: Pre-filled amounts based on tier and history
- Bulk Discount: 5% bonus on purchases >50,000 MLC
Breakage Economics
Expected Breakage Rates
Industry-calibrated expiration rates by usage segment:
| Segment | Monthly Usage | Expected Breakage | Effective Margin Impact |
|---|---|---|---|
| Light Users | <30% of allocation | 40-50% | +8-10% margin |
| Average Users | 30-70% of allocation | 15-25% | +3-5% margin |
| Power Users | >70% of allocation | 5-10% | +1-2% margin |
| Enterprise | Custom allocations | <5% | Negotiable |
Revenue Recognition
Expired credits follow specific accounting treatment:
- Deferred Revenue: Credits recorded as liability until consumed/expired
- Recognition Event: Revenue recognized upon usage or expiration
- Breakage Revenue: Expired credits recognized as "other revenue"
- Reporting: Separate line item in financial statements
Customer Kit Considerations
Kit-Specific Expiration
Customer Kits have unique expiration dynamics:
- Activation: 1,000 MLC credits activate on kit deployment
- Independence: Kit credits expire independently of organization credits
- Visibility: End users see expiration in their dashboard
- Renewal: Partners handle kit renewal/top-up decisions
Partner Communication
Reseller partners receive additional notifications:
- Weekly Summary: Aggregate kit expiration across all deployments
- Bulk Renewal: Options for renewing multiple kits simultaneously
- White-Label: Customizable expiration messaging for end users
- Commission Protection: Expired credits don't affect commission calculations
Strategic Adjustments
Dynamic Expiration Windows
Platform reserves right to adjust expiration for strategic purposes:
| Scenario | Current Policy | Potential Adjustment | Trigger Condition |
|---|---|---|---|
| Standard | 90 days | No change | Default state |
| Promotional | 90 days | 120 days | New customer acquisition |
| Enterprise | 90 days | 180 days | Annual contract >$50K |
| High Breakage | 90 days | 60 days | Platform breakage >15% |
| Retention Risk | 90 days | 120 days | Churn score >0.7 |
Seasonal Considerations
Expiration policy adapts to usage patterns:
- Q4 Extension: Optional 30-day extension during holidays
- Summer Slowdown: Proactive alerts in July/August
- Fiscal Year-End: Bulk purchase incentives before expiration
Implementation Details
Database Schema
Firestore collections for expiration tracking:
// Credit allocations with expiration
credits/{orgId}/allocations/{allocationId}
- amount: number
- remaining: number
- allocatedAt: Timestamp
- expiresAt: Timestamp
- source: string
- status: 'active' | 'expired' | 'consumed'
// Expiration events for analytics
events/{orgId}/expirations/{eventId}
- allocationId: string
- expiredAmount: number
- expiredAt: Timestamp
- notificationsSent: string[]API Endpoints
tRPC procedures for expiration management:
// Get credits with expiration dates
trpc.credits.getWithExpiration({
orgId: string,
includeExpired?: boolean
})
// Get expiring credits
trpc.credits.getExpiring({
orgId: string,
daysUntilExpiration: number
})
// Configure auto-renewal
trpc.credits.setAutoRenewal({
orgId: string,
enabled: boolean,
threshold: number,
amount: number
})Notification Templates
Standardized messaging for consistency:
interface ExpirationNotification {
type: "30day" | "14day" | "7day" | "24hour" | "expired";
recipientType: "owner" | "admin" | "member" | "partner";
channel: "email" | "inapp" | "dashboard" | "sms";
// Dynamic content
creditsExpiring: number;
expirationDate: Date;
suggestedAction: string;
renewalLink: string;
}Analytics & Monitoring
Key Metrics
Real-time tracking of expiration dynamics:
- Breakage Rate: Percentage of credits expiring unused
- Renewal Rate: Percentage purchasing before expiration
- Notification Effectiveness: Click-through rates by channel/timing
- Recovery Revenue: Top-ups triggered by expiration alerts
- Margin Impact: Effective margin improvement from breakage
Operational Dashboards
Administrative views for expiration management:
- Expiration Calendar: Organization-wide expiration timeline
- Breakage Trends: Historical patterns by segment/tier
- Alert Performance: Notification engagement metrics
- Revenue Impact: Breakage contribution to gross margin
Best Practices
For Platform Administrators
Optimization Strategies
- Segmented Messaging: Tailor alerts based on usage patterns and tier
- Predictive Interventions: Use ML to identify high-breakage risk accounts
- Incentive Timing: Offer renewal bonuses 14 days before expiration
- Partner Enablement: Provide white-label expiration management tools
- A/B Testing: Continuously optimize notification timing and messaging
For Organization Owners
- Usage Planning: Schedule high-consumption tasks before expiration
- Team Training: Educate members on credit lifecycle
- Auto-Renewal: Configure thresholds to prevent disruption
- Monitoring: Set up alerts at 50% and 80% consumption
- Bulk Purchasing: Take advantage of volume discounts
For Partners
- Proactive Management: Monitor kit expiration across deployments
- Value Communication: Frame expiration as usage incentive
- Renewal Campaigns: Batch communications for efficiency
- Margin Optimization: Price services considering breakage rates
- Support Preparation: Train team on expiration policies
Compliance Considerations
Regulatory Requirements
- Clear Disclosure: Expiration terms prominent in purchase flow
- Reminder Obligations: Notifications required in certain jurisdictions
- Refund Rights: Some regions mandate unused credit refunds
- Accounting Standards: ASC 606 compliance for breakage revenue
Terms of Service
Expiration policy clearly stated in customer agreements:
- Purchase confirmation emails include expiration date
- Dashboard displays days remaining for each allocation
- API responses include expiration timestamps
- Monthly statements show expiring credits
Policy Enforcement
The 90-day expiration is strictly enforced with no exceptions outside documented enterprise agreements. Customer service cannot extend or restore expired credits.