A demo mobile banking application built with Ionic Framework, React, and Capacitor for iOS and Android.
Founded: 2020 (USA) Business Type: Digital-first regional bank focused on modern mobile banking
Mission: To root our community in financial confidence while providing a seamless, straight-line path to their goals through innovative mobile banking.
- User Profile: Personalized greeting with member ID and profile avatar
- Quick Actions: Fast access to Transfer, Pay, Cards, and Statements (demo)
- Account Overview: View current balance and account details
- Transaction History: 160 realistic transactions spanning 6 months with month headers
- OakBot AI Assistant: On-device AI chat powered by
@capacitor/local-llmfor private, offline financial guidance - Mock API Service: Simulated backend with network delays and error handling
- Brand-Aligned Design: Follows Oakline Bank's visual identity
- Dark Mode Support: Automatic theme switching based on system preference
- Pull to Refresh: Refresh account data with a simple gesture
- Responsive Layout: Optimized for various screen sizes
- Loading States: Realistic loading indicators and error handling
- Settings Access: Quick access to account settings (demo)
- The Mark: An abstract, minimalist oak leaf constructed from a single, continuous, glowing geometric line
- The Wordmark: "Oakline Bank" - clean, modern sans-serif with "Oak" bold and grounded
| Color | Hex | Usage |
|---|---|---|
| Deep Canopy | #0D3B2E |
Primary brand, headers, app bar |
| Electric Moss | #B4E845 |
Accent, CTAs, positive states |
| Bark Gray | #6B7280 |
Secondary text, inactive icons |
| Paper White | #FAFAFA |
Light mode background |
| Root Black | #0F1115 |
Dark mode background |
- Outfit: Headers, display text, account balances
- Inter: Body text, UI elements (with tabular numbers for amounts)
- Node.js (v24.12.0 or later)
- npm or yarn
- Xcode (for iOS development)
- Android Studio (for Android development)
-
Install dependencies:
npm install
-
Run the development server:
npm run dev
-
Open your browser to
http://localhost:5173
Build the web assets:
npm run build-
Build the web assets:
npm run build
-
Sync with Capacitor:
npx cap sync ios
-
Open in Xcode:
npx cap open ios
-
Run the app from Xcode on a simulator or physical device
-
Build the web assets:
npm run build
-
Sync with Capacitor:
npx cap sync android
-
Open in Android Studio:
npx cap open android
-
Run the app from Android Studio on an emulator or physical device
oakline-bank/
βββ android/ # Android native project
βββ ios/ # iOS native project
βββ public/ # Static assets
βββ src/
β βββ components/ # Shared components
β β βββ LLMSetup.tsx # OakBot on-device AI setup/download flow
β β βββ LLMSetup.css # LLM setup styles
β βββ data/ # Mock data
β β βββ mockTransactions.ts # 160 transactions (6 months)
β βββ services/ # API services
β β βββ api.ts # Mock banking API service
β β βββ README.md # API documentation
β βββ pages/ # App pages
β β βββ Home.tsx # Main account view + OakBot chat
β β βββ Home.css # Home page styles
β βββ theme/ # Theme configuration
β β βββ variables.css # Brand colors and typography
β βββ App.tsx # Root component
β βββ main.tsx # Entry point
βββ capacitor.config.ts # Capacitor configuration
βββ package.json # Dependencies and scripts
- Framework: React 19
- UI Library: Ionic Framework 8
- Native Runtime: Capacitor 8
- Build Tool: Vite 5
- Language: TypeScript 5.9
- Icons: Ionicons 7
- On-Device AI:
@capacitor/local-llm(OakBot) - Markdown Rendering:
react-markdown
The app uses a realistic mock API service that simulates server calls:
- Simulates network latency (300-800ms per request)
- 5% chance of simulated network errors for testing
- Complete TypeScript types and error handling
- Support for filtering, searching, and analytics
- Account Balance: $4,128.52
- Account Type: Checking Account (****3847)
- Transactions: 160 transactions spanning 6 months (Oct 2025 - Mar 2026)
- Categories: Groceries, Dining, Transportation, Utilities, Housing, Entertainment, etc.
- Transaction Types: Debits, credits, transfers, recurring payments
// Fetch account information
await bankingAPI.getAccountInfo();
// Get recent transactions (last 30 days)
await bankingAPI.getRecentTransactions();
// Filter transactions
await bankingAPI.getTransactions({
startDate: '2026-01-01',
category: 'Groceries',
type: 'debit'
});
// Search by merchant
await bankingAPI.searchTransactions('Starbucks');
// Get spending analytics
await bankingAPI.getSpendingByCategory('2026-01-01', '2026-01-31');
await bankingAPI.getTotalIncome('2026-01-01', '2026-01-31');
await bankingAPI.getTotalSpending('2026-01-01', '2026-01-31');See src/services/README.md for complete API documentation and usage examples.
OakBot is Oakline Bank's private, on-device AI chat assistant. All inference runs locally on the device using the @capacitor/local-llm Capacitor plugin β no data ever leaves the device.
- On first launch,
LLMSetupchecks whether the on-device model isavailable,downloadable, orunavailable. - If a download is needed (primarily Android), the user is prompted to download the model once.
- Once ready, the OakBot FAB button appears on the home screen. Tapping it opens a full-screen chat modal.
- Messages are sent to the local LLM using a session ID (
oakbot-<timestamp>), and responses are rendered as Markdown viareact-markdown.
- iOS: Uses Apple's on-device model (available on supported hardware; no download required).
- Android: Requires a one-time model download via
LocalLLM.download(). - Web/Browser: On-device AI is unavailable; OakBot chat is hidden.
- Rooted & Stable: Projects confidence without arrogance
- Direct & Streamlined: Eliminates friction with clear, concise language
- Encouraging Growth: Celebrates progress and positive actions
- Clear Error Handling: Never blames the user; provides helpful, empathetic feedback
npm run dev- Start development servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLintnpm run test.unit- Run unit testsnpm run test.e2e- Run E2E tests
The app automatically switches between light and dark modes based on system preferences. Dark mode uses:
- Root Black background
- Dimmed Electric Moss accent for better accessibility
- Adjusted contrast ratios for WCAG compliance
- CLAUDE.md - Brand guidelines and AI assistant instructions
- src/services/README.md - API documentation
Note: This is a demo application with mock data. No real banking services or financial transactions are involved.