{% extends "base.html" %} {% from "fragments/_chips.html" import chip %} {% block title %}Voxint โ€” {{ detail.name }}{% endblock %} {% block cb_breadcrumb %}projects / {{ detail.name }}{% endblock %} {% block cb_summary %}{{ chip("active") }}{% endblock %} {% block cb_actions %}
Rename
{% endblock %} {% block body %} {% macro temporal_trends_mount(trends) -%}

TEMPORAL TRENDS

{% if trends.range.start and trends.range.end %}

{{ trends.range.start }} to {{ trends.range.end }} · {{ trends.range.bucket_unit }} buckets · {{ trends.coverage.dated_recordings }} dated recording{{ "s" if trends.coverage.dated_recordings != 1 else "" }}

{% else %}

No dated recordings are available yet.

{% endif %}

{{ trends.date_provenance.label }}

{%- endmacro %} {% if error %}{% endif %} {# The fields this project actually overrides, named so the supersede copy never claims blanket replacement when only one field is set (ADR 0002 per-field). #} {% set own_fields %}{% if detail.has_own_vocabulary and detail.has_own_corrections %}vocabulary and corrections{% elif detail.has_own_vocabulary %}vocabulary{% elif detail.has_own_corrections %}corrections{% endif %}{% endset %} {% if assigned %}

Assigned {{ assigned.path }} to this project. {% if assigned.domain_pack %} {% if detail.has_own_config %} This project now applies its own {{ own_fields }} instead of the folder's "{{ assigned.domain_pack }}" pack for its recordings; the pack still supplies everything else. {% else %} The folder's "{{ assigned.domain_pack }}" pack keeps applying until this project sets its own vocabulary or corrections. {% endif %} {% endif %}

{% endif %} {# ---- Project Insights ---- #} {% if insights %} {% set ec = insights.enrichment_coverage %}

OVERVIEW

Explore this project
{{ ec.total_runs }}
recording{{ "s" if ec.total_runs != 1 else "" }}
{{ insights.entities|length }}
entities
{{ insights.topics|length }}
topics
{{ insights.coverage.speakers|length }}
speakers
{{ temporal_trends_mount(temporal_trends) }} {% if ec.entity_runs < ec.total_runs or ec.topic_runs < ec.total_runs %}

Enrichment covers {{ ec.entity_runs }} of {{ ec.total_runs }} recordings for entities, {{ ec.topic_runs }} of {{ ec.total_runs }} for topics. {% if ec.entity_runs == 0 and ec.topic_runs == 0 %} Enable run enrichment in Settings to see themes. {% endif %}

{% endif %} {% if not insights.entities and not insights.topics and (ec.entity_runs or ec.topic_runs) %}

Enrichment ran on this project's recordings but found no topics or entity mentions to report.

{% endif %} {% if insights.entities %}

TOP ENTITIES

{%- set max_occ = insights.entities[0].total_occurrences if insights.entities else 1 -%} {% for e in insights.entities[:15] %} {{ e.surface }}{% if e.kind %}{{ e.kind }}{% endif %} {{ e.total_occurrences }} {% endfor %}
{% endif %} {% if insights.topics %}

TOPICS

{% for t in insights.topics %} {{ t.label }} {{ t.runs_count }} {% endfor %}
{% endif %} {% if insights.coverage.speakers and insights.coverage.recordings %}

SPEAKER COVERAGE

{% for rec in insights.coverage.recordings %} {% endfor %} {% for spk in insights.coverage.speakers %} {%- set spk_idx = loop.index0 -%} {% for rec in insights.coverage.recordings %} {%- set cell_key = spk_idx|string ~ "," ~ loop.index0|string -%} {% endfor %} {% endfor %}
{{ rec.title[:20] }}
{% if spk.name %}{{ spk.name }}{% else %}Unnamed{% endif %} {% if cell_key in coverage_set %} {% else %}{% endif %}
{% if insights.coverage.truncated %}

Showing a subset of speakers and recordings.

{% endif %}
{% endif %} Browse all quotes in Explore →
{% else %}

OVERVIEW

{{ temporal_trends_mount(temporal_trends) }} {% if detail.speakers %}

This project has {{ detail.speakers|length }} speaker{{ "s" if detail.speakers|length != 1 else "" }} but no enrichment data yet. Enable run enrichment in Settings to see entities, topics, and speaker coverage here.

{% elif detail.folders %}

No completed recordings yet. Once recordings in this project finish processing, you'll see entities, topics, and speaker coverage here.

{% else %}

Link a media folder to this project to get started. Completed recordings will produce entities, topics, and speaker coverage here.

{% endif %}
{% endif %}

SAVED QUOTES {% if quote_board_props.total %}{{ quote_board_props.total }}{% endif %}

{% if quote_board_props.total %} Export CSV {% endif %}
{% if quote_board_props.total %}

{{ quote_board_props.total }} saved quote{{ "s" if quote_board_props.total != 1 else "" }}.

{% else %}

Save quotes from Explore to build your evidence board.

{% endif %}

VOCABULARY

names and terms Voxint should spell correctly in this project

{% if detail.vocabulary is not none and detail.vocabulary %}
{% for term in detail.vocabulary %} {{ term }} {% endfor %} + add term
{% elif detail.vocabulary is not none %}

No terms (explicitly set to none).

{% else %}

Inheriting from the folder pack or global settings.

{% endif %} {% if vocabulary_error %}{% endif %}
Edit vocabulary
Source

Applies to the next run โ€” finished transcripts don't change.

AUTO-CORRECT RULES

fix a repeated mishearing once, it's fixed everywhere

{% if corrections_error %}{% endif %}
{% if detail.corrections %}
HEARD REPLACE WITH SOURCE
{% for rule in detail.corrections %}
{{ rule.match }} โ†’ {{ rule.replace }} manual
{% endfor %}
{% elif detail.corrections is not none %}

No correction rules (explicitly none).

{% else %}

Inheriting from the folder pack or global corrections.

{% endif %}
{% if detail.corrections is not none %}
{% endif %}
{% endblock %}