Production-ready, LTS Laravel application for Majime Japanese Language Academy with dynamic mobile-first front-end, secure modular admin CMS, multilingual support, SEO-friendly content, role-based access, modular MVC architecture, Blade/Tailwind UI, queues, caching, tests, and CI/CD pipelines.
📚 Installation Guide | 🏗️ Architecture | 🚀 Deployment | 🆘 Help & Troubleshooting | 🤝 Contributing
- Laravel 11.x LTS - Latest long-term support version
- PHP 8.3+ - Modern PHP with type declarations and enums
- Service-Repository Pattern - Clean separation of concerns
- SOLID Principles - Maintainable and testable code
- DRY & KISS - Simple, reusable components
Complete course management system with:
- CRUD operations with Service→Repository→Controller layers
- FormRequest validation
- Typed models with scopes
- Database migrations with indexes
- Responsive Blade views with Tailwind CSS
- Caching for performance
- Feature tests
Routes:
GET /courses- List all coursesGET /courses/{slug}- View course detailsPOST /courses- Create course (admin)PUT /courses/{slug}- Update course (admin)DELETE /courses/{slug}- Delete course (admin)
- Service types and categories
- Application submission
- Processing status tracking
- Online application forms
- Document uploads
- Status tracking
- Email notifications
- News posts with categories
- Event calendar
- Featured content
- RSS feed
- Staff profiles
- Department organization
- Contact information
- Bio and expertise
- Photo albums
- Video gallery
- Category organization
- Lightbox view
- Blog posts with categories
- Tagging system
- Comments
- Author profiles
- Contact form
- Inquiry management
- Email notifications
- Response tracking
- User authentication
- Role-based access control (RBAC)
- Permission management
- Admin dashboard
Service Layer → Repository Layer → Controller Layer → Views
- BaseRepository: Common CRUD operations
- BaseService: Business logic with caching
- FormRequests: Validation rules
- Policies: Authorization
- Scopes: Query filtering
- CSRF protection (built-in Laravel)
- SQL injection prevention (Eloquent ORM)
- XSS protection (Blade templating)
- Rate limiting
- Input validation
- Secure password hashing
- Query caching (1-hour TTL)
- Database indexes
- Lazy loading
- Pagination
- Asset optimization
- Meta tags (title, description, keywords)
- Semantic HTML
- Structured data ready
- XML sitemap ready
- Robots.txt configuration
- Mobile-first approach
- Tailwind CSS utility classes
- Accessible navigation
- Touch-friendly interfaces
- Feature tests for HTTP requests
- Unit tests for business logic
- Database transactions for isolation
- PHPUnit configuration
- Code coverage ready
- PHP 8.2 or higher
- Composer
- SQLite/MySQL/PostgreSQL
- Node.js & NPM (required for asset compilation)
- Clone the repository
git clone https://github.com/kasunvimarshana/MJLA.git
cd MJLA- Install dependencies
composer install
npm install- Environment configuration
cp .env.example .env
php artisan key:generate- Database setup
# For SQLite (default)
touch database/database.sqlite
# Run migrations
php artisan migrate- Build frontend assets
npm run build- Start development server
php artisan serveVisit http://localhost:8000 in your browser.
MJLA/
├── app/
│ ├── Http/
│ │ ├── Controllers/ # Controllers
│ │ ├── Middleware/ # Custom middleware
│ │ └── Requests/ # Form validation
│ ├── Models/ # Eloquent models
│ ├── Repositories/ # Data access layer
│ │ └── Contracts/ # Repository interfaces
│ ├── Services/ # Business logic layer
│ │ └── Contracts/ # Service interfaces
│ └── Providers/ # Service providers
├── database/
│ ├── migrations/ # Database migrations
│ ├── seeders/ # Database seeders
│ └── factories/ # Model factories
├── resources/
│ └── views/
│ ├── layouts/ # Page layouts
│ ├── components/ # Reusable components
│ └── courses/ # Module views
├── routes/
│ ├── web.php # Web routes
│ └── api.php # API routes
├── tests/
│ ├── Feature/ # Feature tests
│ └── Unit/ # Unit tests
└── config/ # Configuration files
Edit .env file:
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=mjla
# DB_USERNAME=root
# DB_PASSWORD=CACHE_STORE=file
# CACHE_STORE=redisAPP_NAME="Majime Japanese Language Academy"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://yourdomain.com
APP_TIMEZONE=Asia/Tokyo
APP_LOCALE=enRun all tests:
./vendor/bin/phpunitRun specific test suite:
./vendor/bin/phpunit tests/Feature/CourseTest.phpWith coverage:
./vendor/bin/phpunit --coverage-html coverage/./vendor/bin/pintFollow the Service-Repository pattern:
- Create migration
php artisan make:migration create_modulename_table- Create model with fillable fields and casts
- Create repository extending BaseRepository
- Create service extending BaseService
- Create FormRequest for validation
- Create controller
- Add routes
- Create views
- Write tests
- Set
APP_ENV=production - Set
APP_DEBUG=false - Generate app key
- Configure production database
- Run migrations
- Set up queue workers
- Configure cache driver (Redis recommended)
- Set up SSL certificate
- Configure backup strategy
- Set up monitoring
- Configure email service
- Test all functionality
php artisan config:cache
php artisan route:cache
php artisan view:cache
composer install --optimize-autoloader --no-devRESTful API endpoints available for each module:
GET /api/courses - List courses
GET /api/courses/{id} - Get course details
POST /api/courses - Create course
PUT /api/courses/{id} - Update course
DELETE /api/courses/{id} - Delete course
Authentication required for write operations.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow PSR-12 coding standard
- Use type declarations
- Write tests for new features
- Document complex logic
- Keep methods small and focused
If you discover any security issues, please email security@example.com instead of using the issue tracker.
This project is licensed under the MIT License - see the LICENSE file for details.
- README.md - Project overview and quick start
- ARCHITECTURE.md - Technical architecture and design patterns
- DEPLOYMENT.md - Deployment guide and production setup
- HELP.md - Troubleshooting and FAQ
- CONTRIBUTING.md - How to contribute to this project
- CODE_OF_CONDUCT.md - Community guidelines and standards
Need help? We're here to assist you!
Check our HELP.md guide for solutions to common problems:
- Installation issues
- Database connection problems
- Asset compilation errors
- Permission issues
- And more...
- Documentation: Start with our comprehensive HELP.md guide
- GitHub Issues: Report bugs or request features
- GitHub Discussions: Ask questions or share ideas
- Email: support@mjla.edu
- Phone: +94 XX XXX XXXX
Want to contribute? Please read our CONTRIBUTING.md guide and follow our CODE_OF_CONDUCT.md.
- Laravel Framework
- Tailwind CSS
- Alpine.js
- PHP Community
- All our Contributors
This project is licensed under the MIT License - see the LICENSE file for details.
Version: 1.0.0
Last Updated: November 2025
Maintained by: MJLA Development Team