| name | theme-banking |
| description | Banking / fintech application palette: variants, pages, entities, and flows for building a varied financial app. Use when theme_preset is banking.
|
Banking theme
Domain
Apps that hold balances and move money between accounts. The invariants that
matter โ balance never goes negative without overdraft, transfers respect
limits, you can only see your own accounts โ are exactly where the interesting
exploits live.
Application variants โ pick ONE per lab
Honor any hint in theme_free_text / custom_prompt; otherwise pick one.
- Retail checking/savings โ accounts, transfers, payees, statements.
- Digital wallet โ balance, top-up, peer-to-peer send, request money.
- Lending / loans โ loan applications, repayment schedule, balance.
- Brokerage / investing โ portfolio, buy/sell orders, holdings, watchlist.
- Crypto exchange โ wallets per asset, trades, deposits/withdrawals.
- Neobank / budgeting โ spending categories, budgets, goals, round-ups, virtual cards.
- B2B treasury / payments โ company accounts, batch payouts, approval workflow, beneficiaries.
Roles โ choose the set that fits the variant
- user (account holder) โ view own accounts, transfer, pay, statements.
- service โ back-office/scheduled jobs (interest, settlement) where relevant.
- admin (back office) โ view/adjust any account, approve large transfers.
Most exploits run as user.
Candidate pages โ select a coherent subset
Size the subset to endpoint_count. Candidates: dashboard/overview, accounts
list, account detail, transfer money, payees/recipients, scheduled payments,
transactions/statements, statement detail, card management, dispute a charge,
profile/settings, notifications, loan application & schedule (lending),
portfolio / holdings / trade / watchlist (brokerage), asset wallets / deposit /
withdraw / trade (crypto), admin back-office.
Candidate entities (seed tables) โ select what the variant needs
- users โ id, email, password_hash, role
- accounts โ id, user_id, type, currency, balance_cents, overdraft_limit_cents
- transactions โ id, account_id, kind, amount_cents, balance_after_cents, created_at
- transfers โ id, from_account_id, to_account_id, amount_cents, status
- payees โ id, user_id, name, account_number, routing (saved bill-pay / transfer recipients โ a real retail-banking concept)
- scheduled_payments โ id, user_id, payee_id, amount_cents, cadence, next_run_at
- cards โ id, account_id, last4, status, daily_limit_cents
- statements โ id, account_id, period, document_path?
- disputes โ id, transaction_id, user_id, reason, status
- loans (lending) โ id, user_id, principal_cents, rate_bps, status
- loan_payments (lending) โ id, loan_id, amount_cents, due_at, paid_at
- holdings (brokerage/crypto) โ id, user_id, symbol/asset, qty, avg_price_cents
- orders (brokerage/crypto) โ id, user_id, symbol/asset, side, qty, price_cents, status
- watchlist (brokerage) โ id, user_id, symbol
- wallets (crypto) โ id, user_id, asset, balance
- deposits / withdrawals (crypto/wallet) โ id, user_id, asset, amount, status, address?
Seed multiple users each with โฅ2 accounts/holdings so cross-account exploits are possible.
Candidate user flows โ select the ones matching chosen pages/features
- Dashboard โ open an account โ view its transactions.
- Transfer between own accounts โ balances update.
- Add a saved recipient (payee) โ send an external transfer (limit-checked).
- Schedule a recurring payment / standing order โ it appears in upcoming.
- Manage a card โ freeze / unfreeze / change its limit.
- View a statement โ download it.
- Dispute a transaction โ status updates.
- (lending) Apply for a loan โ review the repayment schedule โ make a repayment.
- (brokerage) Search a symbol โ place a buy/sell order โ holdings & cash update.
- (crypto) Deposit to an asset wallet โ trade between assets โ withdraw.
Candidate endpoints โ a feature may span several
Endpoints are a shared surface, not owned 1:1 by a feature (a single feature
often spans several, and an endpoint can back multiple features). Pick a coherent
subset alongside the pages above. Grouped by area:
- accounts โ
GET /api/accounts, GET /api/accounts/{id}, GET /api/accounts/{id}/transactions
- transfers โ
POST /api/transfers, GET /api/transfers, GET /api/transfers/{id}
- payees / scheduled โ
GET/POST /api/payees, PUT/DELETE /api/payees/{id}, GET/POST /api/scheduled-payments
- cards โ
GET /api/cards, POST /api/cards/{id}/limit, POST /api/cards/{id}/freeze
- statements / disputes โ
GET /api/statements/{id}, POST /api/transactions/{id}/dispute
- loans (lending) โ
POST /api/loans, GET /api/loans/{id}, POST /api/loans/{id}/repay
- trading (brokerage/crypto) โ
GET /api/holdings, POST /api/orders, GET /api/orders/{id}, GET/POST /api/watchlist
- crypto โ
GET /api/wallets, POST /api/deposits, POST /api/withdrawals
- admin โ
/api/admin/accounts/{id}, POST /api/admin/transfers/{id}/approve
Where vulnerabilities fit naturally
- idor โ
GET /api/accounts/{id}, /api/transfers/{id}, /api/statements/{id} โ read/operate on another customer's account.
- business_logic โ transfer exceeding daily limit, negative/zero amount, rounding abuse, repay-into-credit, sell/withdraw more than held.
- race_condition โ concurrent transfers double-spending the same balance; withdraw twice before balance settles.
- auth_bypass โ reach a protected account action (e.g. a transfer) without a valid session.
- privilege_escalation โ user reaching
/api/admin/... back-office actions.
- idor/business_logic โ set another account as the
to/from of a transfer.
Diversity guidance
Pick ONE variant and a coherent subset โ a wallet app and a brokerage should
not share a page list. Size to endpoint_count; let theme_free_text /
custom_prompt bias the variant and naming. Vary account types, currencies, and
limits so two banking labs feel like different institutions.