comment(Inspiring::quote()); })->purpose('Display an inspiring quote'); // Poll for price changes every 30 minutes — API updates within 30 min of any // change. The command auto-refreshes station metadata once per day on the // first poll after midnight, and uses incremental fetch thereafter. Schedule::command('fuel:poll') ->everyThirtyMinutes() ->withoutOverlapping() ->onOneServer() ->runInBackground(); // Safety-net full station + price refresh at 3am in case the auto-refresh // staleness check is skipped for any reason. Schedule::command('fuel:poll --full') ->dailyAt('03:00') ->withoutOverlapping() ->onOneServer() ->runInBackground(); // Fetch FRED prices and generate oil price prediction daily at 7am Schedule::command('oil:predict --fetch') ->dailyAt('07:00') ->withoutOverlapping() ->onOneServer() ->runInBackground(); // Move station_prices rows older than 12 months into station_prices_archive // once a month. Keeps the partitioned hot table bounded. Schedule::command('fuel:archive') ->monthlyOn(1, '04:00') ->withoutOverlapping() ->onOneServer() ->runInBackground(); // Scheduled WhatsApp updates — morning and evening Schedule::job(new SendScheduledWhatsAppJob('morning'))->dailyAt('07:30')->onOneServer(); Schedule::job(new SendScheduledWhatsAppJob('evening'))->dailyAt('18:00')->onOneServer();