SaaS Migration Proposal: Bubble to Modern Web Stack
Prepared for: Jumper Media
By: Maulana Shalihin | Senior Software Engineer
Location: Indonesia - GMT+8 (Operating 100% Async-First)
Links: GitHub | Portfolio
1. Introduction & Background
Hi Jumper Media team, I’m Maulana, a Senior Software Engineer with over 11 years of experience. I specialize in Go, Node.js, and cloud-native deployments.
I know you target hiring regions from Eastern Europe—but I’m based in GMT+8 and work 100% async-first. I’ve led complex SaaS rebuilds end-to-end with zero micromanagement. Let me show you how.
2. Proof of Work: Architecting High-Performance Systems
Every project below represents a production-ready system shipped with proper architecture, security, and automated deployment pipelines.
The Core Engine: Laju.dev (Laju-Go)
I engineered my own high-performance SaaS boilerplate to solve the bloat of standard frameworks.
- Stack: Go Fiber / HyperExpress, Svelte 5, Inertia.js 3 + SQLite.
- Performance: Delivers 258k req/sec (11x faster than standard Express, 3,232x faster than Laravel).
- Features: Built-in multi-agent AI workflows, automated testing, and CI/CD pipelines out of the box.
Production SaaS Portfolio
- Antre.in (B2B Healthcare SaaS): A live, cloud-based queue management SaaS serving medical clinics. Features complex booking logic, real-time WebSockets, and strict multi-tenant data isolation.
- KlikAja (Analytics & Link Management): A high-concurrency URL shortener with deep analytics, A/B testing rotation, and Redis-backed caching.
- DripSender & DripForm: Comprehensive business automation platforms managing CRM, Webhooks, WhatsApp API routing, and event-driven marketing workflows.
- TapSite.ai & SlugPost: AI-powered, mobile-first publishing platforms focusing on frictionless UX and instant content delivery.
3. Rebuild Experience: Legacy Migration to Modern Stack
You asked for a rebuild project. Migrating out of Bubble is tough, but I have executed migrations from much older, deeply entangled systems—specifically, migrating a monolithic Joomla 3 framework (circa 2010) into a modern Go stack (Laju-Go).
What was broken?
- Database Spaghetti: The legacy system relied on an EAV (Entity-Attribute-Value) anti-pattern. Everything was stored in massive
_contenttables, causing severe N+1 query bottlenecks that choked the server during peak traffic. - Visual/Plugin Bloat: Business logic was scattered across 30+ outdated plugins, making debugging impossible and security vulnerabilities a constant threat.
- Deployment Nightmare: No CI/CD existed. Deployments were manual FTP uploads, leading to frequent production downtime.
How I improved it:
- Data Normalization: I reverse-engineered the legacy database and migrated it into a strict, normalized Relational Schema (SQLite/PostgreSQL) using Go-based
Goosemigrations. - API Rewrite: I stripped away the visual plugins and rewrote the core business logic into fast, secure Go RESTful APIs, dropping the TTFB (Time to First Byte) from 2.5 seconds to sub-20 milliseconds.
- DevOps Automation: I containerized the new application using Docker and orchestrated a GitHub Actions pipeline for automated testing and zero-downtime deployments.
4. Migration Strategy: Bubble to Laju-Go (Modern Stack)
Migrating a live SaaS from Bubble requires precision. We cannot do a “Big Bang” rewrite. Using my Laju-Go framework, here is my pragmatic, step-by-step approach to migrating your Bubble app to a high-performance Go backend without breaking production:
Phase 1: Database Extraction & Normalization
Bubble abstracts the database, which creates technical debt. We will move this to Laju-Go’s optimized SQLite3 layer.
- Extraction: Extract the Bubble data (via CSV export for historical data and Webhooks for live delta-syncs).
- Schema Design: Use Goose inside the
migrations/directory to write strict, normalized relational database schemas. - Data Seeding: Write Go scripts utilizing the Squirrel query builder in the
app/repositories/layer to safely sanitize and insert the Bubble data into the new SQL database.
Phase 2: Frontend Cloning with 100% UI/UX Parity (Svelte 5 + Inertia.js)
- I will clone your current Bubble pages pixel-perfect into the new stack. Users will see zero difference in the UI/UX—they won’t even know the system has changed.
- Utilizing AI-augmented workflows, I will rewrite the proprietary Bubble UI into clean, maintainable components inside
frontend/src/components/andfrontend/src/pages/using Svelte 5. - The Game Changer: Instead of writing complex API fetchers on the frontend, I will use Inertia.js 3. This acts as a SPA bridge, allowing the Go Fiber backend to pass data directly to Svelte pages seamlessly, drastically reducing frontend development time.
- Optional: If you want a fresh design for certain aspects, just let me know—we can iterate on those pages separately.
Phase 3: High-Performance Go APIs + URL Preservation
- I will translate Bubble’s “Visual Workflows” into a strict layered architecture in Go.
- Business logic goes into
app/services/, database operations intoapp/repositories/, and the HTTP routing intoapp/handlers/. - All existing URLs will remain alive. Every link that’s currently scattered across the web (social media, emails, bookmarks) will continue working—no broken links, no lost traffic.
- The Go Fiber v2 framework will instantly solve the rate-limiting and performance bottlenecks native to Bubble’s backend, delivering fasthttp-level speeds (250k+ req/sec).
Phase 4: The “Strangler Fig” Deployment
- I will deploy the new Laju-Go backend via Docker and CI/CD pipelines.
- We will use an API Gateway to route traffic incrementally. We test the new routes internally, ensure 100% feature parity, and then slowly shift live user traffic from Bubble to the new Go stack. Once stable, we turn Bubble off forever.
I build fast, I take ownership, and I ship production-ready code. Let’s discuss your current Bubble schema and how we can scale Jumper Media to the next level.