Files
hub/routes/console.php
kelly 5b78f8db0f feat: brand profile page rebuild, dev tooling, and CRM refactor
- 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
2025-12-01 19:53:54 -07:00

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'));