{% extends 'base.html.twig' %} {% block title %}Dashboard{% endblock %} {% block content %} {# โ”€โ”€ Income prompt banner โ”€โ”€ #} {% if not hasIncome %}
๐Ÿ‘‹
New month โ€” let's set up your income!

Add your salary so we can track how much you have left this month.

Add Income
{% endif %} {# โ”€โ”€ Stat cards โ”€โ”€ #}
Total Income
ยฃ{{ totalIncome|number_format(2) }}
{{ incomes|length }} source{{ incomes|length != 1 ? 's' : '' }}
Spent
ยฃ{{ (totalBills + totalExpenses)|number_format(2) }}
Bills ยฃ{{ totalBills|number_format(2) }} + daily ยฃ{{ totalExpenses|number_format(2) }}
{% set remaining = totalIncome - totalBills - totalExpenses %}
Remaining
ยฃ{{ remaining|number_format(2) }}
{{ remaining >= 0 ? 'Looking good ๐ŸŽ‰' : 'Over budget โš ๏ธ' }}
{% for goal in favouriteSavings %}
โญ {{ goal.name }}
ยฃ{{ goal.currentAmount|number_format(2) }}
{{ goal.progressPercent }}% of ยฃ{{ goal.targetAmount|number_format(2) }}{% if goal.institution %} ยท {{ goal.institution }}{% endif %}
{% endfor %}
{# โ”€โ”€ Days to payday card โ”€โ”€ #}
Pay period ends
{{ periodEnd|date('l, d M Y') }}
{% if daysLeft == 0 %}Payday today! ๐ŸŽ‰ {% elseif daysLeft == 1 %}Tomorrow {% else %}{{ daysLeft }} days left {% endif %}
{# โ”€โ”€ Category breakdown โ”€โ”€ #} {% if categoryTotals|length > 0 %}

Spending by Category

{% set grandTotal = totalExpenses > 0 ? totalExpenses : 1 %} {% for cat in categoryTotals %}
{{ cat.category|capitalize }}
ยฃ{{ cat.total|number_format(2) }}
{% endfor %}
{% endif %}
{# โ”€โ”€ Upcoming bills โ”€โ”€ #}

Upcoming Bills

View all โ†’
{# Show recurring expense-bills that have no transaction ID yet (still to pay) #} {% set upcomingExpBills = expenseBills|filter(e => e.monzoTransactionId is null) %} {% if upcomingExpBills|length > 0 %} {% else %}

All bills paid this period ๐ŸŽ‰

{% endif %}
{# โ”€โ”€ Recent expenses โ”€โ”€ #}

Recent Expenses

View all โ†’
{% if recentExpenses|length > 0 %} {% else %}

No expenses logged yet

{% endif %}
{# โ”€โ”€ Savings progress โ”€โ”€ #} {% if savingsGoals|length > 0 %}

Savings Goals

Manage โ†’
{% for goal in savingsGoals %}
{{ goal.name }} {{ goal.progressPercent }}%
ยฃ{{ goal.currentAmount|number_format(2) }} of ยฃ{{ goal.targetAmount|number_format(2) }}
{% endfor %}
{% endif %} {% endblock %}