Extract background scheduler coroutines into dashboard/schedulers.py (278 lines)
and lifecycle management into dashboard/startup.py (205 lines).
app.py reduced from 780 to 343 lines — thin entry point with app creation,
middleware config, router registration, and route handlers.
Net reduction: -437 lines from app.py, +46 lines overhead from module boilerplate.