§ FinTech Platform — 2025–2026
ARM Bank — Digital Banking PWA

Банкінг продуманий
до деталі

Повноцінна фінансова платформа на React 18 + TypeScript. Від реєстрації та верифікації через Face ID / Passkeys до кредитів з ануїтетним розрахунком, депозитів з автонарахуванням відсотків та live-конвертера валют за курсами НБУ. Єдиний Flask REST API обслуговує PWA, Android-клієнт та адмін-панель.

60+
API Endpoints
17+
Екранів PWA
4
Ролі системи
VM
Доброго вечора Vyacheslaw
🔔
ЗАГАЛЬНИЙ БАЛАНС ◎
₴ 7 828 836,00
AB-100023 ⎘
Мої картки • 3 Усі ›
БАЛАНС РАХУНКУ
₴ 7 828 836,00
ВІРТУАЛЬНА
• • • •• • • •• • • • 6594
CARDHOLDER
VYACHESLAW MUNISTER
VALID
03/29
ПОПОВНИТИ
НА КАРТКУ
#
ЗА РАХ.
МАГАЗИН
React 18 TypeScript Vite Flask · Python PostgreSQL PWA · Service Worker WebAuthn · Face ID Web Push VAPID НБУ FX Live REST API 60+
60+
REST API Endpoints
17+
Екранів у PWA
4
Ролі: soldier · operator · admin · platform
PWA
Offline · Installable · iOS + Android

Що вже реалізовано

Повний фінансовий цикл в одній PWA — від відкриття рахунку до аналітики витрат. Кожен модуль продуманий як окремий сервіс з чіткою межею відповідальності.

01
Кредити
Ануїтетний калькулятор із формулою PMT — щомісячний платіж розраховується точно до копійки. Часткові погашення скорочують термін або суму. Трекер залишку та прогрес-бар прямо на дашборді.
02
Депозити
Фіксована та плаваюча ставка. Автоматичне нарахування відсотків щомісяця через серверний процес. Перегляд активних вкладів і прогнозований дохід за обраний горизонт.
03
Конвертер валют
Live-курси НБУ з кешем на рівні сервера — без прямих запитів з браузера. Обмін між власними рахунками з фіксацією курсу на момент операції.
04
Face ID · Passkeys
WebAuthn із платформними автентифікаторами — Touch ID, Face ID, Windows Hello. Passkey зберігається в пристрої, PIN-lock з idle-таймаутом 15 хвилин як другий рубіж.
05
Фінансовий рейтинг
Скоринг 0–100 на основі трьох метрик: норма заощаджень (50%), відношення балансу до витрат (30%), регулярність транзакцій (20%). Рівні: Відмінно / Добре / Задовільно / Потребує уваги.
06
Бюджетний планувальник
Ліміти за 7 категоріями з автокатегоризацією транзакцій за ключовими словами. Прогрес-бари витрат за поточний місяць. Дані зберігаються локально — без зайвих запитів до API.
07
Аналітика
Heatmap активності по годинах і днях тижня, спарклайн балансу за 30 днів, pie-chart витрат за категоріями, прогноз залишку, топ-5 одержувачів. Все рендериться клієнтом без окремих запитів.
08
Перекази та виписка
Переказ за номером рахунку або карткою з ідемпотентністю (заголовок + body fallback). Шаблони повторюваних платежів. Виписка з фільтрами, експорт CSV та PDF.
09
Push-сповіщення
VAPID Web Push через pywebpush. Фонові сповіщення про операції, нарахування, нові повідомлення. Адмін-розсилка по всіх або вибраних підписниках.
10
Месенджер · WebRTC
Вбудований зашифрований месенджер із голосовими повідомленнями, вкладеннями, реакціями. WebRTC 1:1 і групові дзвінки через Socket.IO-сигналізацію. Push-сповіщення для дзвінків і чатів навіть при закритій вкладці.
11
Bank Assistant · AI
Агент-панель із SSE-стримінгом відповідей у реальному часі. Асистент підключений до реальних даних рахунку — баланс, транзакції, кредити. Адмін може запускати задачі з прогресом і переривати виконання.
12
Crash Game · Store
Мультиплеєрна гра Crash через Socket.IO — реальний час, множник, авто-вивід. Вбудований Магазин із кешбек-балами та каталогом товарів. Щоденний бонус із зростаючою серією.

Детальна схема роботи

Кожна фінансова операція проходить через перевірений ланцюжок — від автентифікації до запису в журнал аудиту. Нижче — повний цикл для типового сценарію переказу.

01
Автентифікація та сесія
Користувач входить через Face ID / Passkey (WebAuthn) або PIN. Сервер видає Bearer-токен із TTL 720 год, що зберігається у таблиці sessions. Кожен запит перевіряє токен і оновлює час активності через X-Refresh-Token. При бездіяльності понад 15 хв PWA блокується — повторна верифікація без повного входу.
WebAuthn · WebCrypto Bearer Auth X-Refresh-Token sessions table
02
Запит до API — валідація та права
Flask отримує запит, декоратор @auth_required перевіряє токен у БД. Декоратор @role_required порівнює роль користувача з дозволеними. Вхідні дані валідуються — тип, діапазон, формат. Ідемпотентний заголовок Idempotency-Key перевіряється в таблиці idempotency_keys: повторний запит поверне вже збережений результат без повторного виконання.
@auth_required @role_required Idempotency-Key Input validation
03
Фінансова транзакція — атомарна операція
Сервіс відкриває SQL-транзакцію. Перевіряє достатність балансу відправника, статус рахунків (активний / заморожений). Атомарно зменшує баланс відправника і збільшує баланс отримувача через UPDATE + SELECT FOR UPDATE (PostgreSQL row-level lock). Записує обидві сторони в таблицю transactions з direction IN / OUT. При будь-якій помилці — повний ROLLBACK.
SQL Transaction SELECT FOR UPDATE ROLLBACK on error transactions table
04
Push-сповіщення та аудит
Після успішного коміту сервіс асинхронно відправляє Web Push через VAPID (pywebpush) обом сторонам операції. Значуща адміністративна дія (коригування балансу, зміна ролі) фіксується в таблиці audit_logs з userId, типом дії та timestamp. Service Worker на клієнті показує нативне сповіщення навіть якщо вкладка закрита.
Web Push VAPID pywebpush audit_logs table Service Worker
05
PWA — оновлення стану без перезавантаження
Після відповіді 200 клієнт оновлює локальний стан React без повного рефетча. Service Worker (stale-while-revalidate) обслуговує статику з кешу — наступний запит оновить його у фоні. При зміні SW_VERSION старий кеш army-bank-v{old} видаляється, клієнти отримують SW_UPDATED через postMessage і перезавантажують сторінку.
React state update stale-while-revalidate SW_VERSION bump postMessage

