UX Overhaul & Advanced Stripe Support
Dozens of improvements to the seller dashboard and customer portal, plus advanced Stripe subscription lifecycle handling.
This is the biggest update since launch — 62 commits focused on polish, clarity, and closing the gaps you hit in day-to-day use.
Advanced Stripe subscription handling
Stripe now automatically manages customer access across the full subscription lifecycle.
- Refunds — access is revoked when a charge is refunded
- Paused subscriptions — access is suspended while a subscription is paused
- Cancellations — access is revoked when a subscription ends
- Renewals — access is automatically restored on renewal
- Expiry dates — customers see exactly when their access expires
- Access expiration emails — customers are notified automatically when access ends
- Cancellation banner — customers see a clear notice when their subscription is scheduled to cancel
LemonSqueezy webhooks received the same treatment.
Customer portal improvements
The customer-facing /my-products page got a full pass.
- Mobile support — works on phones now, not just desktop
- Multiple variations — customers with access to more than one variation see all of them
- Accessible images — customers can browse the Docker images they're entitled to pull
- Suspension page — clear messaging when access is suspended instead of a silent failure
Seller dashboard polish
Customer management
- Customer drawer now has two tabs: Info (activity log, product access) and Available Images
- Customers sorted by status then creation date — active customers always at the top
- Activity log tracks subscription renewals, cancellations, and status changes
- "Purchase History" renamed to Product Access
Products & variations
- "Version" renamed to Variation everywhere in the UI — consistent with the docs
- Products sorted by status then creation date
- Product deletion — fully delete a product and revoke all associated customer access
- Website URL field — add a link to your product's homepage, included in the install script
- Image metadata display and image deletion from the Images page
Access tokens
- Redesigned from a table to a cleaner list layout
- Status badges reflect actual permissions (read vs. read/write)
- Loading indicator while images are processing, with automatic refresh
Team management
- Change a member's role directly from the Members page
- Remove a team member with a confirmation modal
Security
- Cloudflare Turnstile added to auth forms (interaction-only — invisible to real users)
- Customer and team ownership checks enforced across all endpoints
- Rate limiting added to sensitive routes