{% extends "base.html" %} {% set active_nav = "dashboard" %} {% block title %}Distill Dashboard{% endblock %} {% block content %}

Dashboard

v{{ version }}

{% for label, value in [ ("Topics", topics|length|string), ("Channels", total_channels|string), ("Videos", total_videos|string), ("Sites", site_count|string), ("Papers", paper_count|string), ("Recent Spend", "$%.2f"|format(recent_spend)), ("Next Sweep", "$%.2f"|format(next_sweep_cost)) ] %}
{{ label }}
{{ value }}
{% endfor %}

Stay Current

{% if watchlist %}

Channel Watches

{% endif %} {% if topic_watchlist %}

Topic Watches

{% endif %}

Learn Fast

What Changed

Build Corpus

{% if topic_spend_rollups %}

Top Spend (30d)

{% endif %} {% if source_spend_rollups %}

By Source (30d)

{% endif %}

Recent Activity

{% for entry in recent_runs|reverse %} {% else %} {% endfor %}
WhenCommandCostTime
{{ entry.get('timestamp', '')|format_timestamp }} {{ entry.get('command', 'unknown') }} ${{ "%.2f"|format(entry.get('actual_cost', 0)|float) }} {{ "%.1f"|format(entry.get('elapsed_seconds', 0)|float) }}s
No runs logged yet

Needs Attention

{% if latest_results.get('failed') %}
Latest run failed items: {{ latest_results.failed }}
{% endif %} {% if latest_issues %}
Latest run issues: {{ latest_issues|length }}
{% endif %} {% for msg in stale_topic_watches[:5] %}
{{ msg }}
{% endfor %} {% for msg in corpus_health_warnings[:5] %}
{{ msg }}
{% endfor %} {% for msg in budget_messages[:5] %}
{{ msg }}
{% endfor %} {% if not latest_results.get('failed') and not latest_issues and not stale_topic_watches and not corpus_health_warnings and not budget_messages %}
No immediate issues detected
{% endif %}
{% endblock %}