- Rebuild brand profile page with 3-zone architecture: Zone 1: Identity bar (logo, name, tagline, score, actions) Zone 2: Dashboard snapshot (8 KPI cards, insight banners, tab bar) Zone 3: Tabbed content panels (9 sections) - Add dev:setup command for local environment setup - Runs migrations with optional --fresh flag - Prompts to seed dev fixtures - Displays test credentials on completion - Add development seeders (not called from DatabaseSeeder): - ProductionSyncSeeder: users, businesses, brands - DevSuitesSeeder: suite and plan assignments - BrandProfilesSeeder: brand AI profiles - Refactor CRM from Modules/Crm to app/ structure - Move entities to app/Models/Crm/ - Move controllers to app/Http/Controllers/Crm/ - Remove old modular structure - Update CLAUDE.md with dev setup documentation
103 lines
3.5 KiB
PHP
103 lines
3.5 KiB
PHP
<?php
|
|
|
|
use Illuminate\Foundation\Inspiring;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use Illuminate\Support\Facades\Schedule;
|
|
|
|
Artisan::command('inspire', function () {
|
|
$this->comment(Inspiring::quote());
|
|
})->purpose('Display an inspiring quote');
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Orchestrator Commands
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| These commands manage the three-layer supervisory system:
|
|
| 1. Orchestrator Governance Layer - Admin alerts, daily reports
|
|
| 2. Horizon/Queue Health Layer - Queue monitoring and health checks
|
|
| 3. Automation Reliability Layer - Watchdogs and self-audits
|
|
|
|
|
*/
|
|
|
|
// Sales & Marketing Task Generation (hourly during business hours)
|
|
Schedule::command('orchestrator:generate-sales-tasks')
|
|
->hourlyAt(5)
|
|
->weekdays()
|
|
->between('8:00', '18:00')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/orchestrator-sales.log'));
|
|
|
|
Schedule::command('orchestrator:generate-marketing-tasks')
|
|
->hourlyAt(15)
|
|
->weekdays()
|
|
->between('8:00', '18:00')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/orchestrator-marketing.log'));
|
|
|
|
// Outcome Evaluation (every 4 hours)
|
|
Schedule::command('orchestrator:evaluate-outcomes')
|
|
->everyFourHours()
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/orchestrator-outcomes.log'));
|
|
|
|
// Timing Analysis (daily at 3 AM)
|
|
Schedule::command('orchestrator:analyze-timing')
|
|
->dailyAt('03:00')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/orchestrator-timing.log'));
|
|
|
|
// Playbook Performance Evaluation (daily at 4 AM)
|
|
Schedule::command('orchestrator:evaluate-playbooks')
|
|
->dailyAt('04:00')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/orchestrator-playbooks.log'));
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Health & Watchdog Commands
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
// Horizon/Queue Health Check (every 5 minutes)
|
|
Schedule::command('orchestrator:check-horizon')
|
|
->everyFiveMinutes()
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/orchestrator-horizon.log'));
|
|
|
|
// Watchdog - Check all automations are running (every 15 minutes)
|
|
Schedule::command('orchestrator:watchdog')
|
|
->everyFifteenMinutes()
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/orchestrator-watchdog.log'));
|
|
|
|
// Self-Audit - Check for data integrity issues (daily at 5 AM)
|
|
Schedule::command('orchestrator:self-audit')
|
|
->dailyAt('05:00')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/orchestrator-audit.log'));
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Daily Reports
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
// Daily Sales Ops Report (weekdays at 7 AM)
|
|
Schedule::command('orchestrator:send-daily-report')
|
|
->weekdays()
|
|
->dailyAt('07:00')
|
|
->appendOutputTo(storage_path('logs/orchestrator-daily-report.log'));
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Sales Intelligence Commands
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
// Brand Placement Signals - Compute coverage and opportunities (daily at 2 AM)
|
|
Schedule::command('intelligence:compute-brand-placement')
|
|
->dailyAt('02:00')
|
|
->withoutOverlapping()
|
|
->appendOutputTo(storage_path('logs/intelligence-brand-placement.log'));
|