{% extends "base.html" %} {% from "fragments/_chips.html" import needs_review_chip %} {% block title %}Voxint — home{% endblock %} {% block cb_breadcrumb %}home{% endblock %} {% block cb_summary %}{{ date_summary }} · everything running locally{% endblock %} {% block cb_actions %} + Add media {% endblock %} {% block body %}

NEEDS YOUR ATTENTION

{{ review_backlog }}
recordings to review finished, waiting on speaker decisions
{% if review_backlog %}{% endif %}
{{ unresolved_voices }}
voice{{ "s" if unresolved_voices != 1 else "" }} without a name across recordings waiting for review
{# #315: link where these voices can actually be resolved — the review queue sorted by unresolved count — not /speakers, which only lists already-known people and never shows unnamed voices. #} {% if unresolved_voices %}{% endif %}
{{ failed_runs }}
failed runs {% if failed_runs %}stopped with an error{% else %}nothing broke{% endif %}
{% if failed_runs %}{% endif %}

START SOMETHING

Upload a recording Watch a folder {% if shell.projects_enabled %}New project{% endif %} Review speakers

ACTIVITY

{% for value, label in windows %} {{ label }} {% endfor %}
{% if window_invalid %}

Unrecognized window value, showing the last day.

{% endif %}
{{ counts.media_added }}
MEDIA ADDED
{{ counts.runs_started }}
RUNS
{{ counts.speakers_enrolled }}
SPEAKERS IDENTIFIED
{{ counts.minutes_transcribed }}min
TRANSCRIBED

RECENT

{% if activity %}
{% for entry in activity %} {# Grouped failures carry a .count and .item; single items are ActivityItem directly. #} {% set is_group = entry.count is defined and entry.count > 1 %} {% set item = entry.item if is_group else entry %}
{{ format_clock_time(item.at, now=now) }}
{% if is_group %} {% set nerr = normalize_error(item.error) %} {{ entry.count }} runs failed: {{ nerr.label if nerr else "unknown error" }} {% if nerr and nerr.hint %}
{{ nerr.hint }}{% endif %} {% elif item.kind == "run_completed" %} Processing finished: {{ friendly_media_label(item.title, item.source_path) }}{% if item.unresolved_count %} {{ needs_review_chip(item.unresolved_count) }}{% endif %} {% elif item.kind == "run_failed" %} {% set nerr = normalize_error(item.error) %} Processing failed: {{ friendly_media_label(item.title, item.source_path) }} {% if nerr %}
{{ nerr.label }}.{% if nerr.hint %} {{ nerr.hint }}{% endif %}{% endif %} {% if nerr and nerr.raw != nerr.label %}
Details
{{ nerr.raw }}
{% endif %} {% elif item.kind == "run_started" %} Processing started: {{ friendly_media_label(item.title, item.source_path) }} {% elif item.kind == "speaker_enrolled" %} Speaker verified: {{ item.title }} {% endif %}
{% if is_group %} View all → {% elif item.kind == "run_completed" %} Review → {% elif item.run_id %} Open → {% elif item.speaker_id %} Open → {% endif %}
{% endfor %}
{% else %}

No recent activity. Add a recording to get started.

{% endif %}
{% endblock %}