These render the initial dashboard page today and will also be rendered standalone by the sync routes in the next commits, so the same markup drives both the full page and the post-sync response. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
41 lines
1.4 KiB
HTML
41 lines
1.4 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Dashboard - MyWhoosh Garmin Sync{% endblock %}
|
|
|
|
{% block content %}
|
|
<h1>Dashboard</h1>
|
|
|
|
<div class="stat-tiles">
|
|
<div class="stat-tile">
|
|
<span class="stat-tile-label">Riders</span>
|
|
<span class="stat-tile-value">{{ summary.rider_total }}</span>
|
|
<span class="stat-tile-sub">{{ summary.rider_enabled }} enabled</span>
|
|
</div>
|
|
<div class="stat-tile">
|
|
<span class="stat-tile-label">Imported · 7d</span>
|
|
<span class="stat-tile-value">{{ summary.imported_recent }}</span>
|
|
</div>
|
|
<div class="stat-tile">
|
|
<span class="stat-tile-label">Success rate · 7d</span>
|
|
<span class="stat-tile-value">{% if summary.success_rate_recent is not none %}{{ "%.0f"|format(summary.success_rate_recent) }}%{% else %}–{% endif %}</span>
|
|
</div>
|
|
<div class="stat-tile">
|
|
<span class="stat-tile-label">Action required</span>
|
|
<span class="stat-tile-value">{{ summary.action_required_count }}</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="page-actions">
|
|
<a class="btn secondary" href="/users/new">Add user</a>
|
|
{% include "fragments/sync_all_form.html" %}
|
|
</div>
|
|
|
|
<ul class="user-list">
|
|
{% for row in rows %}
|
|
{% include "fragments/user_row.html" %}
|
|
{% else %}
|
|
<li class="card empty-state">No users yet.</li>
|
|
{% endfor %}
|
|
</ul>
|
|
{% endblock %}
|