Working at a fintech company changes how you think about code. Every bug could cost someone real money. Every slow endpoint could block a payment. I learned this firsthand while building the Unbanked Dashboard.

The Project

Unbanked was a crypto-banking hybrid. Users could hold both dollars and cryptocurrency in one place. They could spend crypto with a debit card. They could earn yield on their holdings. The dashboard was where all of this happened.

I joined the team to build the customer-facing application. The frontend used VueJS. The backend ran on Laravel. My job was to make them work together seamlessly.

Building with VueJS

The dashboard had dozens of views. Account overview, transaction history, card management, KYC forms, crypto trading. Each needed its own set of components.

I built reusable components for everything. Form inputs with validation. Loading states. Error handling. Modal dialogs. The goal was consistency. When a user clicked a button, it should always feel the same.

State management was tricky. A user’s balance could change from multiple sources. A deposit arrives. A transfer completes. The staking rewards update. I used Vuex to keep everything in sync. When one thing changed, the whole app knew about it.

Laravel on the Backend

The Laravel API handled all the heavy lifting. Authentication. Transaction processing. External service integrations. It was a well-structured codebase with clear separation of concerns.

I worked on the API endpoints that powered the frontend. Creating new routes. Validating requests. Formatting responses. Laravel made this straightforward with its resource controllers and form requests.

The real complexity was in the service layer. Business logic for financial operations lived there. Every operation needed proper validation and error handling.

Money Movement Features

The core features were deposits, transfers, and withdrawals. Simple concepts, complex implementations.

For deposits, users could fund their accounts via bank transfer or card. Each method had different processing times and limits. The UI needed to communicate this clearly.

Transfers happened instantly within the platform. But we had to check balances, apply limits, and log everything. A failed transfer at the wrong moment could lock funds or create accounting nightmares.

Withdrawals were the most sensitive. Money leaving the platform meant external API calls, compliance checks, and careful error handling. If something failed mid-process, we needed clean rollback mechanisms.

The KYC Flow

Before accessing full features, users had to verify their identity. This was the KYC (Know Your Customer) flow. It collected personal information, government IDs, and selfies.

I built the multi-step form wizard for this process. Each step validated before moving forward. Users could save progress and return later. The experience had to be smooth because abandonment meant lost customers.

On the backend, the documents went to third-party verification services. We polled for results and updated user status accordingly. Once verified, features like debit cards became available.

Banking Integrations

The platform worked with multiple banking partners. PrimeTrust and Evolve provided checking account functionality. Plaid connected external bank accounts.

Each integration had its own API, its own quirks, its own error cases. PrimeTrust handled custody. Evolve enabled ACH transfers. Plaid pulled account data for linking.

I built the frontend flows for account opening. Forms adapted based on which banking partner was being used. Error messages mapped from API responses to human-readable text.

The Plaid integration was interesting. Their Link SDK opened a secure modal for bank login. Once connected, we received tokens to access account data. The UX had to handle success, failure, and the many states in between.

Crypto Features

Beyond traditional banking, users could buy crypto with credit cards. The UI showed real-time prices. Users selected amounts and confirmed purchases. On the backend, we hit exchange APIs and processed payments.

Staking let users earn rewards on certain tokens. I built the interface showing available pools, current rates, and projected earnings. Users could stake and unstake with a few clicks.

Yield vaults were similar but more complex. Different strategies, different risks. The UI needed to explain these differences without overwhelming users.

The Challenges

Handling real money amplifies every problem. A rounding error becomes a legal issue. A race condition becomes a double-spend. Testing had to be thorough.

Complex state management was constant. User balances, transaction statuses, verification states, feature flags. Everything connected to everything else.

Multiple integrations meant multiple failure modes. When PrimeTrust was slow, the app had to handle it gracefully. When Plaid returned an error, we needed to explain what went wrong.

I learned to build defensively. Validate everything. Log everything. Handle every edge case. When you are moving money, you cannot afford to skip steps.

What I Learned

This project taught me how real fintech works. The regulations, the integrations, the attention to detail. Code review became security review. Testing became verification.

Building financial software is not about fancy features. It is about reliability. Users trust you with their money. That trust comes from an app that works every single time.


If you’re building something similar or want to discuss plugin architectures, I’d love to connect.

Back to Projects