Gcbuying
300K+ users trading gift cards & crypto for Nigerian Naira. Built from scratch with Laravel, then migrated to microservices.
Tech Stack
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
├── 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
-
NestJS for Backend Services: Chose NestJS for its TypeScript support, modular architecture, and excellent documentation.
-
Event-Driven Communication: Implemented RabbitMQ for async communication between services.
-
Database Per Service: Each microservice owns its data, ensuring loose coupling.
-
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