Files
relata/internal/web/templates/dashboard.html
T
2026-08-11 10:40:10 +01:00

88 lines
3.6 KiB
HTML

{{define "content"}}
<h1>Dashboard</h1>
<section aria-labelledby="stats-heading">
<h2 id="stats-heading" class="visually-hidden">Workspace statistics</h2>
<ul class="stat-grid">
<li class="stat"><span class="stat-value">{{.Stats.Items}}</span><span class="stat-label">Items</span></li>
<li class="stat"><span class="stat-value">{{.Stats.Chunks}}</span><span class="stat-label">Chunks</span></li>
<li class="stat"><span class="stat-value">{{.Stats.Entities}}</span><span class="stat-label">Entities</span></li>
<li class="stat"><span class="stat-value">{{.Stats.Relationships}}</span><span class="stat-label">Relationships</span></li>
<li class="stat"><span class="stat-value">{{.Stats.PendingJobs}}</span><span class="stat-label">Pending jobs</span></li>
<li class="stat {{if gt .Stats.FailedJobs 0}}stat-warn{{end}}">
<span class="stat-value">{{.Stats.FailedJobs}}</span><span class="stat-label">Failed jobs</span>
</li>
<li class="stat {{if gt .Stats.AwaitingReview 0}}stat-attention{{end}}">
<span class="stat-value">{{.Stats.AwaitingReview}}</span>
<span class="stat-label">Awaiting relationship review</span>
</li>
</ul>
</section>
<div class="two-col">
<section aria-labelledby="recent-heading">
<h2 id="recent-heading">Recent items</h2>
{{if .RecentItems}}
<ul class="item-list">
{{range .RecentItems}}
<li class="item-row">
<a class="item-title" href="/items/{{.ID}}">{{.Title}}</a>
<p class="item-meta">
<span class="pill pill-{{.Status}}">{{statusLabel .Status}}</span>
<span>{{.SourceType}}</span>
<span>{{ago .IngestedAt}}</span>
{{if .ChunkCount}}<span>{{.ChunkCount}} sections</span>{{end}}
</p>
</li>
{{end}}
</ul>
<p><a href="/items">All items</a></p>
{{else}}
<div class="empty">
<h3>Nothing stored yet</h3>
<p>Relata has no items in this workspace.</p>
<p><a class="btn btn-primary" href="/add">Add a note</a> <a class="btn" href="/upload">Upload a document</a></p>
<p class="muted">You can also load the demonstration dataset with <code>relata seed</code>.</p>
</div>
{{end}}
</section>
<section aria-labelledby="review-heading">
<h2 id="review-heading">Awaiting review</h2>
{{if .PendingRelationships}}
<p class="muted">
These relationships were proposed by analysis. They are <strong>suggestions</strong>,
not established facts, until someone confirms them.
</p>
<ul class="item-list">
{{range .PendingRelationships}}
<li class="item-row">
<a href="/review#rel-{{.Rel.ID}}">{{.SourceTitle}} → {{.TargetTitle}}</a>
<p class="item-meta">
<span class="pill">{{relTypeLabel .Rel.Type}}</span>
<span title="Heuristic strength, not a probability">strength {{score2 .Rel.Score}} ({{strengthLabel .Rel.Score}})</span>
</p>
</li>
{{end}}
</ul>
<p><a href="/review">Review relationships</a></p>
{{else}}
<div class="empty">
<h3>Nothing to review</h3>
<p>No proposed relationships are waiting for a decision.</p>
</div>
{{end}}
</section>
</div>
{{if .ProviderWarnings}}
<section aria-labelledby="providers-heading" class="callout callout-warn">
<h2 id="providers-heading">Model availability</h2>
<ul>
{{range .ProviderWarnings}}<li>{{.}}</li>{{end}}
</ul>
<p class="muted">Ingestion, keyword search and browsing continue to work without a language model.</p>
</section>
{{end}}
{{end}}