Enterprise SaaS · In Production

Swalook CRM

Some CRMs are built. Swalook was rebuilt, a ground-up architectural overhaul of a salon-management platform serving real merchants with real concurrent workloads, where "the dashboard is slow" is a business problem, not a vibe.

LiveFull-stack developer

In Production 5 Repos → 1 Platform Next.js 16 Bun + Hono Flutter

The 60-second version

My role
Full-stack developer, architecture lead across frontend, backend, mobile, marketing site, and admin console
The product
Salon management CRM: appointments, clients, commerce, and analytics for merchant teams
The stack
Next.js 16 Turborepo · Bun + Hono + Drizzle (PostgreSQL/Aiven) · Redis + BullMQ · Flutter consumer app
Hardest problem
Migrating a live business off legacy MySQL without breaking the merchants using it daily
Status
v1.90 tagged and shipping at v2.swalook.in
Live site
swalook.in
Killer features
Recharts dashboards · ML Kit AR hair previews · multi-tenant RBAC command center
Swalook CRM billing screen with demo invoices
FIG 1, dashboard, booking flow, and AR preview screens.

01 The problem, and who felt it

Salons run on tight margins and tighter schedules. The merchants using Swalook don't care about your architecture diagram; they care that the appointment book opens instantly at 9 AM when three customers are standing at the counter. The legacy system was buckling under exactly that pressure: a codebase where adding features meant holding your breath.

The stakeholders:

  • Merchants (salon owners and staff), need the day's bookings, walk-ins, and revenue at a glance, all day, on mediocre hardware.
  • End customers, book through the consumer app and expect modern UX, including the fun stuff like seeing a hairstyle on their own face before committing.
  • Platform admins, run the multi-tenant operation: onboarding salons, managing roles, watching the health of every tenant from one seat.
  • The business itself, needed a foundation new features could ship on weekly, not quarterly.

02 My role

I executed the complete architectural overhaul, five repositories orchestrated into one coherent platform: swalook-frontend-new, swalook-backend, swalook-prototype (Flutter), swalook-landing-page, and crm-super-admin. Frontend, backend, mobile, marketing surface, and the multi-tenant command center all shipped through this rewrite.

03 Designing the overhaul

Three design decisions carried the whole project:

  • Turborepo monorepo over repo sprawl. Five products sharing types, components, and release discipline, one bun run away from synchronized builds.
  • Shadcn UI + Recharts for the merchant experience. Dense information design that stays legible on a 13-inch screen at a busy front desk, dashboards first, decoration never.
  • A consumer app that earns its install. The Flutter prototype uses Provider, Dio, video playback, and ML Kit face-mesh detection to overlay hairstyle previews in AR, the difference between "booking app" and "reason to download."

04 Engineering it

  • Frontend: Next.js 16 App Router in TypeScript with TanStack patterns, Shadcn UI componentry, and Recharts analytics, structured so each product ships independently yet shares a design backbone via Turborepo.
  • Backend: Bun + Hono + TypeScript, migrated from MySQL to PostgreSQL on Aiven with Drizzle ORM, Redis caching (ioredis) on hot reads, and BullMQ job queues for background processing. 35+ REST endpoints documented end-to-end with OpenAPI/Scalar.
  • Multi-tenancy: the super-admin console gives platform operators role-based access control across tenants, onboarding, permissions, and oversight in one Next.js 16 command center.
  • Deployments: managed across Vercel and Render, tuned for high-throughput concurrent merchant traffic, the kind where one slow endpoint becomes thirty support tickets by lunch.

05 Shipping it

This is a living production system, not a portfolio demo: versioned releases (v1.90 tagged across frontend and backend), merchants transacting daily, and a landing presence with SEO-optimized product pages plus a Framer-Motion-animated blog. Deploys go out while businesses are open, which teaches you a healthy respect for backward compatibility and feature flags.

06 What it proves

  • Enterprise rewrites can ship incrementally without pausing the revenue, the platform kept running merchants' days while being replaced underneath them.
  • Bun + Hono + Drizzle is a production-grade stack, not an experiment: documented APIs, queues, caching layers, and all.
  • One engineer can hold five repositories in their head when the architecture does the heavy lifting.
  • ML Kit face-mesh AR isn't a gimmick when it moves booking conversion, it's product strategy in a shader.

07 What I learned

Data migrations are about trust, not schema. Every table moved off MySQL was another promise kept to a merchant who never noticed. And OpenAPI documentation written early pays rent forever, the Scalar docs became the team's source of truth and cut my "quick question about this endpoint" interruptions to near zero.