mibudge

Screens

What each screen of the SPA shows and does, and the conventions every screen shares. styling.md covers how things look; architecture.md covers where code goes. Each section names the view (src/views/) and the feature code behind it, so you can go from a screen to its source.


App shell and navigation

features/shell/AppShell.vue wraps every signed-in screen.

TopBar (components/layout/TopBar.vue) has three zones:

Tabs (BottomNav and SideNav): Overview (/app/), Budgets (/app/budgets/), Transactions (/app/transactions/), Account (/app/account/).

Account switcher (components/shared/AccountSwitcher.vue): a sheet listing the user’s bank accounts with their balances; the active one is checked. Choosing one makes it the active account, and every screen scoped to an account reloads for it. “Manage accounts” opens the Account tab.

Sign-in and public screens

Overview

/app/, OverviewView, features/overview/useOverview.ts.

Budgets

List (/app/budgets/, BudgetsView, features/budgets/useBudgetList.ts):

Detail (/app/budgets/:id/, BudgetDetailView, features/budgets/useBudgetDetail.ts):

  1. The hero: name, type, balance against the target, progress, status and the next funding event, with the fill-up band.
  2. “Move money”: a sheet (MoveMoneySheet) that transfers between this budget (or its fill-up goal) and another budget of the account.
  3. Configuration: the type’s settings (target, cap, amount per event, funding schedule, refresh cycle, next fill-up deposit). “Edit” in the TopBar opens the full-screen edit sheet (BudgetEditSheet); the bank account and the budget type cannot change.
  4. Pause / resume and Archive; archiving asks for confirmation.
  5. The budget’s transactions (useBudgetTransactions, paged from GET /api/v1/transactions/?budget=<id>), grouped by date, with infinite scroll, search over loaded and older rows, a toggle to include transfers, and a per-row “remove from this budget”.

Create (/app/budgets/create/, BudgetCreateView + BudgetForm): choose the type (Goal, Recurring, Capped), then its fields. A recurring budget can have a fill-up goal, which the backend creates. The SchedulePicker edits a funding schedule or refresh cycle: weekly, monthly or yearly, with the days, and a plain-English preview.

Transactions

List (/app/transactions/, TransactionsView, features/transactions/useTransactionList.ts):

Detail (/app/transactions/:id/, TransactionDetailView, features/transactions/useTransactionDetail.ts):

Account

Hub (/app/account/, AccountView, features/settings/useAccountHub.ts): the profile card (opens Profile); the bank accounts with posted, available and unallocated balances and the next funding event (“Add bank account” at the end); settings: the default account, Security & Notifications, and Sign out.

Profile (/app/account/profile/, UserProfileView): name and timezone; the email address is changed through a verification email to the new address and a notice to the old one. An account without a password (created by invitation) is told how to set one first.

Security & Notifications (/app/account/settings/, AccountSettingsView): change password; API keys (create, shown once; revoke one, or all active keys at once, with confirmation; “Revoke all keys” is disabled when none is active); notification delivery per kind and the email digest frequency; pending co-owner invitations the user sent, across accounts.

Bank account detail (/app/account/bank-accounts/:id/, BankAccountDetailView): balances; details (the account number, masked, is editable, as is the name); owners and co-owner invitations; a link to the account’s budgets; funding (data freshness, the next event, the automatic-funding switch, “Run funding now”); Delete account, with confirmation.

Create bank account (/app/account/bank-accounts/create/, BankAccountCreateView): type, name, bank, account number, currency and opening balances. Balances cannot change after creation; an Unallocated budget is created with the account.

Conventions every screen follows

Planned layouts

The screens are single-column at every width; wider screens only swap the BottomNav for the SideNav and show sheets as centred cards. Planned for tablets and desktops: