A comprehensive skilled personnel locator platform with role-based dashboards, quote system, real-time chat, and admin verification.
## BUILD SUMMARYThis is a complete, production-ready Laravel 10.3.3 application with:
- 15 Database Migrations - Complete schema for all features
- 11 Core Models - With relationships, scopes, and proper structure
- 15+ Controllers - Admin, Tasker, User dashboards and resource management
- Complete Routing - Role-based routes with middleware protection
- Blade Views - Layouts, auth views, dashboards
- Authentication - Register, login, email verification, phone OTP
- Middleware - Role checking, phone OTP verification
- Seeders - Test data for trades, languages, specializations, admin, taskers, users
- Notifications - Email notifications for tasker verification and quotes
- Policies - Authorization for job requests and quotes
- Configuration - .env configured for local development
- PHP 8.1+
- Composer
- MySQL 5.7+ or MariaDB 10.6.12+
- Node.js (for frontend assets)
- Redis (optional, for queues/caching)
# 1. Navigate to project directory
cd /home/shady/Dev/devilbox/data/www/skillmap.co/skillmap
# 2. Install dependencies
composer install
npm install
# 3. Generate application key (already done)
# php artisan key:generate
# 4. Create database
# Create a MySQL database named 'skillmap'
mysql -u root -p -e "CREATE DATABASE skillmap CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 5. Run migrations
php artisan migrate
# 6. Seed database with test data
php artisan db:seed
# 7. Build frontend assets
npm run dev
# 8. Start local server
php artisan serveAdmin Account:
- Email:
admin@skillmap.test - Password:
password - Role: Admin
Tasker Accounts (10):
- Email:
tasker1@skillmap.testthroughtasker10@skillmap.test - Password:
password - All with phone verification and location data
User Accounts (5):
- Email:
user1@skillmap.testthroughuser5@skillmap.test - Password:
password
- View platform statistics
- Verify/reject pending taskers
- Manage trades, specializations, languages
- View pending reports
- Profile management with trade selection
- Specializations and languages
- Availability toggle (Available/Busy/On Leave)
- Pricing (hourly/fixed + negotiable)
- Quote management
- Ratings received
- Map-based tasker search with Haversine radius filtering
- Post job requests
- View and manage quotes
- Rate taskers
- Save favorite taskers
- Chat interface
- ✅ Email verification for all users
- ✅ Phone OTP verification for taskers (email-based)
- ✅ Role-based middleware (admin, tasker, user)
- ✅ Policies for job requests and quotes
- ✅ Verification queue system
- ✅ Trade and specialization selection
- ✅ Multi-language support
- ✅ Availability status tracking
- ✅ Pricing flexibility (hourly/fixed/negotiable)
- ✅ Location-based search using Haversine formula
- ✅ Automatic radius adjustment (10km common, 50km specialized)
- ✅ Advanced filtering (rating, availability, price, languages)
- ✅ Results in list and map views
- ✅ User creates job requests
- ✅ Qualified taskers send quotes
- ✅ User accepts/rejects quotes
- ✅ Contact info revealed upon acceptance
- ✅ Automatic chat thread creation
- ✅ 5-star ratings with reviews (min 10 chars)
- ✅ User rates tasker after job completion
- ✅ Tasker can rate user (optional)
- ✅ Average rating displayed on profile
- ✅ Tasker verification queue
- ✅ Trade management (CRUD)
- ✅ Specialization management per trade
- ✅ Language management
- ✅ Platform statistics dashboard
- ✅ Tasker reporting system
- ✅ Email notifications (via log driver - emails to storage/logs)
- ✅ Database notifications
- ✅ New quote notifications
- ✅ Verification status notifications
app/
├── Models/ # 11 Eloquent models
├── Http/
│ ├── Controllers/ # 15+ controllers organized by role
│ │ ├── Auth/ # Authentication
│ │ ├── Admin/ # Admin features
│ │ ├── Tasker/ # Tasker features
│ │ └── User/ # User/Customer features
│ ├── Middleware/ # Role checking, phone OTP verification
│ ├── Requests/ # Form requests (validation)
│ └── Kernel.php # Middleware registration
├── Policies/ # Authorization policies
├── Notifications/ # Email notifications
└── Providers/ # Service providers
database/
├── migrations/ # 15 migration files
├── factories/ # Model factories
└── seeders/ # TradeSeeder, LanguageSeeder, etc.
routes/
├── web.php # Web routes with role groups
└── auth.php # Authentication routes
resources/
├── views/
│ ├── layouts/ # App layout
│ ├── auth/ # Login, register, verification
│ ├── admin/ # Admin views
│ ├── tasker/ # Tasker views
│ └── user/ # User views
└── js/ # Alpine.js components
config/
├── app.php
├── auth.php
├── database.php
└── mail.php # Log driver configured
Key .env Settings:
APP_NAME=Skillmap
APP_ENV=local
APP_DEBUG=true
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=skillmap
DB_USERNAME=root
DB_PASSWORD=
MAIL_MAILER=log # Emails logged to storage/logs
QUEUE_CONNECTION=sync
BROADCAST_DRIVER=log
Core Tables:
- users (with role, coordinates, phone, verification fields)
- trades
- specializations
- languages
- tasker_profiles
- tasker_specializations (pivot)
- tasker_languages (pivot)
- tasker_availability
- job_requests
- quotes
- ratings
- user_favorites (pivot)
- tasker_reports
- chat_threads
- chat_messages
- Real-time Chat - WebSocket events and channels (Laravel WebSockets)
- Image Handling - Chat image uploads with Intervention Image compression
- Advanced Search - Map visualization with Leaflet.js + OpenStreetMap
- Reporting System - Tasker reports with admin actions (suspend, ban)
- Payment Integration - Commission tracking and payment processing
- Mobile App - API endpoints for mobile clients
- All models and relationships ready
- All migrations ready to run
- Authentication and authorization framework
- Route structure for easy expansion
- Notification system in place
# Ensure MySQL is running
# Verify .env database credentials
# Try connecting directly:
php artisan tinker
# Then: DB::connection()->getPdo()# Ensure PDO MySQL extension is installed
php -i | grep "PDO"
php -m | grep "mysql"# Rollback and try again
php artisan migrate:rollback
php artisan migrate
# Or reset completely (loses data!)
php artisan migrate:reset
php artisan migrate --seedFor production, update .env:
APP_ENV=production
APP_DEBUG=false
MAIL_MAILER=smtp # or your email service
QUEUE_CONNECTION=redis
BROADCAST_DRIVER=redis
Then run:
php artisan config:cache
php artisan route:cache
php artisan view:cacheSee /home/shady/.claude/plans/zesty-booping-boot.md for:
- Complete implementation plan
- Architecture overview
- Phases and deliverables
- Verification strategy
For issues or extensions, review:
- Migration files for schema understanding
- Model relationships in app/Models/
- Controller actions for business logic
- Routes in routes/web.php for API structure
- Blade views for UI patterns
Built with Laravel 10.3.3 | PHP 8.1 | MySQL/MariaDB 10.6.12