{% extends "base.html" %} {% import "_links.html" as links with context %} {% import "_table.html" as tables with context %} {% import "_cards.html" as cards with context %} {% block title %}Projects — Cairn Dashboard{% endblock %} {% block content %}

Projects

{% if projects %} {{ cards.stat_row([ {"value": projects | length, "label": "projects"}, {"value": projects | sum(attribute='file_count'), "label": "files"}, {"value": projects | sum(attribute='symbol_count'), "label": "symbols"}, {"value": projects | sum(attribute='edge_count'), "label": "edges"}, ]) }} {% call tables.table(['Project', 'Language', 'Path', 'Files', 'Symbols', 'Edges', 'Last indexed', 'Embeddings']) %} {% for p in projects %} {#- FR-003: the repo-scoped graph anchor keeps the selected store (links.url); empty selection keeps the bare href. -#} {{ p.name }} {{ p.language or "—" }} {{ p.path }} {{ p.file_count }} {{ p.symbol_count }} {{ p.edge_count }} {{ p.last_indexed | isots if p.last_indexed else "never" }} {{ p.embedding_status }} {%- if p.embedding_models %} {{ p.embedding_models | join(", ") }} {%- endif %} {% endfor %} {% endcall %} {% else %} {{ tables.empty_state('No projects indexed yet — run', code='cairn build') }} {% endif %}
{% endblock %}