Source Code Structure
Overview
WhatsMarkSaaS is built on the modern TALL stack (Tailwind CSS, Alpine.js, Livewire, Laravel) providing a robust SaaS platform for WhatsApp marketing automation. This structure ensures scalability, maintainability, and developer-friendly architecture.
Technology Stack
- Laravel 12 - Backend PHP framework for robust API and business logic
- Livewire 3 - Full-stack reactive components without complex JavaScript
- Alpine.js - Minimal JavaScript framework for enhanced interactivity
- Tailwind CSS - Utility-first CSS framework for rapid UI development
Important Developer Notice
This page contains technical developer documentation only.
Before making custom changes:
- TALL Stack Knowledge Required: Custom modifications require solid understanding of Laravel, Livewire, Alpine.js, and Tailwind CSS
- Risk Warning: Improper changes may break your application functionality
- Limited Support: If you make custom modifications to the original script, our technical support will be limited
- Backup First: Always create a complete backup before making any custom changes
- Testing Required: Test all modifications in a development environment before applying to production
Main Application Structure
whatsmark-saas/
├── app/ # Application core
├── bootstrap/ # Application bootstrapping
├── config/ # Configuration files
├── database/ # Database migrations, seeds, factories
├── public/ # Web server document root
├── resources/ # Views, assets, language files
├── routes/ # Route definitions
├── storage/ # Generated files, logs, cache
├── tests/ # Automated tests
├── vendor/ # Composer dependencies
├── Modules/ # Custom modules (if using modular architecture)
├── .env # Environment configuration
├── artisan # Laravel command-line interface
├── composer.json # PHP dependencies
├── package.json # Node.js dependencies
└── vite.config.js # Vite build configuration
Application Core (/app
)
Key Directories
app/
├── Http/
│ ├── Controllers/ # Traditional controllers
│ └── Middleware/ # Request middleware
├── Livewire/ # Livewire components (main UI layer)
├── Models/ # Eloquent models
├── Providers/ # Service providers
├── Console/ # Artisan commands
└── Policies/ # Authorization policies
Livewire Components (/app/Livewire
)
What it does: Houses all reactive UI components organized by feature and user type. Why it's useful: Provides clean separation of concerns and makes the codebase maintainable and scalable.
Livewire/
├── Admin/ # Admin panel components
│ ├── Dashboard.php
│ ├── Tenant/ # Tenant management
│ │ ├── TenantList.php
│ │ ├── TenantCreator.php
│ │ └── TenantDetails.php
│ ├── Plan/ # Subscription plans
│ │ ├── PlanList.php
│ │ └── PlanCreator.php
│ ├── Subscription/ # Subscription management
│ │ ├── SubscriptionList.php
│ │ └── InvoicesList.php
│ ├── Settings/ # Application settings
│ │ ├── PaymentGateway/
│ │ ├── Website/
│ │ └── System/
│ └── WhatsApp/ # WhatsApp integration
├── Auth/ # Authentication components
├── Frontend/ # Public-facing components
└── Tenant/ # Tenant dashboard components
Configuration (/config
)
What it does: Contains all application configuration files for different services and features. Why it's useful: Centralizes settings management and makes environment-specific configurations easy to manage.
Essential configuration files:
config/
├── app.php # Core application settings
├── database.php # Database connections
├── livewire.php # Livewire configuration
├── tenant.php # Multi-tenancy settings
├── subscription.php # Billing configuration
├── whatsapp.php # WhatsApp API settings
├── payment.php # Payment gateway settings
└── restrictions.php # Domain/subdomain restrictions
Routes (/routes
)
What it does: Organizes all application routes by user type and functionality. Why it's useful: Keeps routing logic clean and makes it easy to manage access control.
routes/
├── web.php # Public web routes
├── api.php # API endpoints
├── auth.php # Authentication routes
├── admin.php # Admin panel routes
└── tenant.php # Tenant dashboard routes
Route Examples
// Admin routes use Livewire components directly
Route::get('tenants', TenantList::class)->name('tenants.list');
Route::get('subscriptions', SubscriptionList::class)->name('subscriptions.list');
// Tenant routes
Route::get('dashboard', TenantDashboard::class)->name('tenant.dashboard');
Resources (/resources
)
What it does: Contains frontend assets, views, and language files. Why it's useful: Organizes all presentation layer components in a logical structure.
resources/
├── views/
│ ├── layouts/ # Base layouts (admin, tenant, frontend)
│ ├── livewire/ # Livewire component views
│ ├── components/ # Reusable Blade components
│ ├── admin/ # Admin-specific views
│ ├── tenant/ # Tenant-specific views
│ └── frontend/ # Public website views
├── css/
│ └── app.css # Tailwind CSS compilation
├── js/
│ └── app.js # Alpine.js & application JS
└── lang/ # Multi-language translation files
Database (/database
)
What it does: Contains database structure, sample data, and migration files. Why it's useful: Maintains database version control and provides consistent data structure across environments.
database/
├── migrations/ # Database schema migrations
├── seeders/ # Sample and default data
├── factories/ # Model factories for testing
└── settings/ # Application settings migrations
Multi-tenancy Architecture
What it does: Provides complete data isolation between customer accounts. Why it's useful: Ensures security, scalability, and customization for each SaaS customer.
Tenant Middleware
- Path-based tenant detection
- Database query scoping
- Complete data isolation
- Route protection and access control
Tenant-aware Components
- All Livewire components respect tenant context
- Automatic data filtering by tenant
- Isolated file storage per tenant
Development Workflow
Creating Components
# Create admin Livewire component
php artisan make:livewire Admin/FeatureName
# Create tenant Livewire component
php artisan make:livewire Tenant/FeatureName
Database Operations
# Run migrations
php artisan migrate
# Seed sample data
php artisan db:seed
# Create new migration
php artisan make:migration create_feature_table
This architecture provides a scalable, maintainable foundation for the WhatsMarkSaaS platform using modern Laravel development practices.
When to Avoid Custom Changes:
- If you're not familiar with the TALL stack architecture
- If you don't have Laravel development experience
- If you need the feature urgently without proper testing time
- If you require full technical support coverage
Recommendation:
Use the built-in features and configuration options first. Contact support for feature requests before attempting custom development