Skip to main content
Back to Blog
Architecture

Building a Fintech Platform Solo: 185 Tables, 69 APIs, 7 Systems

April 20, 202614 min read
Next.jsSupabaseStripeArchitectureDatabase DesignFinTech

Building a Fintech Platform Solo: 185 Tables, 69 APIs, 7 Systems

Most engineers work on one service at a time. I built an entire ecosystem.

The Nexural platform started as a simple idea: a dashboard for my trading community. It became a full fintech platform with 185 database tables, 69 API endpoints, Stripe billing, an AI-powered Discord bot, a research engine, a newsletter studio, and a real-time alert system.

I designed and built all of it. Here's what I learned.

The Scope

Seven interconnected systems:

  1. Trading Dashboard — real-time market data, charts, portfolio tracking
  2. Discord AI Engine — 30+ commands, GPT-4o integration, auto-moderation
  3. Research Engine — 71+ metrics, strategy analysis, CSV import
  4. Alert System — NinjaTrader 8 integration, .NET backend, real-time notifications
  5. Newsletter Studio — automated content generation and distribution
  6. Strategy Tracker — performance monitoring across trading systems
  7. Automation Suite — 61 test suites, CI/CD, quality gates

Database Design at Scale

185 tables sounds intimidating. The key was phased design:

  • Phase 1 (Core): Users, auth, subscriptions — 20 tables
  • Phase 2 (Trading): Instruments, positions, signals — 35 tables
  • Phase 3 (Community): Discord integration, moderation logs — 25 tables
  • Phase 4 (Analytics): Metrics, reports, telemetry — 30 tables
  • Phase 5-7: Research, alerts, newsletter — 75 tables

Each phase had its own migration, its own test suite, and its own rollback plan. I never modified more than one domain at a time.

Schema Decisions That Mattered

Normalized where it counts: User → Subscription → Plan is fully normalized. No denormalization shortcuts that would create billing bugs.

Denormalized where speed matters: Trading dashboards query denormalized views. A trader doesn't care about 3NF — they care about sub-50ms load times.

Row-level security everywhere: Supabase RLS policies on every table. A user can never see another user's data, even if the API has a bug.

API Architecture

69 endpoints following consistent patterns:

GET    /api/v1/instruments          — list with pagination
GET    /api/v1/instruments/:id      — detail
POST   /api/v1/instruments          — create (admin)
PATCH  /api/v1/instruments/:id      — update (admin)
DELETE /api/v1/instruments/:id      — soft delete (admin)

Every endpoint has:

  • Zod schema validation on input
  • Rate limiting (per-user, per-endpoint)
  • Structured error responses
  • Full test coverage

Stripe Integration

Billing is where fintech gets real. I implemented:

  • Subscription lifecycle (create, upgrade, downgrade, cancel)
  • Webhook handling for payment events
  • Dunning for failed payments
  • Prorated billing on plan changes
  • Invoice generation

The Stripe webhook handler alone is 400 lines of carefully tested code. Payment bugs are the kind that lose customers permanently.

What I'd Do Differently

  1. Start with a monorepo. I split services too early. A monorepo with shared types would have saved weeks of type synchronization.
  2. API versioning from day one. I added /v1/ after breaking two integrations. Should have been there from the start.
  3. Less custom, more conventions. I built custom auth middleware when NextAuth would have been fine for v1.

The Real Lesson

Building a platform solo teaches you something that team environments don't: every decision compounds. Good architecture decisions save you hundreds of hours later. Bad ones haunt you at 2am.

The Nexural ecosystem works because I spent more time designing than coding. The schema document was 40 pages before I wrote the first migration.

If you're building something ambitious alone, invest in architecture first. The code is the easy part.

Want to see this in action?

Check out the projects and case studies behind these articles.