DesiHub Tech Stack 2025: Building a Production-Ready Banking Platform with Go, Next.js, and Microservices
Deep dive into DesiHub's complete technology stack for building a scalable banking application serving 5,000+ daily users. Learn our architectural decisions, cost breakdowns ($300/month infrastructure), developer hardware specs, and why we chose Go + PostgreSQL + Next.js over alternatives. Includes microservices design, CI/CD pipelines, security implementation, and scaling from MVP to 500K users.
DesiHub Tech Stack 2025: Building a Modern Banking Platform
Published: November 20, 2025
We're excited to share DesiHub's complete technology stack as we embark on building a robust, scalable banking application designed to serve 5,000+ daily users with millions of requests. This article outlines our architectural decisions, tooling choices, and the reasoning behind them.
Executive Summary
DesiHub is building a modern banking platform with microservices architecture, focusing on security, scalability, and cost-effectiveness. Our stack leverages battle-tested open-source technologies combined with strategic paid services where they provide clear value.
Target Metrics:
- 5,000+ daily active users
- Millions of API requests per day
- 99.9% uptime SLA
- Sub-200ms API response times
- Bank-grade security and compliance
Our Technology Decisions
Backend Architecture: Go + Microservices
We chose Golang as our primary backend language for several critical reasons:
Why Go?
- Performance: Near C++ speeds with garbage collection
- Concurrency: Native goroutines handle thousands of concurrent requests efficiently
- Memory footprint: Significantly lower than Java or Node.js
- Deployment: Single binary deployment simplifies operations
- Banking industry adoption: Used by Monzo, Nubank, and American Express
Core Backend Stack:
Framework: Gin (HTTP routing & middleware)
ORM: GORM (PostgreSQL interactions)
Auth: golang-jwt/jwt + go-guardian
Authorization: Casbin (RBAC engine)
Validation: go-playground/validator
Why Gin over alternatives? Gin provides the perfect balance of performance (40x faster than Martini) and developer experience. It's production-proven at companies like Xiaomi and Tencent.
Frontend: Next.js 14+ with App Router
Frontend Stack:
Framework: Next.js 14 (React Server Components)
State Management: Simple Store + TanStack Query (React Query)
Styling: Tailwind CSS + Shadcn/ui
Forms: React Hook Form + Zod validation
Authentication: NextAuth.js
Why This Combination?
Next.js gives us:
- Server-side rendering for better SEO and initial load times
- API routes for backend-for-frontend (BFF) pattern
- Automatic code splitting and optimization
- Built-in image optimization
TanStack Query eliminates complex state management for server data:
- Automatic caching and background refetching
- Optimistic updates for better UX
- Reduced boilerplate compared to Redux/Redux-Saga
Shadcn/ui provides:
- Copy-paste components (you own the code)
- Built on Radix UI primitives (accessibility built-in)
- Fully customizable with Tailwind
Database Architecture
Primary Database: PostgreSQL 16
PostgreSQL is our single source of truth. Why PostgreSQL?
- ACID compliance: Critical for financial transactions
- JSON support: Flexible schema where needed
- Performance: Excellent query optimization
- Reliability: 20+ years of production hardening
- Cost: Open source with commercial support available
Configuration Strategy:
- Master-replica setup for read scaling
- Connection pooling via pgBouncer
- Partitioning for large tables (transactions, audit logs)
Caching Layer: Redis
Redis handles:
- Session storage
- API response caching
- Rate limiting counters
- Real-time leaderboards/analytics
- Pub/Sub for real-time notifications
Alternative Considered: MongoDB
We chose PostgreSQL over MongoDB because:
- Financial data needs strong consistency
- ACID transactions are non-negotiable
- PostgreSQL's JSON support gives us flexibility where needed
- Lower operational complexity (one database to master)
Message Queue: RabbitMQ
For asynchronous processing and microservice communication:
Use Cases:
- Email/SMS notifications
- Transaction processing pipelines
- Audit log generation
- Report generation
- Webhook dispatching
Why RabbitMQ over Kafka?
- Lower operational overhead
- Better for traditional queuing patterns
- Sufficient throughput for our scale (5K users/day)
- We'll migrate to Kafka if we exceed 100K+ messages/second
Payment Integration
Primary Gateway: Stripe
- Industry-leading developer experience
- Comprehensive API documentation
- Strong fraud protection
- PCI compliance handled
- Cost: 2.9% + $0.30 per transaction
Regional Alternatives:
- Paystack: African markets (1.5% + ₦100 local cards)
- Flutterwave: Multi-gateway redundancy
We're implementing a payment gateway abstraction layer to support multiple providers and easy switching.
Microservices Architecture
Our services are organized by domain:
├── auth-service (Authentication & JWT)
├── user-service (User management & KYC)
├── account-service (Bank accounts & balances)
├── transaction-service (Payments & transfers)
├── notification-service (Email, SMS, Push)
├── audit-service (Logging & compliance)
├── analytics-service (Reporting & insights)
└── api-gateway (Routing & rate limiting)
Communication Patterns:
- Synchronous: REST APIs (Gin HTTP)
- Asynchronous: RabbitMQ (event-driven)
- Real-time: WebSockets for notifications
Infrastructure & Hosting
Hosting Provider: Hetzner Cloud
After evaluating AWS, DigitalOcean, Linode, and Hetzner, we chose Hetzner for:
- Price-performance ratio: 40-60% cheaper than AWS/DO
- Included traffic: 20TB/month vs 1-2TB on competitors
- European data centers: GDPR compliance by default
- Predictable pricing: No surprise egress fees
Phase 1 Infrastructure (MVP):
Production Environment:
├── 3x App Servers (4 vCPU, 8GB RAM each) - €46.20/month
├── 1x Database (8 vCPU, 16GB RAM) - €36.26/month
├── 1x Cache/Queue (4 vCPU, 8GB RAM) - €15.40/month
├── 1x Monitoring (2 vCPU, 4GB RAM) - €4.15/month
└── Load Balancer (Nginx on separate VPS) - €4.15/month
Total: ~€110/month (~$120/month)
Staging Environment:
- 1x All-in-one VPS (4 vCPU, 8GB RAM) - €15.40/month
CDN & Security: Cloudflare
- Free tier for MVP (DDoS protection, CDN, SSL)
- Pro plan ($20/month) when we need WAF and image optimization
- R2 storage for file uploads (free egress = massive savings)
DevOps & CI/CD
Version Control: GitHub
- Private repositories for all code
- Branch protection rules
- Required PR reviews (2+ approvers for production)
CI/CD: GitHub Actions
Our pipeline:
Pipeline Stages:
1. Lint & Format Check (golangci-lint, ESLint)
2. Unit Tests (Go: testify, Frontend: Vitest)
3. Integration Tests (Testcontainers)
4. Security Scanning (Trivy, Snyk)
5. Build Docker Images
6. Push to Registry (GitHub Container Registry)
7. Deploy to Staging (automatic)
8. Deploy to Production (manual approval)Cost: 2,000 minutes/month free, ~$10-30/month beyond that.
Containerization: Docker + Docker Compose
Each microservice is containerized with:
- Multi-stage builds (smaller images)
- Non-root user (security)
- Health checks
- Resource limits
Phase 1: Docker Compose for orchestration
Phase 2: Migrate to K3s (lightweight Kubernetes) when we exceed 10 services
Monitoring & Observability
Self-Hosted Grafana Stack (Free + VPS costs)
Monitoring Components:
├── Prometheus (Metrics collection)
├── Grafana (Dashboards & visualization)
├── Loki (Log aggregation)
├── Tempo (Distributed tracing)
└── AlertManager (Alert routing)
Key Metrics We Track:
Application Metrics:
- Request rate, error rate, duration (RED metrics)
- Database query performance
- Cache hit ratios
- Queue depth and processing time
Business Metrics:
- Transaction volume and value
- User sign-ups and activations
- Failed login attempts (security)
- API usage by endpoint
Error Tracking: Sentry
- Free tier: 5,000 errors/month
- Source maps for readable stack traces
- Release tracking for regression detection
- Performance monitoring included
Uptime Monitoring: UptimeRobot
- Free: 50 monitors, 5-minute intervals
- Public status page
- Multi-channel alerting (Slack, email, SMS)
Security Infrastructure
Banking applications demand enterprise-grade security:
Authentication & Authorization:
- JWT tokens with short expiration (15 minutes)
- Refresh token rotation
- Role-Based Access Control (RBAC) via Casbin
- Multi-factor authentication (TOTP)
Data Protection:
- AES-256 encryption at rest
- TLS 1.3 for data in transit
- Bcrypt for password hashing (cost factor: 12)
- PII encryption in database
Security Tools:
├── Let's Encrypt (Free SSL certificates)
├── Cloudflare WAF (Web Application Firewall)
├── Trivy (Container vulnerability scanning)
├── Snyk (Dependency vulnerability scanning)
├── OWASP ZAP (Security testing)
└── HashiCorp Vault (Secrets management)
Compliance:
- PCI DSS requirements through Stripe
- GDPR compliance (EU data residency)
- Audit logging for all financial transactions
- Regular penetration testing (quarterly)
Testing Strategy
Testing Pyramid:
╱╲
╱ ╲
╱ E2E ╲ ~10% (Critical flows)
╱────────╲
╱ ╲
╱ Integration╲ ~30% (API contracts)
╱──────────────╲
╱ ╲
╱ Unit Tests ╲ ~60% (Business logic)
╱────────────────────╲
Backend Testing:
- Unit tests:
testifypackage (80%+ coverage target) - Integration tests: Testcontainers (real DB/Redis)
- Load testing: k6 (simulate 10K concurrent users)
Frontend Testing:
- Unit tests: Vitest + React Testing Library
- E2E tests: Playwright (critical user journeys)
- Visual regression: Percy or Chromatic
Performance Testing:
# k6 load test example
k6 run --vus 1000 --duration 5m load-test.jsWe test for:
- 1,000 concurrent users baseline
- 5,000 concurrent users peak
- 10,000 concurrent users stress test
File Storage Strategy
Cloudflare R2 (S3-compatible)
- $0.015/GB/month storage
- $0 egress fees (huge savings vs S3)
- 10GB free tier
- Global edge network
Use cases:
- User profile pictures
- KYC documents (encrypted)
- Transaction receipts
- Bank statements
- Marketing assets
Alternative evaluated: AWS S3
Why R2 wins: At scale, egress fees on S3 would cost 10x more. R2's free egress is perfect for a customer-facing app.
Communication Services
Email: Resend
- 3,000 emails/month free
- $20/month for 50,000 emails
- Great API, React Email templates
SMS: Twilio
- Pay-as-you-go: $0.0079/SMS (US)
- Varies by country
- OTP, transaction alerts, notifications
Push Notifications: Firebase Cloud Messaging
- Completely free
- Cross-platform (iOS, Android, Web)
- Reliable delivery
In-App Notifications:
- Custom WebSocket server (Go)
- Redis pub/sub for real-time delivery
- Fallback to polling for offline users
Development Tools for the Team
Code Editors:
- VS Code (Free) - Recommended for frontend
- GoLand ($89/year first year) - Recommended for backend
API Development:
- Bruno (Free, open source) - Primary
- Postman (Free tier) - Alternative
Database Management:
- DBeaver (Free) - Universal SQL client
- TablePlus ($89 one-time) - Beautiful UI, optional
Collaboration:
- Linear ($8/user/month) - Project management
- Notion
(Free for teams <10)- Documentation - Slack (Free tier) - Team communication
Developer Desktop Specifications
We're investing in powerful workstations to maximize productivity. Here are our recommended specs:
Option 1: High-Performance Desktop (Recommended)
Purpose: Backend development, Docker containers, database work
CPU: AMD Ryzen 9 7950X (16-core, 32-thread)
or Intel i9-13900K (24-core, 32-thread)
RAM: 64GB DDR5 (32GB minimum, 64GB recommended)
- Running Docker containers is RAM-intensive
- Database queries and caching simulations
Storage: 1TB NVMe SSD (Gen 4) - Primary
+ 2TB SSD - Secondary for projects/VMs
GPU: NVIDIA RTX 3060 (12GB) or RTX 4060
- Not for gaming, but for:
* Multiple 4K monitors
* ML/AI experimentation
* Video encoding for demos
Motherboard: Compatible with CPU (B650 for AMD, B760 for Intel)
PSU: 750W 80+ Gold certified
Cooling: AIO Liquid Cooler (240mm minimum)
Case: Mid-tower with good airflow
Cost: $1,800 - $2,500
Performance Benefits:
- Compile large Go projects in seconds
- Run entire microservices stack locally
- Multiple Docker containers without slowdown
- VM snapshots for testing
- Smooth IDE experience with large codebases
Option 2: Mid-Range Desktop (Budget-Conscious)
Purpose: Frontend development, general backend work
CPU: AMD Ryzen 7 7700X (8-core, 16-thread)
or Intel i7-13700K (16-core, 24-thread)
RAM: 32GB DDR5 (minimum for comfortable development)
Storage: 512GB NVMe SSD (Gen 4) - Primary
+ 1TB SSD - Secondary
GPU: NVIDIA GTX 1660 Super or RTX 3050
- Dual monitor support
- Basic GPU tasks
Motherboard: B650 (AMD) or B660 (Intel)
PSU: 650W 80+ Gold
Cooling: Tower Air Cooler (Noctua NH-D15 or similar)
Cost: $1,200 - $1,600
Option 3: Laptop for Remote/Hybrid Workers
For team members who need portability:
Recommended Models:
MacBook Pro 16" M3 Pro:
- M3 Pro chip (12-core CPU)
- 36GB unified memory
- 512GB SSD
- Cost: ~$2,900
- Best for: Mac-preferring developers
Dell XPS 15 or Lenovo ThinkPad P16:
- Intel i9-13900H or AMD Ryzen 9 7945HX
- 64GB RAM
- 1TB NVMe SSD
- NVIDIA RTX 4060 Mobile
- Cost: ~$2,500 - $3,200
- Best for: Windows/Linux developers
Framework Laptop 16:
- AMD Ryzen 9 7940HS
- 64GB RAM
- Modular/repairable design
- Cost: ~$2,000 - $2,500
- Best for: Linux enthusiasts, right-to-repair advocates
Peripheral Recommendations
Monitor Setup:
├── Primary: 32" 4K monitor (Dell U3223QE) - $650
├── Secondary: 27" 1440p monitor - $300
└── Total: Dual monitor setup - ~$950
Keyboard: Mechanical keyboard
├── Keychron K8 Pro - $110
├── Ducky One 3 - $150
└── Leopold FC900R - $130
Mouse: Logitech MX Master 3S - $100
Headset: Sony WH-1000XM5 or Bose 700 - $350
Desk: Standing desk (Flexispot E7) - $450
Chair: Herman Miller Aeron or Steelcase Leap - $1,200
Total Investment Per Developer:
- Desktop: $1,800 - $2,500
- Monitors: $950
- Peripherals: $600
- Furniture: $1,650
- Total: $5,000 - $5,700 per developer
For a team of 10: $50,000 - $57,000 one-time investment
Why This Investment Matters:
- Productivity: 30-second compile times vs 5-second = 200+ hours saved per year per developer
- Morale: Developers frustrated with slow machines are less productive and more likely to leave
- Local Testing: Run entire production-like environment on local machine
- Longevity: These machines will last 5+ years without upgrades
Cost Breakdown
Monthly Recurring Costs (Phase 1):
Infrastructure:
├── Hetzner VPS (5 servers) €110.16/month ($120)
├── Cloudflare Pro $20.00/month
├── Domain name $1.00/month ($12/year)
├── File Storage (R2 - 100GB) $1.50/month
├── Email (Resend) $0.00/month (free tier)
├── Monitoring (self-hosted) $0.00/month
└── Backups (Backblaze B2) $2.00/month
────────────────────────────────────────────────
Infrastructure Total: ~$145/month
Team Tools:
├── Linear (10 users) $80/month
├── Slack (free tier) $0/month
├── GitHub (free tier) $0/month
├── Notion (free tier) $0/month
└── GoLand licenses (optional) $74/month ($890/year)
────────────────────────────────────────────────
Tools Total: ~$80-154/month
Variable Costs:
├── SMS (Twilio) $20-100/month
├── Payment processing (Stripe) 2.9% + $0.30/transaction
└── CI/CD overage $10-30/month
────────────────────────────────────────────────
Variable Total: ~$30-130/month
────────────────────────────────────────────────
TOTAL MONTHLY: $255-429/month ($3,000-5,000/year)
One-Time Costs:
Development Hardware:
├── 10x Developer Workstations $50,000-57,000
├── 2x Testing Devices (mobile) $2,000
└── Network Equipment $1,000
────────────────────────────────────────────────
Hardware Total: ~$53,000-60,000
Optional Tools:
├── TablePlus licenses (10) $890
└── Design tools (Figma) $180/year
────────────────────────────────────────────────
Optional Total: ~$1,070
Annual Cost Projection:
Year 1:
├── Infrastructure & Tools $3,000-5,000
├── Hardware (one-time) $53,000-60,000
├── Variable costs $5,000-15,000
────────────────────────────────────────────────
Total Year 1: $61,000-80,000
Year 2+ (no hardware):
├── Infrastructure & Tools $5,000-8,000
├── Variable costs $10,000-30,000
────────────────────────────────────────────────
Total Year 2+: $15,000-38,000/year
Scaling Plan
Phase 1: MVP (0-5K users) - Current Plan
- Single region deployment
- Manual scaling
- Basic monitoring
- Cost: ~$300/month
Phase 2: Growth (5K-50K users) - Months 6-18
- Multi-region deployment (US + EU)
- Auto-scaling groups
- Advanced monitoring with Grafana Cloud
- Kubernetes migration
- Cost: ~$1,000-2,000/month
Phase 3: Scale (50K-500K users) - Year 2+
- Multi-region active-active
- Database sharding
- Kafka for event streaming
- Dedicated security team
- Cost: ~$5,000-10,000/month
Why This Stack Will Succeed
1. Battle-Tested Technologies Every tool in our stack is production-proven by companies at our scale and beyond:
- Go: Google, Uber, Dropbox
- PostgreSQL: Instagram, Spotify, Netflix
- Redis: Twitter, GitHub, Stack Overflow
- Next.js: TikTok, Twitch, Hulu
2. Right-Sized for Our Scale We're not over-engineering for problems we don't have yet:
- No Kubernetes until we need it (Phase 2)
- No Kafka until we exceed RabbitMQ's capabilities
- No microservices for simple CRUD operations
3. Cost-Effective
- $300/month infrastructure vs $3,000+ with AWS
- Open-source first approach
- Pay for what we use (variable costs only)
4. Developer Experience
- Fast compile times (Go)
- Hot reload in development (Next.js)
- Type safety across the stack (TypeScript)
- Excellent debugging tools
5. Security-First
- Bank-grade encryption
- Regular security audits
- Compliance built-in
- Defense in depth
Open Source Contributions
We believe in giving back to the community. We'll be open-sourcing:
- Internal developer tools
- Testing utilities
- Deployment scripts
- Monitoring dashboards
- Performance benchmarks
Follow our GitHub: github.com/desishub (example)
Team Roles & Responsibilities
Our 10-person team structure:
├── Backend Team (4 developers)
│ ├── Microservices architecture
│ ├── API development
│ ├── Database optimization
│ └── Integration with external services
│
├── Frontend Team (2 developers)
│ ├── Next.js application
│ ├── UI component library
│ ├── Mobile-responsive design
│ └── Performance optimization
│
├── DevOps Engineer (1)
│ ├── Infrastructure management
│ ├── CI/CD pipelines
│ ├── Monitoring & alerting
│ └── Security hardening
│
├── QA Engineer (1)
│ ├── Test automation
│ ├── Load testing
│ ├── Security testing
│ └── Regression testing
│
├── Full-Stack Developer (1)
│ ├── Cross-team support
│ ├── Proof of concepts
│ ├── Integration work
│ └── Performance optimization
│
└── Product Manager (1)
├── Roadmap planning
├── Requirements gathering
├── Stakeholder management
└── Release coordination
Timeline & Milestones
Q4 2024 (Current):
- ✅ Tech stack finalized
- ✅ Hardware procurement started
- 🚧 Development environment setup
- 🚧 CI/CD pipeline configuration
Q1 2025:
- Core authentication service
- User management service
- Basic account operations
- MVP frontend
- Load testing infrastructure
Q2 2025:
- Transaction processing
- Payment integration
- Notification system
- Security audit
- Beta launch (100 users)
Q3 2025:
- Analytics dashboard
- Advanced RBAC
- Mobile optimization
- Performance optimization
- Public launch (5,000 users)
Q4 2025:
- Additional payment methods
- International expansion
- Advanced reporting
- Scale to 20,000 users
Success Metrics
We'll measure our success by:
Technical Metrics:
- API response time:
<200ms (p95) - Uptime: >99.9%
- Error rate:
<0.1% - Build time:
<5 minutes - Deployment frequency: >10/week
Business Metrics:
- User acquisition cost
- Transaction volume
- Customer satisfaction (NPS)
- Time to market for features
- Developer productivity
Community Engagement
We're building in public and want your feedback:
Follow our journey:
- Twitter/X:
@DesiHubTech - Blog:
blog.desishub.com - YouTube: Weekly dev vlogs
- Discord:
discord.gg/desishub
Open positions:
We're hiring! Check careers.desishub.com for:
- Senior Go Backend Engineer
- Senior Frontend Engineer (Next.js)
- DevOps Engineer
- Security Engineer
Conclusion
Building a banking platform is ambitious, but with the right tools, team, and mindset, we're confident in our approach. This stack gives us:
✅ Performance: Handle millions of requests efficiently
✅ Security: Bank-grade protection for user data
✅ Scalability: Grow from 5K to 500K+ users
✅ Cost-efficiency: $300/month instead of $3,000+
✅ Developer experience: Modern tools that developers love
We're excited to build DesiHub and share our learnings with the community. Stay tuned for deep-dive technical articles on each component of our stack.
Questions? Drop them in the comments or reach out on Twitter @DesiHubTech
Want to contribute? We're hiring and welcoming open-source contributors!
Written by the DesiHub Engineering Team
Last updated: November 20, 2025
Additional Resources
Documentation:
Learning Resources:
Contact:
- Email:
engineering@desishub.com - GitHub:
github.com/desishub - LinkedIn:
linkedin.com/company/desishub
Appendix: Quick Reference
Environment Variables Template
# Application
APP_ENV=production
APP_PORT=8080
APP_SECRET_KEY=your-secret-key-here
# Database
DB_HOST=localhost
DB_PORT=5432
DB_USER=desishub
DB_PASSWORD=secure-password
DB_NAME=desishub_prod
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=secure-password
# JWT
JWT_SECRET=your-jwt-secret
JWT_EXPIRY=15m
REFRESH_TOKEN_EXPIRY=7d
# Stripe
STRIPE_SECRET_KEY=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...
# Cloudflare R2
R2_ACCOUNT_ID=your-account-id
R2_ACCESS_KEY_ID=your-access-key
R2_SECRET_ACCESS_KEY=your-secret-key
R2_BUCKET_NAME=desishub-files
# Email
RESEND_API_KEY=re_...
# SMS
TWILIO_ACCOUNT_SID=AC...
TWILIO_AUTH_TOKEN=...
TWILIO_PHONE_NUMBER=+1234567890Docker Compose Quick Start
version: "3.8"
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: desishub_dev
POSTGRES_USER: desishub
POSTGRES_PASSWORD: devpassword
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
command: redis-server --requirepass devpassword
rabbitmq:
image: rabbitmq:3-management-alpine
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_USER: desishub
RABBITMQ_DEFAULT_PASS: devpassword
volumes:
postgres_data:Load Test Script (k6)
import http from "k6/http";
import { check, sleep } from "k6";
export const options = {
stages: [
{ duration: "2m", target: 100 },
{ duration: "5m", target: 1000 },
{ duration: "2m", target: 0 },
],
thresholds: {
http_req_duration: ["p(95)<200"],
http_req_failed: ["rate<0.01"],
},
};
export default function () {
const res = http.get("https://api.desishub.com/health");
check(res, {
"status is 200": (r) => r.status === 200,
"response time < 200ms": (r) => r.timings.duration < 200,
});
sleep(1);
}Thank you for reading! We're excited to build DesiHub and revolutionize banking together. 🚀

