Bluumo: Building a Production-Grade Wellness Marketplace from Scratch
Role: Solo Full-Stack Developer & UX Designer
Timeline: November 2025 - February 2026 (~8 weeks active development)
Year: 2025-2026
Client: Bluumo (Finnish wellness services startup, founding team member)
Status: Live on web, native apps in beta
[GIF of booking flow] Real-time availability checking with instant confirmation - no phone calls needed, fully automated matching.
THE HOOK
Built a 146,000-line, production-grade wellness marketplace from scratch as a solo developer in 8 weeks — 96 screens, 33 serverless functions, 2 active payment providers (with 3 more ready), 7 languages, a corporate B2B portal, an AI concierge, and in-app voice calling — replacing an expensive WordPress marketing site with a platform that actually runs a business.
THE CHALLENGE
Bluumo connects customers with wellness professionals (massage therapists, beauty specialists, physiotherapists) who deliver services directly to customers' homes. The concept worked. The infrastructure didn't.
What existed:
An expensive WordPress site that served as a brochure — zero operational capability
The CEO manually fielding every phone call, matching providers, scheduling appointments, and creating invoices by hand
No mobile experience in a market where 90%+ of bookings happen on phones
Every new customer meant more manual work, making growth the enemy of the business
What was needed:
A real two-sided marketplace with automated matching, scheduling, and payments
Native iOS and Android apps alongside a responsive web platform
A corporate B2B portal for companies booking wellness services for employees
Admin tools for platform oversight without constant manual intervention
Multilingual support for the Finnish market (Finnish, Swedish, English — plus expansion-ready)
A platform that could scale without scaling headcount
WHAT I BUILT
Platform Scale
Metric Count Total screens/pages 96 Reusable components 116 Serverless edge functions 33 Service/utility modules 82+ Custom React hooks 8 Lines of TypeScript 146,000+ Translation keys 2,660+ Languages supported 7 Payment integrations 5 (2 active, 3 ready) Automated email types 12 Git commits 2,040
For Customers (11+ screens)
Service browsing with category, price, and duration filtering
Provider discovery with profiles, reviews, ratings, and comparison tools
Location-based search with interactive map view
Autocomplete with synonyms, search history, and saved searches
Real-time availability checking with instant booking confirmation
Multi-method checkout: bank transfers, cards, MobilePay, wellness benefit cards (Edenred), and invoice billing
KELA reimbursement support (Finnish national health insurance)
Recurring booking management with frequency controls
Gift card purchasing with PDF generation and email delivery
Referral program with automated reward distribution
Bluumo Plus subscription tier with exclusive deals
Coupon and promotion system
In-app voice calling to providers via Agora
"Helmi" — an AI concierge powered by Claude for booking assistance and customer support
For Service Providers (13+ screens)
Complete onboarding with document-based verification workflow
Profile management with services, pricing, photos, and multilingual descriptions
Visual availability calendar with recurring schedule support and Google Calendar sync
Dynamic pricing settings (peak hours, last-minute discounts, time-based adjustments)
Service package creation and management
Service area configuration with travel preferences
Real-time booking notifications and appointment management dashboard
Earnings tracking with payout history
Review management and response tools
Language capability listings for multilingual providers
Account settings and payout configurationional operational growth.
[GIF of provider screens] Calendar, services managements, bookings view, and more.
For Corporate Clients (Full B2B Portal — 4 screens + 17 components)
Corporate registration with approval workflow
Employee management with bulk operations and anonymization
Wellbeing day booking — single and bulk allocation for team events
Cost center tracking and budget management
Manager approval queues for booking requests
Invoice analytics with usage reporting and pie chart visualizations
Quote request system for custom service packages
Comparison analytics across service providers
Dedicated corporate email notifications and booking confirmations
Corporate billing cycles with automated invoice generation
[GIF of corporate dashboard screens] Overview, tab switching, view bookings, invoices, manage employees.
For Platform Admins (12 screens)
Dashboard with platform-wide KPIs and analytics
Provider approval/rejection and verification management
Booking oversight across all user types
Service catalog management
Blog publishing system with dynamic routing and SEO
Competition/contest creation and management
Promotion and campaign management
Support ticket system with canned responses
Refund processing
Invoice management and overdue tracking
Corporate client management
TECHNICAL ARCHITECTURE
Frontend: Expo 54 + React Native + React 19 + TypeScript
Single codebase targeting iOS, Android, and web simultaneously. File-based routing via Expo Router. Full responsive design with desktop sidebar navigation, headers, footers, and mobile-optimized layouts across all 96 screens.
Backend: Supabase (PostgreSQL + Auth + Edge Functions)
33 Deno edge functions handling everything from payment webhooks to AI chat to email delivery. Row Level Security policies enforcing data privacy across four user roles (customer, provider, corporate, admin). Service-based architecture with 82+ utility modules.
Payments — 2 active providers + 3 with infrastructure ready:
Active/Primary:
Visma Pay — Finnish online banking (all major banks), cards, MobilePay, B2B invoicing, with full webhook handling
Edenred — Wellness benefit card integration with balance checking
Infrastructure Built, Not Yet Active:
Holvi — Provider payout infrastructure built, automated payouts on 1st and 15th
Smartum — Wellness benefit card infrastructure ready
ePassi — Wellness benefit card infrastructure ready
Additional Payment Features:
Gift card payments with PDF generation
KELA reimbursement tracking
Coupon/promotion validation
Refund processing with webhook handling
Corporate invoice generation and billing cycles
Email System: Mailgun (EU)
12 automated email types:
Booking confirmations and reminders
Booking cancellations and modifications
Provider notifications for new bookings
Gift card delivery with PDF attachments
Referral rewards
Support ticket responses
Competition results
Post-service surveys
Corporate-specific notifications (approvals, budget alerts)
Provider verification and onboarding emails
AI Integration: Claude API
"Helmi" — the in-app AI concierge handling:
Booking assistance and service recommendations
Customer support inquiries
Natural language booking parameters
Multi-language conversations
Additional AI features:
Blog SEO tag generation
Meta description writing for services
Voice Calling: Agora SDK
Token generation for secure calls
Incoming call modals with caller information
Active call screens with mute/speaker controls
Direct customer-provider communication without exposing phone numbers
Internationalization
7 languages with 2,660+ translation keys:
English, Finnish, Swedish, Danish, Estonian, Icelandic, Norwegian
11 namespaces per language for performance
Namespace-based locale splitting to keep bundle sizes manageable
DeepL API integration for translation assistance
[GIF of contact us screen] Demonstrating the working internationalization.
Performance Optimizations
StyleSheet memoization across all 96 screens
INP optimization: reduced from 1,280ms to under 200ms
Deferred heavy operations (confirmation dialogs, validation)
Loading state management for immediate visual feedback
Dynamic imports for heavy components
Deployment
Web: Vercel (auto-deploy on push to main)
Production API: UpCloud with Caddy reverse proxy
Native builds: EAS (Expo Application Services) for iOS/Android
CI/CD: GitHub Actions
Edge Functions: Supabase edge runtime (Deno)
TECHNICAL CHALLENGES SOLVED
Challenge 1: Enterprise-grade platform as a solo developer in 8 weeks
Solution: Chose Expo for true cross-platform output from a single codebase, Supabase for managed backend infrastructure eliminating DevOps overhead, and a service-based architecture that kept 82+ modules maintainable.
Result: 2,040 commits across 8 weeks — averaging 255 commits per week during peak development in January alone. 146,000+ lines of TypeScript across 387 files, all written and maintained solo.
Challenge 2: Multiple payment providers in one checkout flow across a multi-sided marketplace
Solution: Built payment abstraction layer routing through Visma Pay (Finnish banks/cards/MobilePay) and Edenred (wellness benefit cards) as primary methods, with infrastructure already in place for Holvi payouts, Smartum, and ePassi — ready to activate as the business scales.
Implementation:
Webhook handling from multiple providers
Invoice generation for corporate clients
Refund processing with proper error handling
KELA reimbursement tracking
Rate limiting and retry logic
Transaction reconciliation across providers
Result: Single checkout flow handling 5 different payment contexts with proper fallbacks and error recovery.
Challenge 3: Corporate B2B portal bolted onto a consumer marketplace
Solution: Designed a separate corporate user type with its own registration flow, approval queues, employee management, cost center tracking, and invoice-based billing — without duplicating the core booking and provider infrastructure.
Architecture:
Shared provider network between B2C and B2B
Different payment flows (invoice vs. direct payment)
Manager approval workflows before booking confirmation
Bulk booking operations for team wellness days
Corporate-specific analytics and reporting
Cost center allocation and budget tracking
Result: Corporate clients use the same provider network but with completely different business logic, billing, and administrative controls. A separate SaaS product built inside the consumer marketplace.
Challenge 4: Seven languages with 2,660+ keys across a 96-screen app
Solution: Implemented namespace-based locale splitting (11 namespaces per language) to keep bundle sizes manageable. Built custom useLanguage hook with runtime guards against object returns from nested keys. Added DeepL API integration for translation assistance during development.
Implementation:
// Namespace structure for performance
namespaces = [
'common', 'auth', 'booking', 'provider',
'corporate', 'admin', 'payments', 'emails',
'notifications', 'settings', 'validation'
]
// Only load needed namespaces per screen
const { t } = useTranslation(['common', 'booking']);
Result: Each screen only loads the translation keys it needs. 7 languages supported without impacting load times.
Challenge 5: Sub-200ms interaction responsiveness on a complex React Native app
Problem: Initial INP (Interaction to Next Paint) was 1,280ms, causing noticeable lag on button presses and form submissions.
Investigation: Profiled and identified StyleSheet.create recreation as the primary bottleneck. Every render was recreating style objects.
Solution:
// Before: Recreated every render (1,280ms INP)
const styles = StyleSheet.create({
container: { padding: 20 }
});
// After: Memoized styles (sub-200ms INP)
const styles = useMemo(() => StyleSheet.create({
container: { padding: 20 }
}), []);
Additional optimizations:
Deferred blocking operations to next frame
Immediate loading state feedback before validation
Moved heavy computations to background threads
Optimized re-render triggers with React.memo
Result: INP dropped from 1,280ms to under 200ms. App feels instant even with complex validation and API calls.
Challenge 6: Real-time booking updates across four user types
Solution: Supabase real-time subscriptions with Row Level Security policies ensuring each user type only sees their authorized data.
Implementation:
// Each user type gets real-time updates for only their data
const subscription = supabase
.channel('booking_updates')
.on('postgres_changes', {
event: '*',
schema: 'public',
table: 'bookings',
filter: `customer_id=eq.${userId}` // RLS handles auth
}, handleBookingUpdate)
.subscribe();
Result: Customers see instant booking confirmations, providers get real-time booking requests, corporate managers see approval queues update live, admins monitor platform activity in real-time — all with database-level security.
THE RESULTS
Platform Delivery
From zero to production in 8 weeks — a platform that would typically require a 4-6 person team working for 6+ months
146,000+ lines of TypeScript across 387 source files, all written and maintained solo
2,040 git commits — averaging 255 commits/week during peak development
96 screens serving four distinct user types (customer, provider, corporate, admin)
33 serverless edge functions handling webhooks, emails, AI, and business logic
Live and deployed — web platform serving real traffic, native apps in beta testing
Business Impact
Complete business automation — eliminated manual booking, matching, scheduling, invoicing, and payment processing
Three platforms in one — consumer marketplace, provider management portal, and corporate B2B platform built on shared infrastructure
Revenue-ready — Visma Pay and Edenred covering the Finnish market (banks, cards, MobilePay, wellness benefit cards, invoicing) with Holvi, Smartum, and ePassi infrastructure pre-built for activation
Scalable architecture — can support thousands of providers and bookings without infrastructure changes
Multi-market ready — 7 languages and modular architecture support expansion without architectural changes
Technical Achievements
Native + web from single codebase — iOS, Android, and responsive web all shipping from one repository
Sub-200ms interactions — INP optimized from 1,280ms through systematic performance profiling
Database-level security — Row Level Security policies enforcing multi-tenant isolation
Real-time synchronization — instant updates across all user types without polling
AI-powered support — Helmi handles booking assistance in 7 languages
Enterprise features — corporate portal with approval workflows, cost centers, and invoice analytics
KEY LEARNINGS
Stack selection is the highest-leverage decision. Expo + Supabase + TypeScript enabled one person to build what normally requires a team. The right abstractions multiplied my output by an order of magnitude.
Service architecture pays for itself immediately. 82+ focused service modules meant I could add corporate features, gift cards, or voice calling without touching existing booking or payment logic. Modularity enabled velocity.
Internationalization must be day-one infrastructure. Adding 7 languages after the fact would have been a months-long refactoring project. Building it in from the start made each new language a translation task, not an engineering task.
Performance optimization requires measurement. INP went from 1,280ms to under 200ms — but only because I profiled first and found the actual bottleneck (StyleSheet recreation), not the assumed one. Profile, don't guess.
AI tooling changes what's possible solo. Claude Code handled boilerplate, translations, edge function scaffolding, and repetitive refactoring — freeing me to focus on architecture, UX decisions, and business logic that required human judgment.
Corporate B2B is a different product. The B2B portal (employee management, approval workflows, cost centers, invoice analytics) is essentially a separate SaaS built on top of the consumer marketplace. Treating it as a distinct product with shared infrastructure was the right architecture.
Real-time expectations are now standard. Users expect instant updates. Building with Supabase real-time from day one meant the platform feels modern and responsive without complex polling or refresh logic.
Payment provider abstraction is non-negotiable. Building infrastructure for 5 payment providers (2 active, 3 ready) upfront means activating new payment methods is a configuration change, not a code change. The abstraction layer paid off immediately.
WHAT'S NEXT
Pre-Launch (Q1 2026)
Complete iOS App Store and Google Play Store submissions
Finalize provider onboarding documentation
Beta testing with initial customer and provider cohorts
Launch marketing website and promotional materials
Final performance optimization and security audit
Launch Phase
Public release on web and app stores
Initial marketing campaign in Helsinki region
Provider recruitment and verification at scale
Customer acquisition and retention tracking
Analytics implementation for platform metrics
Activate additional payment providers (Holvi, Smartum, ePassi)
Post-Launch Enhancements
Provider ratings and review system refinement
Advanced scheduling (recurring appointments, service packages)
Loyalty and referral program optimization
A/B testing framework for conversion optimization
Expansion to additional Finnish cities
Additional language support based on demand
Platform Scaling
Payment processing optimization based on real transaction data
Provider matching algorithm improvements using usage patterns
Admin dashboard analytics expansion
Customer support automation via Helmi enhancements
Corporate pilot programs with Finnish companies
API for third-party integrations
Prototype: https://www.bluumo-test.work/
Tech Stack: Expo, React Native, React 19, TypeScript, Supabase, PostgreSQL, Deno, Visma Pay, Edenred, Holvi, Smartum, ePassi, Agora, Mailgun, Claude AI API, Vercel, UpCloud + Caddy
Key Achievement: Built a complete enterprise-grade wellness marketplace platform as a solo developer in 8 weeks—146,000 lines of code across 96 screens, serving four user types (consumer, provider, corporate, admin), with 2 active payment providers (3 more ready), 7 languages, AI concierge, voice calling, and a full corporate B2B portal—replacing a non-functional WordPress site and enabling true business scalability without proportional operational growth.

