// Ship faster,
// build better
A complete Laravel app where every line ships. No placeholder code, no half-built features. Architected for developers and LLMs to read, understand, and build on.
class CreateSubscription
{
public function execute(
User $user,
Plan $plan
): Subscription
{
return DB::transaction(...);
}
}One API. Four providers.
Swap between Stripe, Paddle, LemonSqueezy, or Gumroad without touching your business logic. Unified webhooks, subscriptions, and customer portal.
Payment Providers
Stripe
Cards, wallets, 135+ currencies
Paddle
Merchant of record, global tax
Lemon Squeezy
Simple checkout, digital products
Gumroad
Creator-focused, built-in audience
class BillingService
{
public function subscribe(User $user, Plan $plan, ?string $coupon)
{
return $user->newSubscription($plan)
->trialDays(days: 14)
->withCoupon(code: $coupon)
->create();
}
public function swap(Subscription $sub, Plan $new) { }
public function cancel(Subscription $sub) { }
}3
Billing Models
Recurring · Lifetime · Credits
12+
Webhook Events
Automatic handling
Built-in
Trial Support
With reminder emails
Included
Customer Portal
Self-service billing
License keys that validate anywhere.
RSA-signed keys for offline validation. Machine fingerprinting. Feature flags. Built for desktop apps, plugins, and CLI tools.
License Constraints
Time
Expiry dates, trials, grace periods
Machine
Hardware fingerprint, device limits
Domain
Lock to specific domains
Seats
Concurrent user limits
Features
Enable/disable per tier
Custom
Build your own constraints
Validation Strategies
Validate with embedded public key. No network needed.
final readonly class OfflineValidator
{
public function validate(string $key)
{
$payload = $this->keyStrategy->parse($key);
if ($payload->expiresAt->isPast()) {
return new ValidationResult(
valid: false,
error: 'expired'
);
}
}
}Auto-create licenses on purchase from
Multi-tenant from day one.
Workspaces with polymorphic billing, hierarchical roles, and automatic seat management. Personal workspaces auto-created per user.
Role Hierarchy
class InviteMember
{
public function execute(
Workspace $workspace,
InvitationData $data,
): WorkspaceInvitation
{
$workspace->ensureCanAddSeat();
$invitation = WorkspaceInvitation::create([
'email' => $data->email,
'role' => $data->role,
]);
Mail::to($data->email)->send(...);
return $invitation;
}
}Email Invitations
7-day expiry, one-click accept
Per-Seat Billing
Auto-sync with subscription
Personal Workspaces
Auto-created per user
Ownership Transfer
Seamless handoff
9 channels. One API.
Email, Slack, Discord, Teams, Telegram, SMS, webhooks, in-app, and real-time. User preferences respected. Digest support built-in.
class InvoicePaid extends Notification
{
use HasNotificationType;
use Queueable;
public function via(object $notifiable): array
{
return $notifiable->getNotificationChannels(
static::notificationType()
);
}
}User Preferences
Per-channel, per-notification type control
Digest Batching
Daily at 9 AM, weekly on Monday
Admin Broadcast
Announce to all users or segments
Full control. Zero setup.
Pre-built admin routes, policies, and views. User management, metrics, impersonation, and content CRUD. Role-guarded by default.
Total Users
0
+12.5%
MRR
$0
+8.2%
Active Now
0
+23
Churn Rate
0%
-0.3%
Recent Activity
User signed up
sarah@example.com
Plan upgraded
mike@startup.io
Payment received
alex@company.com
License activated
dev@agency.co
User Management
Search, filter, view details, ban or suspend accounts
Impersonation
Log in as any user for debugging. Full audit trail.
Activity Logs
Track every action. Filter by user, type, or date.
Metrics Dashboard
MRR, signups, churn, active users at a glance.
Content CRUD
Manage blog posts, roadmap items, changelog entries.
Integration Settings
Configure payment providers, notification channels.
Content that ships.
Blog, documentation, changelog, and public roadmap. Everything users expect from a modern SaaS, built in and ready to customize.
Blog
Markdown posts with SEO optimization
Announcing v2.0
Jan 15
Best Practices for API Design
Jan 10
Customer Spotlight: Acme Inc
Jan 5
$ kit new my-app
Interactive CLI installer with module selection. Pick what you need, skip what you don't — zero dead code in your project.
composer global require kit/installer1
Command
kit new my-app
0
Dead Code
Only what you select
~30s
Setup Time
Ready to code
12+
Modules
Mix and match
$ pick_your_bundle()
One-time purchase. Lifetime access. No subscriptions.
SaaS
For subscription-based applications
- Billing
- Teams
- Admin Panel
- Notifications
- Onboarding
Everything
All 10 modules, forever updates
- All 10 modules included
- Future modules free
- Priority support
| Feature | Maker | SaaS | Everything |
|---|---|---|---|
| Billing & Subscriptions | |||
| Teams & Workspaces | |||
| License Management | |||
| Admin Dashboard | |||
| Notifications System | |||
| User Onboarding | |||
| Documentation Site | |||
| Changelog | |||
| Blog & Roadmap | |||
| Future Modules |
// included in all purchases:
$ get Kit
Be the first to launch with a codebase that actually works.
// no spam, unsubscribe anytime