Year: 2025
Mission: Build a frontend-first, multi-currency cross-border payment dashboard.
Borderless is a simulation of a cross-border payment system designed to make complex financial flows simple, reliable, and user-friendly.
The app allows users to:
- Onboard & create wallets (mock API with email/phone only).
- Deposit funds into supported stablecoins (mock API).
- Swap currencies using live FX API data (with graceful failure handling).
- Send funds cross-border to another wallet (mock API).
- View balances, transaction history, and FX analytics (tables + charts).
This project prioritizes frontend-first development, with a focus on UX, state management, and scalability.
-
Wallet Management
- Create wallets in multiple currencies (USD, NGN, EUR, GBP, USDT, USDC, BUSD, DAI).
- Deposit funds and view wallet balances.
-
Currency Swap
- Real-time FX rates integration.
- Error handling with fallback messages if API fails.
-
Cross-Border Transfers
- Send funds between wallets.
- Track transaction history and analytics.
-
Notifications & Preferences
- Manage notification settings (email, push, in-app).
- Dark/light mode support.
-
Analytics
- Charts for FX analytics and a table showing currencies' performance.
- Framework: Vue 3 (Vite)
- State Management: Pinia
- Routing: Vue Router
- UI: TailwindCSS + Bootstrap Icons
- Charts: Chart.js
- API: Axios + Mock REST API (Vercel Functions)
- Deployment: Vercel
- Testing: Vitest + Cypress
Clone the repository
git clone https://github.com/isonguyom/borderless.git
cd borderlessnpm installnpm run devnpx json-server --watch db.json --port 4000App runs on: http://localhost:5173
Mock API runs on: http://localhost:4000 (via JSON-server)
npm run buildRun Unit Tests with Vitest
npm run test:unitRun End-to-End Tests with Cypress
npm run test:e2e:devThis runs the end-to-end tests against the Vite development server. It is much faster than the production build.
But it's still recommended to test the production build with test:e2e before deploying (e.g. in CI environments):
npm run build
npm run test:e2eLint with ESLint
npm run lint