{# Dashboard stat cards partial — auto-refreshed via dashboard-refresh event. Rendered inside #dashboard-stats wrapper in dashboard/index.html, and as the response body of /dashboard/stats fragment route. Required context: stats, cost_stats, budget_cap, pending_count, company_count, ats_tracked_count, ats_last_scan. #} {% set budget_pct = (cost_stats.today / budget_cap * 100) if budget_cap > 0 else 0 %} {% if budget_pct >= 100 %}
Budget cap reached. Paid scoring providers paused. Free tiers (Ollama, Groq, Cerebras, Gemini, Claude CLI) still active.
Adjust in Settings
{% endif %}
Total Jobs {{ stats.total_jobs }} {% if stats.stale_count > 0 %} {{ stats.stale_count }} stale {% endif %}
New Today {{ stats.new_today }}
In Review {{ stats.reviewing_count }}
{% if budget_pct >= 100 %} {% set cost_border = "border-red-600" %} {% set cost_text = "text-red-400" %} {% elif budget_pct >= 80 %} {% set cost_border = "border-amber-600" %} {% set cost_text = "text-amber-400" %} {% else %} {% set cost_border = "border-slate-700" %} {% set cost_text = "text-slate-100" %} {% endif %}
Today's Cost ${{ "%.2f" | format(cost_stats.today) }} ${{ "%.2f" | format(cost_stats.month) }} / ${{ "%.0f" | format(budget_cap) }} this month View details →
Pending Review {{ pending_count }}
ATS Discovery
{{ company_count }} companies tracked {% if ats_tracked_count > 0 %} ({{ ats_tracked_count }} on ATS) {% endif %}
{% if ats_last_scan %}
Last scan: {{ ats_last_scan.scanned_at | relative_date }}
+{{ ats_last_scan.total_found or 0 }} jobs from {{ ats_last_scan.companies_scanned }} companies
{% else %} No ATS scans yet {% endif %}