Чотири контури
одної платформи

Кожен контур має чітку межу відповідальності та ізольований набір маршрутів. Flask Blueprint забезпечує модульність — додавання нового сервісу не зачіпає існуючі маршрути.

Відкрити додаток
01
Банківська PWA
React 18 + TypeScript + Vite. 17+ екранів: дашборд, кредити, депозити, FX-конвертер, бюджет, аналітика, цілі накопичення, картки, профіль. Offline-режим через Service Worker, Face ID / Passkeys, Web Push.
02
Flask REST API
Python 3.11, Gunicorn, Blueprints: auth, account, credit, deposit, feature, admin, operator, platform, push, analytics, agent, passkey. Єдиний JSON API з уніфікованими помилками. PostgreSQL на продакшні, SQLite локально.
03
Admin SPA
Окремий статичний SPA: 14+ розділів — користувачі, картки, кредити, фінанси, агент-задачі (SSE streaming), документообіг з ECDSA-підписом (Web Crypto API). Ролі: admin, platform_admin.
04
Operator Panel
Ізольований контур /api/operator/* для нарахування виплат із ідемпотентністю. Мінімальні права доступу — лише нарахування, без доступу до адмін-функцій.

Як влаштована система

Єдиний REST API обслуговує три клієнти через Bearer Auth. Сесія зберігається у PostgreSQL — без JWT-секретів, з можливістю інвалідації будь-якого токена миттєво.

PWA · React 18 + TS · Vite
Admin SPA · 14+ розділів
Operator Panel
Android · Kotlin + Retrofit
HTTPS · Bearer Auth · Idempotency-Key · Session у PostgreSQL
Flask REST API · Gunicorn · army-bank.onrender.com
Socket.IO · WebRTC Signaling · Crash Game
Blueprint routing · @auth_required · @role_required · Input validation
auth · passkey · session
credit · deposit · fx
analytics · budget · goals
messenger · calls · media
push · feature · store
admin · operator · agent
database.py · єдиний адаптер · PostgreSQL NUMERIC · SELECT FOR UPDATE
PostgreSQL · Render · production
SQLite · local dev
pywebpush · VAPID
НБУ API · FX live
WebCrypto · ECDSA docs
GitHub Actions · CI/CD

Карта маршрутів

Кожен Blueprint — ізольований контур із власними маршрутами, декораторами і правилами доступу. Єдина точка входу — army-bank.onrender.com/api/

auth · session · passkey
POST/register · /login · /logout
POST/passkey/register · /passkey/login
GET/me · /sessions
DEL/sessions/{id}
account · cards · transfers
GET/balance · /transactions
POST/transfer · /deposit-funds
GET/cards · /statement
POST/export/csv · /export/pdf
credit · deposit · fx
POST/credits/apply · /repay
POST/deposits/open · /close
GET/fx/rates · /fx/history
POST/fx/exchange
analytics · budget · goals
GET/analytics/overview
GET/analytics/heatmap · /sparkline
GET/budget · /score
POST/goals · /goals/{id}/contribute
messenger · calls · media
GET/chats · /chats/{id}/messages
POST/chats · /messages/send
POST/media/upload
GETWS: /socket.io · signaling
push · store · agent
POST/push/subscribe · /send
GET/store/catalog · /cashback
POST/store/purchase
GETSSE: /agent/stream

Що всередині

Кожна технологія обрана під конкретну задачу. Ніяких модних рішень заради рішень — тільки те, що вирішує реальну проблему надійно та передбачувано.

Frontend / PWA

React 18
UI, hooks, context — без зайвих залежностей
TypeScript
Суворий тип-контроль, інтерфейси для всього API
Vite
HMR, content-hashed bundles, швидкий cold start
Service Worker
Stale-while-revalidate, offline shell, auto-update із SW_VERSION
WebAuthn API
Face ID / Passkeys, платформні автентифікатори
Web Push API
VAPID-підписані push через Service Worker
НБУ API
Live курси валют із серверним кешем

Backend / Інфраструктура

Python 3.11
Основна мова — сумісність із CI (не 3.12+)
Flask + Gunicorn
Blueprints, SSE streaming для агент-задач, Flask-Compress
PostgreSQL
Production БД, row-level locking, NUMERIC для фінансів
bcrypt · secrets
Паролі cost=12, токени token_urlsafe(32) у БД
pywebpush
VAPID-підписані Web Push, підписки у БД
Render
Flask API + PostgreSQL, вільний tier, auto-deploy
GitHub Actions
CI smoke (Python 3.11), деплой лендінгів через rsync

Спробуйте ARM Bank
просто зараз

PWA · Installable · iOS + Android + Desktop · Offline-ready