Separate app · port 8001 · admin role

Run the bank
from one console.

Danube Ops is a standalone FastAPI application with its own login, its own session cookie, and full control over customers, money movement and the MySQL database.

Danube Ops dashboard showing customers, deposits, pending loans and a live audit feed
Capabilities

Everything an operator needs — and the database itself.

Unlike the customer app, the operator console is intentionally dense. It shows raw state and lets authorised staff act on it.

Customer lifecycle

Create customers, edit profiles, lock logins, change roles, reset passwords and move KYC between pending, verified and rejected.

Accounts & adjustments

Open accounts for any customer, freeze or close them, and post audited credit/debit adjustments that become ledger transactions.

Transaction control

Search any reference, inspect every ledger entry, and reverse completed transactions with a reason — the ledger is never edited in place.

Card operations

Issue cards to any account, reveal the encrypted PAN (audited), freeze or cancel, change limits and reset PINs.

Loan decisions

Approve or reject applications, or book a loan on a customer's behalf and disburse it immediately with a generated schedule.

Database management

Browse and sort any table, export CSV, run audited SQL with write protection, and download a full SQL backup.

Settings, not deployments

Change the rules live.

Every business number is a row in the settings table: opening credit, overdraft, savings rate, card limits, loan bounds and pricing, maintenance mode and even whether demo logins appear. The customer app picks changes up within ten seconds.

  • Maintenance mode returns a friendly 503 to customers while operators keep working.
  • Rate and limit changes are audited with old and new values.
  • No restart, no redeploy, no code edit.
Role-based customer administration and audit events
Customer administrationevery action audited
Trust

Operator actions leave a trail.

Every login, adjustment, reversal, KYC decision, setting change, export and SQL statement is written to audit_logs with the operator's email and IP address.

audit_logs · example rows
admin.settings_update   admin@danube.demo   127.0.0.1
  loans.base_rate_bps: 1290 → 1350

transaction.reverse     admin@danube.demo   127.0.0.1
  TXN-8F2A… reversed — duplicate capture

admin.card_reveal       admin@danube.demo   127.0.0.1
  card •••• 7005

admin.sql               admin@danube.demo   127.0.0.1
  SELECT email, role FROM customers
Same code path. The console does not update balances directly. Adjustments, reversals and disbursements all call the shared banking services, so the ledger invariants hold no matter which app initiates the change.
SQL console safety. SELECT, SHOW and EXPLAIN always run. Writes require ALLOW_ADMIN_SQL_WRITE=1. Schema-destructive statements are blocked outright.
Database tooling docs

Try the operator console.

Start both apps, sign in as admin@danube.demo and explore the live MySQL data.