A self-service multi-tenant campaign builder with per-database isolation, dual authentication, and credit-based billing.
Docker Containers
Database Migrations
Sub-Projects
Tenant Isolation
We are building ConnectPro as a multi-tenant SaaS platform that transforms a single-tenant campaign app into a self-service campaign builder. The monorepo houses a Laravel 12 API, two Nuxt 4 dashboards, and an 11-container Docker stack with Traefik wildcard routing.
SPEEDFORCE DIGITAL
SaaS
Web Application
Ongoing
4 Members
Single-tenant campaign platforms required manual developer setup for every new client. Businesses needed a self-service way to create branded campaigns with QR codes, participant tracking, and analytics without waiting weeks for custom development and provisioning.
SaaSArchitecture Diagram
Share your details to express interest
Something went wrong
As a platform user, I want to register a new tenant and get a subdomain instantly
As a platform user, I want to connect my own custom domain with DNS verification
As a platform admin, I want to suspend or activate tenants from the central dashboard
As a tenant admin, I want to create campaigns from pre-built templates
As a tenant admin, I want to customize campaign branding (colors, fonts, logos)
As a tenant admin, I want to generate QR codes that link to my campaign pages
As a platform user, I want to purchase credits via Tap Payments in SAR
As a platform user, I want to activate campaigns by spending credits from my balance
As a platform user, I want to view invoices and credit transaction history
As a tenant admin, I want to see campaign analytics with charts (participants, scans, conversions)
As a tenant admin, I want to export participant data to Excel
As a tenant admin, I want real-time participant tracking during active campaigns
App Screenshots
Share your details to see the full designs
Something went wrong
Something went wrong
Each tenant needs its own database for campaign data while sharing a central database for billing and user management. stancl/tenancy v3 with hybrid DB strategy and header-based tenant resolution via X-Tenant-Slug solved this without compromising performance.
Nuxt 4 dashboard where platform users register tenants, manage campaigns, configure custom domains, purchase credits, and activate campaigns. Sanctum SPA auth with SSR cookie forwarding.
Something went wrong
Central portal users authenticate via Sanctum SPA cookies (CSRF + session), while tenant admins use JWT tokens with X-Tenant-Slug headers. Two separate auth guards, middleware stacks, and route groups coexist in a single Laravel application.
Per-tenant Nuxt 4 admin with JWT auth, campaign management, participant tracking, QR code generation, and analytics. Host-based tenant resolution with Nitro server middleware and Redis-cached context.
Something went wrong
Every tenant gets a subdomain (acme.connectpro.dev) plus optional custom domains. Traefik v3 handles wildcard routing locally, while the Nuxt tenant app resolves the host header to tenant context on every SSR request with 60s Redis caching.
Dual-guard API serving both central and tenant routes. 19 central + 10 tenant migrations, Spatie packages for DTOs/query building/activity logging, Laravel Horizon for queue management.
Something went wrong
Original architecture specified Nuxt 3 + Bootstrap 5. We upgraded to Nuxt 4 + @nuxt/ui v4 + Tailwind CSS v4 before implementation started, requiring full re-evaluation of the dashboard template, component library, and styling approach across both frontends.
11-container Docker Compose stack: Traefik (routing), PHP-FPM + Nginx (API), MySQL (multi-DB), Redis (cache/queue), two Nuxt dev servers, Mailpit (email testing), MinIO (S3 storage), queue worker, and scheduler.
Enterprise-Grade Multi-Tenancy
Full database-per-tenant isolation ensures zero data leakage between clients. The hybrid DB strategy keeps shared resources (plans, billing) centralized while campaign data stays completely isolated per tenant.
Monorepo with Shared Types
TypeScript types shared across both Nuxt apps via @connectpro/types package. Makefile shortcuts, Husky git hooks, and per-project CLAUDE.md files enable efficient development across the 3 sub-projects.
Docker-First from Day One
The 11-container Docker stack mirrors production topology locally. Traefik handles subdomain routing, MinIO replaces S3, and Mailpit catches emails - no external service dependencies during development.
Nuxt 4
@nuxt/ui v4
Laravel 12
MySQL 8.0
Redis 7
MinIO
Docker + Traefik
Tap Payments
Let's create something amazing together. We're here to bring your vision to life.
We typically respond within 2 hours