Back to Projects
Fintech Platform

Gcbuying

300K+ users trading gift cards & crypto for Nigerian Naira. Built from scratch with Laravel, then migrated to microservices.

3 min read300K+ Users
300K+ active usersBuilt from scratchMigrated to microservicesReal-time transaction processing

Tech Stack

LaravelNestJSReactNext.jsPostgreSQLRedisDockerKubernetes

Overview

Gcbuying is a leading fintech platform in Nigeria that enables users to trade gift cards and cryptocurrency for Nigerian Naira. The platform serves over 300,000 users and processes thousands of transactions daily.

Building From Scratch

I built Gcbuying from the ground up using Laravel. The initial architecture was designed to get the product to market quickly while maintaining code quality:

  • Laravel Backend: RESTful API with clean architecture
  • MySQL Database: Optimized schema for transaction processing
  • Queue System: Laravel Queues for async processing
  • Payment Integration: Multiple payment gateway integrations

The Laravel monolith served us well during the early growth phase, handling the first 50,000+ users efficiently.

The Challenge

As the user base grew rapidly beyond 100K users, the monolithic architecture started showing limitations:

  • Scalability issues: The monolithic architecture couldn't handle the increasing load
  • Slow deployments: Changes required deploying the entire application
  • Database bottlenecks: Single database becoming a performance bottleneck
  • Limited fault tolerance: A single failure could bring down the entire system

Migration to Microservices

When it became clear we needed to scale, I led the migration from Laravel monolith to a microservices architecture:

New Architecture

plaintext
├── Kubernetes Ingress (API Gateway)
├── Auth Service (NestJS)
├── User Service (NestJS)
├── Trading Service (NestJS)
├── Wallet Service (NestJS)
├── Notification Service (NestJS)
└── Admin Service (NestJS)

Key Technical Decisions

  1. NestJS for Backend Services: Chose NestJS for its TypeScript support, modular architecture, and excellent documentation.

  2. Event-Driven Communication: Implemented RabbitMQ for async communication between services.

  3. Database Per Service: Each microservice owns its data, ensuring loose coupling.

  4. Kubernetes Ingress: Used Ingress controller for routing, load balancing, and SSL termination.

Zero-Downtime Migration

The migration was executed without any service interruption:

  • Implemented strangler fig pattern
  • Gradual traffic shifting between old and new services
  • Feature flags for controlled rollout
  • Comprehensive monitoring during transition

Real-time Transaction Processing

Built a real-time transaction processing system that:

  • Validates transactions in under 100ms
  • Supports concurrent processing of multiple transactions
  • Provides instant notifications to users
  • Maintains audit logs for compliance

Results

The platform evolution delivered significant improvements:

  • 300K+ users served on the platform
  • 99.9% uptime achieved post-migration
  • 5x faster API response times
  • Independent scaling of high-load services
  • Faster deployments with service-level releases

Technologies Used

  • Initial Stack: Laravel, MySQL, Redis
  • Current Backend: NestJS, Node.js, TypeScript
  • Frontend: React, Next.js
  • Database: PostgreSQL, Redis
  • Message Queue: RabbitMQ
  • Infrastructure: Docker, Kubernetes, AWS
  • Monitoring: Prometheus, Grafana