# Mivita Multi-Domain & Subdomain Architecture Optimization ## Current Implementation Analysis ### Domain Structure Overview The mivita.care application uses a multi-domain and subdomain architecture to serve different application areas: #### Main Domains & Subdomains: 1. **Main Domain**: `mivita.care` (or `mivita.test` in development) 2. **Fixed Subdomains**: - `my.mivita.care` - CRM/Customer Management System - `in.mivita.care` - Portal for customers - `checkout.mivita.care` - Checkout/Payment processing 3. **Dynamic Subdomains**: `{shop-slug}.mivita.care` - Individual user shops 4. **Alternative Domain**: `mivita.shop` - Alternative shopping domain ### Current Architecture Issues #### 1. Subdomain Middleware Problems **File**: `app/Http/Middleware/Subdomain.php` **Issues Identified**: - Hard-coded shop selection (`'aloevera'`) for main domain - Mixed responsibility (handles both dynamic shops and main domain logic) - No proper fallback mechanism for invalid subdomains - Configuration dependencies scattered across middleware - Session management directly in middleware #### 2. Routing Complexity **Current Structure**: ``` routes/ ├── web.php # Main entry (mostly empty) ├── main.php # Main domain routes ├── subdomain.php # Dynamic subdomain routes ├── crm.php # CRM subdomain (my.) ├── portal.php # Portal subdomain (in.) ├── checkout.php # Checkout subdomain (checkout.) ├── api.php # API routes └── utility.php # Utility routes ``` **Issues**: - Route duplication across files - No clear separation of concerns - Complex domain-based routing in multiple files - Inconsistent middleware application #### 3. Configuration Management **File**: `.env` **Current Setup**: ``` APP_DOMAIN=mivita APP_TLD_CARE=.test APP_TLD_SHOP=.lshop APP_URL_CHECKOUT=checkout. APP_URL_CRM=my. APP_URL_PORTAL=in. ``` **Issues**: - Environment-dependent configuration - No centralized domain management - Missing validation for domain configurations ## Optimization Proposal ### 1. Enhanced Subdomain Middleware Create a new, more robust subdomain middleware system: ```php // app/Http/Middleware/DomainResolver.php class DomainResolver { public function handle($request, Closure $next) { $domain = $this->resolveDomain($request); // Set domain context app()->instance('domain.context', $domain); return $next($request); } private function resolveDomain($request): DomainContext { // Logic to determine domain type and set appropriate context } } ``` ### 2. Domain Configuration Service ```php // app/Services/DomainService.php class DomainService { public function getSubdomainType(string $subdomain): string { // Determine if subdomain is fixed (my, in, checkout) or dynamic (user shop) } public function isValidUserShop(string $slug): bool { // Validate user shop existence and status } public function getDomainConfiguration(): array { // Return centralized domain configuration } } ``` ### 3. Improved Route Organization ``` routes/ ├── web.php # Route registration orchestrator ├── domains/ │ ├── main.php # Main domain (mivita.care) │ ├── shop.php # Alternative domain (mivita.shop) │ └── subdomains/ │ ├── crm.php # my.mivita.care │ ├── portal.php # in.mivita.care │ ├── checkout.php # checkout.mivita.care │ └── user-shops.php # {slug}.mivita.care ├── api/ │ └── v1.php # API routes └── shared/ ├── legal.php # Legal pages (shared across domains) └── common.php # Common functionality ``` ### 4. Domain Context System ```php // app/Domain/DomainContext.php class DomainContext { public function __construct( public readonly string $type, // 'main', 'crm', 'portal', 'checkout', 'user-shop' public readonly string $domain, // Full domain public readonly ?string $subdomain, // Subdomain part public readonly ?UserShop $userShop // For user shop contexts ) {} public function isMainDomain(): bool public function isCrmDomain(): bool public function isPortalDomain(): bool public function isCheckoutDomain(): bool public function isUserShopDomain(): bool } ``` ## Implementation Benefits ### 1. Performance Improvements - **Reduced Database Queries**: Cache user shop validity - **Faster Route Resolution**: Dedicated route files per domain type - **Optimized Middleware Stack**: Domain-specific middleware application ### 2. Maintainability - **Clear Separation of Concerns**: Each domain type has its own route file - **Centralized Configuration**: Single source of truth for domain settings - **Consistent Architecture**: Uniform handling across all domain types ### 3. Scalability - **Easy Subdomain Addition**: New subdomains can be added without touching existing code - **Flexible Configuration**: Environment-agnostic domain management - **Modular Structure**: Independent development of domain-specific features ### 4. Security Enhancements - **Domain Validation**: Proper validation of all subdomain requests - **Context Isolation**: Clear boundaries between different application areas - **CSRF Protection**: Domain-aware CSRF token handling ## Migration Strategy ### Phase 1: Foundation 1. Create new `DomainService` and `DomainContext` classes 2. Implement enhanced `DomainResolver` middleware 3. Add domain configuration management ### Phase 2: Route Reorganization 1. Create new route structure under `routes/domains/` 2. Migrate existing routes to new organization 3. Update route service provider ### Phase 3: Testing & Optimization 1. Comprehensive testing of all domain types 2. Performance optimization and caching 3. Documentation updates ### Phase 4: Deployment 1. Gradual rollout with fallback mechanisms 2. Monitor performance and functionality 3. Remove old code after successful migration ## Risk Assessment ### Low Risk - Domain service implementation - Route reorganization - Configuration centralization ### Medium Risk - Middleware replacement (affects all requests) - Session handling changes - Cache invalidation ### High Risk - User shop subdomain handling (affects customer shops) - Payment domain changes (affects revenue) ## Monitoring & Rollback Plan ### Monitoring Points - Response times per domain type - Error rates by subdomain - User shop accessibility - Payment processing success rates ### Rollback Strategy - Feature flags for gradual enablement - Database transaction rollbacks for configuration changes - Immediate fallback to current middleware if critical issues arise ## Conclusion This optimization will provide a more maintainable, scalable, and performant multi-domain architecture while preserving all existing functionality. The modular approach allows for incremental implementation and testing, reducing deployment risks.