Case study · Business systems
Membership sales CRM, contracts and billing platform
Laravel platform covering leads, tour scheduling, e-signed contracts, payments, recurring invoicing, commissions, analytics and bulk SMS and email.
At a glance
- Who it's for
- Sales teams, managers, payroll and billing administrators, and members via a portal API.
- Core stack
- PHP 8.2, Laravel 12, Vue 3, MySQL
- What sets it apart
- One system that carries a membership sale from first lead through signed contract, payment, recurring billing and commission payout.
What it looks like in use
One family's record, from the booked tour to the signed contract, the bills and the sales team's commission.
A membership sale, step by step
A family asks about membership
They fill in a short form online, and the sales team has a new lead with a household record.
They are booked into a tour time
The lead picks a slot on the calendar, then gets a confirmation and a reminder message.
The contract is signed on screen
The family signs in the browser, and a PDF copy of the signed contract is saved to their record.
Payments and bills run on a schedule
The first payment is taken, and later monthly, quarterly or yearly invoices are created and sent on time.
Commission is worked out for the team
Each person's share is calculated from the contract, then checked on a payroll review screen.
The challenge
A membership sales operation runs a long pipeline: capture prospects, book them into scheduled sessions, confirm attendance, close a contract, collect payment, then bill recurring fees and pay commissions.
Without a single system, each step lives in a separate tool: forms, calendars, texting, payment links, accounting and payroll spreadsheets. That causes re-keying and disagreement over contract and payment status. The handover document describes all of these steps in one system with many roles involved.
The solution
A Laravel 12 monolith with Blade, Vue 3 and Alpine front ends. A lead form feeds scheduling, with campaigns, days, waves and time slots. Confirmation and reminder messaging follows, then contract creation with in-browser signature and PDF archiving.
Payments, recurring billing, invoices and commission calculation hang off the contract. Role-based access separates sales, management, payroll and admin views. A headless authentication API serves an external member portal.
For your technical teamhow it works under the hood
Mechanism: how the core records relate
Key features
What the system does, as built in the codebase.
- 01
Lead capture and household records
Public and internal lead forms feed household and member models.
- 02
Campaign, wave and slot scheduling
Campaigns divide into days, waves and bookable slots, with timezone handling and check-in views.
- 03
Contract lifecycle
Contract creation, e-signature capture and generated PDFs.
- 04
Payments and shared payment links
Card payments through a payment gateway, plus Stripe link support.
- 05
Recurring billing and invoicing
Commands and an invoicing service generate monthly, quarterly and yearly invoices. A nightly job syncs billing status, and an accounting-platform service creates and sends invoices.
- 06
Multi-tier commissions and payroll review
Commission calculation with a payroll review screen.
- 07
Analytics and report builder
Query-driven reports with CSV import and export.
- 08
Bulk SMS and email notifications
Notifications, reminders and surveys delivered through queue jobs.
How it fits together
From a first lead to a signed contract, payment and commission.
- Lead intakepublic forms, SMS and email
- Schedulingcampaigns, waves, slots
- Contractse-signature and PDF
- Paymentsgateway and payment links
- Billing and commissionsscheduled invoices, payroll
- Analytics and portal APIreports, member auth
- Queue jobs deliver notifications.
- Scheduled commands drive reminders, recurring invoices and billing sync.
Implementation notes
Engineering decisions worth knowing about.
Role and permission access control
Role and permission middleware separates sales, management, payroll and admin views.
Dual authentication
Sanctum for the single-page app and JWT for external API consumers, plus key-based API clients.
Queues and scheduled commands
Queue jobs are configured for Redis, with a database driver as fallback. 25 artisan commands cover billing, reminders and sync, about ten of them registered in the scheduler.
Model observers
Observers on leads and contracts keep derived data consistent.
Integrations in service classes
Telephony SMS, email delivery, calendar, geocoding, Slack and Zoom are each isolated behind a service.
Log sanitizing
A log processor keeps sensitive values out of logs.
OpenAPI documentation
API docs are generated with a Swagger package.
Iterative schema history
Roughly 100 migrations show how the data model evolved.
Technology stack
Taken from the project's dependency and config files.
- Backend
- PHP 8.2
- Laravel 12
- Sanctum
- JWT auth
- Frontend
- Vue 3
- Alpine.js
- Tailwind CSS
- Vite
- Blade
- Data
- MySQL or MariaDB
- Redis (Predis)
- Payments and documents
- Stripe
- DomPDF
- League CSV
- Messaging
- Postmark
- Slack notifications
- Cloud telephony SMS
- API docs
- L5-Swagger
For your technical teamtechnology layers
Technology stack by layer
Business value
What the system enables. No numbers are claimed.
- Keeps the whole prospect-to-payment journey in one record chain, avoiding re-keying between tools.
- Automates recurring invoices, reminders and commission calculation that would otherwise be manual.
- Separates access by role so sales, payroll and admins see only what they need.
- Exposes a headless API so a member-facing site can reuse the same accounts.
Need a system like this built?
Tell us what it needs to do and we will scope it with you on a call.