{# ============= header ============= #}
The Ledger
Chart Room · YT-1300F
{% include 'includes/ledger_nav.html' %}
{% with messages = get_flashed_messages(with_categories=true) %} {% for category, message in messages %}
{{ message }}
{% endfor %} {% endwith %} {# ============= total debt + cash runway side by side ============= #}
{# total debt card #}

Total Debt

${{ '{:,.2f}'.format(total_debt) }}
30-day Δ {% if delta_30 is none %} {% elif delta_30 < -1 %} ↓ ${{ '{:,.2f}'.format(-delta_30) }} {% elif delta_30 > 1 %} ↑ ${{ '{:,.2f}'.format(delta_30) }} {% else %} — $0 {% endif %} Interest / mo ${{ '{:,.2f}'.format(interest_burn) }} Debt-free est. {{ projection.debt_free_date or '—' }}
{# cash runway card #}

Cash Runway

{% if runway.checking_balance is none %}
— · —
Checking not yet snapshotted. Start a payday session to begin.
{% else %}
${{ '{:,.2f}'.format(runway.checking_balance) }} checking
Next payday {{ runway.next_payday }} ({{ runway.days_to_next_payday }}d) Obligations ${{ '{:,.2f}'.format(runway.total_obligations) }} Free to attack ${{ '{:,.2f}'.format(runway.free_to_attack) }}
{% if runway.obligations %}
{{ runway.obligations|length }} obligation{{ 's' if runway.obligations|length != 1 else '' }} between now and payday →
{% for o in runway.obligations %}
{{ o.description }} · {{ o.date }} ${{ '{:,.2f}'.format(o.amount) }}
{% endfor %}
{% endif %} {% endif %}
{# ============= attack budget card (full width) ============= #}

Attack Budget

{% if budget.current_target %}
${{ '{:,.2f}'.format(budget.current_monthly) }} / mo → {{ budget.current_target.name }} @ {{ '{:.2f}'.format(budget.current_target.apr or 0) }}%

Watch the attack budget grow with each kill.

{% if budget.kill_sequence %}
    {% for k in budget.kill_sequence %}
  1. {{ k.account.name }} est. kill: {{ k.projected_kill_month }} · then ${{ '{:,.0f}'.format(k.monthly_budget_after_kill) }}/mo to next target ${{ '{:,.2f}'.format(k.account.current_balance) }}
  2. {% endfor %}
{% endif %} {% else %}
All debts retired. The chart is clean.
{% endif %}
{# ============= pending confirmations ============= #} {% if pending %}

Pending autopay confirmations ({{ pending|length }})

{% for p in pending %}
{{ p.account_name }} · {{ p.tx_date }} ${{ '{:,.2f}'.format(p.amount) }}
{% endfor %}
Confirm in payday session →
{% endif %} {# ============= avalanche debts table ============= #}
// Debts (avalanche order) All accounts →
{% for d in avalanche %} {% endfor %}
Account Balance APR Minimum Allocation Next
{{ d.name }} {% if d.status == 'unknown' %}{% endif %} {% if d.stale_snapshot %}·{% endif %} ${{ '{:,.2f}'.format(d.current_balance) }} {% if d.apr %}{{ '{:.2f}'.format(d.apr) }}%{% else %}—{% endif %} ${{ '{:,.2f}'.format(d.minimum_payment or 0) }} {% if d.attack_allocation %}${{ '{:,.0f}'.format(d.attack_allocation) }}{% else %}—{% endif %} {{ d.autopay_next_date or '—' }}
{# ============= coming up (next 30) ============= #} {% if coming_up %}
// Coming up (next 30 days)
{% for e in coming_up %} {% endfor %}
{{ e.event_date }} {{ e.description }} {% if e.direction == 'inflow' %}+${{ '{:,.2f}'.format(e.amount) }} {% else %}−${{ '{:,.2f}'.format(e.amount) }} {% endif %}
{% endif %} {# ============= this-month activity ============= #}
// This month's activity
{% if this_month.n %}
Logged: ${{ '{:,.2f}'.format(this_month.s) }} in debt payments across {{ this_month.n }} transaction{{ 's' if this_month.n != 1 else '' }}. {% if last_payment %} Last: ${{ '{:,.2f}'.format(last_payment.amount) }} to {{ last_payment.account_name }} on {{ last_payment.tx_date }}. {% endif %}
Full history → {% else %}
Nothing logged this month yet.
{% endif %}
{# ============= page footer ============= #}
{# Today panel + active timer strip — ship continuity #} {% include 'includes/today_panel.html' ignore missing %} {% include 'includes/active_timer_strip.html' ignore missing %}