{% extends "base.html" %} {% block content %}
+ Add Credit Card
+ Add Medical Debt
+ Add Affirm / Klarna / BNPL Plan
📋 Add Card by Pasting Statement

Fill in the card name and owner, paste your statement text, and we'll create the card and fill in all the numbers at once.

{% for cat in debt_categories %} {% set ct = totals[cat] %} {% if by_category[cat] %} {% endif %} {% endfor %}
Category Balance Minimums Paid This Month Extra
{{ cat }} ${{ ct.balance | money }} ${{ ct.minimum | money }} ${{ ct.paid | money }} ${{ ct.extra | money }}
Grand Total ${{ grand.balance | money }} ${{ grand.minimum | money }} ${{ grand.paid | money }} ${{ grand.extra | money }}
{% if dti is not none %} {% if dti <= 20 %} {% set dti_color = "#5A9E68" %}{% set dti_label = "Healthy" %}{% set dti_tip = "Under 20% is excellent." %} {% elif dti <= 36 %} {% set dti_color = "#D4A96A" %}{% set dti_label = "Manageable" %}{% set dti_tip = "20–36% is average. Keep an eye on it." %} {% elif dti <= 50 %} {% set dti_color = "#E8956A" %}{% set dti_label = "High" %}{% set dti_tip = "36–50% is high. Prioritize paying down debt." %} {% else %} {% set dti_color = "#C57A7A" %}{% set dti_label = "Critical" %}{% set dti_tip = "Over 50% is a red flag. Focus on reducing debt ASAP." %} {% endif %}
Debt-to-Income Ratio
{{ dti }}%
{{ dti_label }} ${{ "%.0f" | format(grand.minimum) }} min / ${{ "%.0f" | format(monthly_income) }} income
{{ dti_tip }}
{% else %}
DTI ratio unavailable — log this month's income to see your debt-to-income ratio.
{% endif %}
{% for cat in debt_categories %} {% set debts = by_category[cat] %} {% set cat_totals = totals[cat] %} {% if debts %}

{{ cat }}

Balance: ${{ cat_totals.balance | money }} Minimums: ${{ cat_totals.minimum | money }} Paid: ${{ cat_totals.paid | money }} Extra: ${{ cat_totals.extra | money }}
{% for d in debts %}
{{ d.name }}
{% if d.notes %}
{{ d.notes }}
{% endif %}
{{ d.owner }} {% if d.apr %}{{ d.apr }}% APR{% endif %} {% if d.get('is_bnpl') %} {% else %} {% endif %}
Balance ${{ d.ending | money }}
{% if d.credit_limit %} {% set available = d.credit_limit - d.ending %} {% set util_pct = [(d.ending / d.credit_limit * 100), 100] | min | int %}
Available credit ${{ available | money }} of ${{ d.credit_limit | money }}
{{ util_pct }}% utilized
{% endif %} {% if d.payoff_str and not d.get('is_bnpl') %}
Payoff projection {{ d.payoff_str }}
{% if d.months_left and d.months_left <= 36 %} {% set payoff_pct = [100 - (d.months_left / 36 * 100), 5] | max | int %}
{% endif %}
{{ d.months_left }} month{{ 's' if d.months_left != 1 }} at minimum payments {% if d.apr %} · {{ d.apr }}% APR{% endif %}
{% endif %} {% if not d.get('is_bnpl') %}
{% if d.get('statement_pending') %} numbers may not reflect current statement {% endif %}
{% endif %} {% if d.get('is_bnpl') %} {% set pct = ((d.payments_made / d.total_payments) * 100) | int if d.total_payments else 0 %} {% set remaining_payments = d.total_payments - d.payments_made %} {% set payoff_str, _ = bnpl_payoff_date(d.payments_made, d.total_payments, d.frequency_days) %}
{{ d.payments_made }} of {{ d.total_payments }} payments made
{% if payoff_str %}{% endif %}
Payment Amount${{ d.payment_amount | money }}
Payments Remaining{{ remaining_payments }}
Still Owed${{ d.current_balance | money }}
Payoff Date{{ payoff_str }}
{% else %} {% set underpaid = d.payment > 0 and d.payment < d.minimum and not d.get('statement_pending') %}
Starting Balance
Interest Charged
New Charges
Minimum Due ${{ d.minimum | money }}
Payment Made
{% if underpaid %}⚠️ Underpaid Minimum{% else %}Extra Paid Above Minimum{% endif %} {% if underpaid %} -${{ d.minimum - d.payment | money }} short {% elif d.get('statement_pending') %} {% else %} ${{ d.extra | money }} {% endif %}
{% endif %} {% if not d.get('is_bnpl') %} {% endif %}
{% endfor %}
{% endif %} {% endfor %} {% if not (by_category.values() | map('list') | sum(start=[])) %}

No debts added yet. Click "+ Add a Debt" above to get started.

{% endif %} {% endblock %}