Client & context
A North American training provider operated a multi-tenant learning portal used by multiple corporate clients. The platform was built with Laravel and a modern front-end, but:
- Local development was unclear to set up and keep running.
- Upgrades were risky due to architectural inconsistencies.
- There were numerous small bugs in legacy code, layout, and multi-tenant behavior.
I joined as a senior full-stack engineer to stabilize and evolve the platform.
Challenges
- Complex multi-tenant setup with per-tenant configuration, custom domains, and background jobs.
- Dev environment pain: Docker configuration, certificates, and initialization were complicated and brittle.
- Upgrades and security: framework and libraries needed to be updated while keeping tenants online.
- UI & UX regressions: CSS/JS loading issues, broken adaptive layouts, and duplicated code in legacy sections.
What I did
1. Simplified local development & onboarding
- Cleaned up and simplified Docker Compose and
Dockerfile setup.
- Fixed automatic certificate generation and initialization routines, including cron jobs.
- Updated and clarified onboarding documentation, making it much easier for new devs to start contributing.
2. Architectural cleanup & upgrades
- Fixed architectural inconsistencies that made upgrades hard and error-prone.
- Upgraded the backend from Laravel 8 to Laravel 9.
- Updated Node.js libraries and build tooling until all known vulnerabilities were resolved.
- Refreshed architecture documentation so future changes would be easier to plan.
3. Quality & consistency improvements
- Performed manual testing across legacy and newer features.
- Fixed bugs in legacy functionality, including:
- Conditional logic and edge cases.
- Adaptive design issues (responsive layouts).
- JavaScript and CSS loading order problems and duplicates.
- Merged database migrations and updated feature implementations to align old code with newer patterns.
4. Multi-tenancy enhancements
- Integrated with AWS Route 53 API to manage subdomains and DNS automatically.
- Implemented sub-tenant creation from within the tenant administrator interface.
- Added background tenant initialization processes.
- Improved configuration options for fields, columns, filters, validations, and multi-language captions.
Results
- New developers could get a working local environment much faster, reducing onboarding friction.
- The platform moved to Laravel 9 with an updated front-end stack and closed security vulnerabilities.
- Multi-tenant management became more reliable and user-friendly, including automated domain handling.
- The codebase became more coherent and maintainable, allowing the client to focus on new features instead of firefighting.
Tech & responsibilities
- Role: Senior full-stack engineer for a multi-tenant SaaS platform
- Technologies: Laravel 8→9, PHP, Node.js, Docker, Docker Compose, AWS Route 53, multi-tenancy, JavaScript, CSS, responsive design
- Scope: Dev environment and documentation, framework and library upgrades, bug fixing, multi-tenant enhancements, and architecture cleanup
If you operate a multi-tenant SaaS that’s hard to upgrade and even harder to run locally, I can help you simplify the setup, modernize the stack, and remove friction for your team.
Back to all case studies