← Back to all projects

BeBlended

BeBlended

A two-sided marketplace connecting clients with licensed hairstylists for Black hair care services.

Role
Founding Engineer & CTO (engagement began as a freelance contract)
Timeframe
Jan 2023 — Present
Status
Maintenance
Team Size
3
Domain
Beauty / Hair Care Booking Marketplace
Live site (US)
BeBlended cover

BeBlended is a two-sided marketplace that connects clients with licensed hairstylists specializing in Black hair care. As Founding Engineer and CTO, I led its V3 rebuild — migrating a legacy Go backend onto a type-safe TypeScript stack and shaping the platform's architecture, payments, and infrastructure.

The product spans three clients sharing a single type-safe API: a Next.js web app, an Expo/React Native mobile app, and a Hono backend. It handles the full lifecycle of the stylist–client relationship — from geo-aware discovery and booking with deposits, to Stripe Connect payouts, real-time chat, subscriptions, and a job-posting marketplace — all organized across 15+ domain-driven modules built for long-term maintainability.

Founding Engineer & CTO (engagement began as a freelance contract)

  • Owned the platform's technical architecture and engineering direction as CTO
  • Led the V3 rewrite from a legacy Go/GORM backend to a TypeScript stack (Hono + Drizzle ORM)
  • Built and maintained core systems: payments (Stripe Connect), booking, subscriptions/billing, and notifications
  • Managed infrastructure, CI/CD, deployments, and observability across staging and production
  • Full-text and geo-location stylist search powered by Meilisearch
  • End-to-end booking flow with deposits, scheduled payment holds, cancellations, rescheduling, and tipping
  • Stripe Connect payments with automatic vendor payouts and webhook-driven reconciliation
  • Real-time client-stylist chat via Stream Chat on web and mobile
  • Subscription/billing system with versioned plans, pricing tiers, and feature gating
  • Promotion engine with automatic and code-based discounts and redemption tracking
  • Job-posting marketplace where clients post needs and stylists bid
  • Google Calendar two-way sync for stylist scheduling
  • Configurable per-stylist intake forms
  • Admin dashboard with impersonation, analytics, and platform management
  • Multi-channel notifications (email, SMS, push) via an event outbox and BullMQ queues
  • Type-safe API across web and mobile clients using Hono RPC

Problem

Keeping API contracts in sync across web and mobile clients without drift.

Solution

Adopted Hono RPC to generate client types directly from server route definitions, providing end-to-end type safety from database to UI.

Problem

Reliably charging deposits and balances while honoring cancellation/refund policies and appointment timing.

Solution

Built dedicated payment sub-services with scheduled payment holds captured/released via cron every 30 minutes and webhook-driven reconciliation with Stripe.

Problem

Delivering notifications across email, SMS, and push without coupling delivery to business logic.

Solution

Implemented a transactional event outbox with BullMQ queues to decouple and reliably dispatch multi-channel notifications.

Problem

Migrating from a legacy Go/GORM backend to a modern TypeScript stack without losing domain coverage.

Solution

Performed a V3 rewrite onto Hono + Drizzle ORM organized by domain-driven design with a repository pattern and DI container.

Languages

TypeScriptGoSQL

Frameworks

HonoNext.js (App Router)React 19React NativeExpoTailwind CSSshadcn/ui (Radix UI)React Hook Form

Databases

PostgreSQL 16Redis 7Meilisearch

Tools

Drizzle ORMDrizzle KitBullMQZodPinonode-cronHono RPCmoment-timezoneVitestPlaywrightTestcontainersDockerGrafana Alloy

Infrastructure

Deployment
Vercel (web client), DigitalOcean App Platform (production API), DigitalOcean Droplet (staging API, Docker Compose)
Cloud
DigitalOcean, AWS, Vercel
CI/CD
Vercel CI/CD, DigitalOcean App Platform CI/CD, Manual deploy script (infra/deployStaging.sh)
Containers
Docker (multi-stage build), Docker Compose
Other
DigitalOcean Container Registry, DigitalOcean Managed PostgreSQL, AWS S3 (file storage), Grafana Cloud / Loki (log shipping via Grafana Alloy)

Stripe Connect

Payments, vendor payouts, subscriptions, payment holds, webhooks

Stream Chat

Real-time client-stylist messaging (web and mobile)

SendGrid

Transactional email (booking confirmations, receipts, verification)

Mailchimp

Marketing and secondary transactional email

Telnyx

SMS reminders and verification codes

Google Maps

Geocoding and geo-location stylist search

Google Calendar

Two-way booking calendar sync via OAuth

HubSpot

CRM, lead management, conversion tracking

PostHog

Product analytics and event tracking

AWS S3

User upload storage (images, documents, licenses)

  • Architected a type-safe, domain-driven V3 platform (15+ bounded domains, 50+ Drizzle repositories) shared across a Next.js web app, Expo mobile app, and a Hono/TypeScript API via Hono RPC for end-to-end type safety.
  • Built a Stripe Connect payment system supporting deposits, scheduled payment holds (cron-captured), vendor payouts, subscription billing, and webhook-driven state reconciliation.
  • Implemented a versioned subscription and feature-gating system (plan versions, prices, and per-plan feature flags) enforced at the API middleware layer.
  • Developed an event-driven notification pipeline using a transactional outbox and BullMQ for reliable multi-channel (email/SMS/push) delivery.
  • Integrated Meilisearch for full-text and geo-radius stylist and booking search with real-time indexing.
  • Established a testing strategy with Vitest unit/integration tests (Testcontainers-backed PostgreSQL) and Playwright E2E coverage.
  • Containerized the API with a multi-stage Docker build and shipped structured Pino logs to Grafana Cloud via a Grafana Alloy sidecar.

Have a project in mind?

Let’s talk about what you’re building and how Montgomery Labs can help ship it.

Start a project