{{ alerts[0].title }}
{{ alerts[0].message }}{{ alerts.length > 1 ? ` (+${alerts.length - 1} more)` : '' }}
DEPARTURES — MY WORKS
CHECKED EVERY 60S
DESTINATIONSTATUSTIMESSL
{{ s.name }}
{{ flapText(s) }}
{{ s.response_ms }}ms
{{ s.http_code || '--' }}
{{ s.ssl_days_left === null ? '--' : s.ssl_days_left + 'd' }}
WORKBENCH — REPOS & JOBS
AGENT SCAN 5 MIN
REPO / JOBSTATETODAYCI
{{ r.name.toUpperCase() }}
DIRTY {{ r.dirty_hours }}H
↑{{ r.unpushed }}
CLEAN
{{ r.commits_today }} cmt
{{ ciText(r) }}
{{ b.name.toUpperCase() }}
JOB
{{ fmtAge(b.age_min) }}
{{ b.age_min > b.expect_minutes ? 'STALE' : 'OK' }}
FLIGHT LOG — TODAY
CODING TIMER
TODAY {{ fmtHM(timer.today_sec) }}
{{ fmtDur(elapsed) }}
{{ timer.running ? 'ON ' + timer.running.project : 'IDLE' }}
{{ w.project }} {{ fmtHM(w.sec) }}
MACHINES
{{ devices.length }} REPORTING
{{ d.device.toUpperCase() }}
{{ uptimeFor(d) }}
{{ d.age_sec < 20 ? 'LIVE' : 'OFFLINE' }}
{{ m.label }}
{{ m.text }}
▲ TX {{ d.net_up_kbps }} KB/S
▼ RX {{ d.net_down_kbps }} KB/S
CPU RAM — {{ latest.device.toUpperCase() }}
CREW — ACCESS
{{ users.length }} USER{{ users.length === 1 ? '' : 'S' }}
{{ u.name.toUpperCase() }}
{{ u.email }}
{{ u.id === meId ? 'YOU' : 'CREW' }}