User Application

Account & Billing Settings

Plan usage and Stripe billing portal access, notification preferences, data export/deletion, API tokens, and a personal activity log.

Billing

User Panel A single screen for everything money-related: the subscriber's plan, account details, usage against every plan limit, invoices, AI credit top-ups, and self-service plan changes — with a link into the Stripe-hosted billing portal for anything that needs it (updating a card, downloading old invoices, or cancelling).

Billing — plan overview, account panel, usage, invoices, credit packs, and Change Plan

Billing — plan overview, account panel, usage, invoices, credit packs, and Change Plan

  • Plan overview — plan name, price, live subscription status (Active, Past due, etc.), and the plan's full feature checklist, so a subscriber can see exactly what they're paying for without leaving the page.
  • Account panel — AI credit balance, the card on file (brand and last four), and the next payment amount and date, pulled live from Stripe.
  • Usage vs limits and Invoices — per-limit progress tiles, and a full invoice history with a link out to each hosted Stripe invoice.
  • AI credit top-ups — one-off credit packs purchased via real Stripe Checkout, with a coupon field and live discounted-price preview before checkout.
  • Change Plan — self-service upgrades and downgrades between paid tiers, right from this page. An existing subscriber's Stripe subscription is switched in place (prorated automatically); a Free subscriber going paid for the first time gets a fresh Checkout session. Coupons apply here too.
Downgrading to Free, or cancelling

Change Plan deliberately only covers paid ↔ paid moves. Leaving the platform (downgrading to Free or cancelling outright) is a colder, more consequential action, so it stays on the Stripe-hosted billing portal via Manage billing rather than a single in-app button.

Notification Preferences

Per-user control over which events send an email (budget threshold alerts, bill due-date reminders, recurring transaction price-increase alerts, the weekly digest, and AI-action completion) versus just an in-app notification. The weekly digest is itself a plan-gated feature — it's disabled with an upgrade note for subscribers whose plan doesn't include it.

Notification Preferences, including the recurring transaction price-increase alerts toggle

Notification Preferences

Account

A Default Currency preference — either "Use site default" or a specific currency — used wherever an amount needs a single reporting currency across multiple accounts, such as the Net Worth trend. Below that, request a full export of every record a subscriber owns, or permanently delete their account and all associated data.

Account settings — data export and deletion

Account settings — data export and deletion

API Tokens

Subscribers on a plan with plan-gated API access can generate personal tokens (via Laravel Sanctum) to authenticate their own integrations — a Zapier flow, a mobile app, a script — against MoneyMate's built-in REST API. Tokens are named, listed with created/last-used timestamps, and revocable individually; a plaintext token is shown exactly once, right after creation.

The same page ships a full, in-app API Reference covering Account, Incomes, Expenses, Accounts, Categories, Banks, Budgets, Tags, Savings Goals, Debts (Lend/Borrow), Currencies, Recurring Transactions, Rules, Transfers, and Net Worth — full CRUD on most resources, plus purpose-built actions like POST /savings-goals/{id}/contribute, POST /debts/{id}/repay, and POST /debts/{id}/collect where a plain update doesn't match how the underlying record actually changes. Every group is grouped into a collapsible accordion with syntax-highlighted request/response examples and required/optional field tables. Each endpoint's request example has its own cURL / PHP / JS tabs — the PHP tab uses a dependency-free curl_init() call and the JS tab uses fetch(), so a copied snippet runs as-is without assuming any particular framework or SDK — plus one-click copy on every code block. No separate API docs site to maintain or link out to.

API Tokens page — token management plus the full in-app API Reference accordion, now covering fourteen resource groups

API Tokens & API Reference

An expanded API Reference endpoint showing the PHP request tab — cURL, PHP, and JS tabs sit above the syntax-highlighted request code block

Every endpoint's request example — cURL, PHP, or JS

Activity Log

User Panel A personal, chronological record of what a subscriber has done in their own account — every income, expense, budget, debt, transfer, savings goal, installment plan, recurring transaction, category/tag/rule change, plus account-level events like signing in, changing a password, or issuing an API token. Each row shows a category icon, a plain-language description, and a details column: creating something shows its field values, updating it shows the actual before → after change per field. This is entirely separate from — and only visible to — the subscriber themselves; it never appears on the admin's own Activity Log, and one subscriber never sees another's.

A subscriber's own Activity Log, showing an edited income entry's before → after change

A subscriber's own Activity Log, showing an edited income entry's before → after change

Manage Profile & Change Password

Reachable from the account dropdown in the top-right of every page — update name, profile picture, and password. Admin users can reach these same screens directly from the admin panel's own account dropdown, without needing to switch into the app first.

Language

User Panel A language switcher sits in the app header, next to the theme toggle, letting a subscriber pick their own display language independently of everyone else — it's a personal, session-scoped preference, not a site-wide setting. Every active language is listed with its flag; one still being translated is labeled (Partial) right in the dropdown.

The header language switcher open in the user app, listing English and a partially-translated language flagged (Partial)

The header language switcher, in the user app

Trying to switch to a language that isn't fully translated yet is blocked with a friendly explanation instead of an error — nothing changes and the current language keeps working. See System Settings → Switching Your Own Language for how that looks and how admins add and translate new languages.