Skip to content
Back to projects
2022Case Study

SaaS Website Builder Platform

A multi-tenant website-builder enabling non-technical users to launch production sites with custom themes, domains, and content.

ReactNode.jsPostgreSQLRedisDockerWebSocket
SaaS Website Builder Platform
Overview

What was built

A multi-tenant website-builder SaaS where users create, theme, and publish websites through a visual editor. Built for the Mreshet product line.

The Problem

What it solved

Non-technical users needed to launch and maintain production-quality websites without involving developers, while the platform maintained strict tenant isolation and real-time content updates.

My Role

What I built

Built the visual editor frontend, designed the Node.js API and PostgreSQL multi-tenant schema, implemented WebSocket-based real-time collaboration, and owned the Docker-based deployment pipeline.

Engineering

How it was built

Frontend

React-based visual editor with a component tree model, drag-and-drop layout, and live preview rendering.

Backend

Node.js + Express REST API handling tenant provisioning, content persistence, and theme compilation.

APIs

RESTful endpoints for site CRUD, theme management, and publishing; WebSocket events for live edits.

Database

PostgreSQL with per-tenant row-level isolation, Redis for session caching and real-time pub/sub.

State Management

Normalized client store for the editor canvas with optimistic updates.

Infrastructure

Dockerized services behind NGINX with Redis for caching and pub/sub.

Deployment

CI/CD pipeline with containerized builds and zero-downtime rollouts.

Architecture

System structure

1
Visual Editor (React)Drag-and-drop canvas + live preview
2
API Gateway (NGINX)Routing, TLS, rate limiting
3
Node.js / ExpressTenant logic, content, publishing
4
WebSocket LayerReal-time collaborative edits
5
PostgreSQL + RedisTenant data + cache/pub-sub
6
Docker DeploymentCI/CD, containerized rollouts
Engineering Challenges

What was hard

Multi-tenant data isolation

Designed a PostgreSQL schema with tenant-scoped rows and enforced access boundaries at the API layer to prevent cross-tenant data leakage.

Real-time collaborative editing

Implemented WebSocket-based presence and live edit propagation with Redis pub/sub, handling conflict resolution for concurrent edits.

Theme compilation performance

Cached compiled theme assets and streamed incremental updates to avoid full re-renders on every edit.

Decisions & Tradeoffs

Why these choices

Row-level tenant isolation over schema-per-tenant

Chose a shared schema with tenant IDs to keep migrations manageable as the tenant count grew, trading query complexity for operational simplicity.

Redis pub/sub for collaboration

Used Redis as the WebSocket fan-out backbone to keep the Node.js processes stateless and horizontally scalable.

Results

Impact

  • Shipped and maintained the platform as part of the Mreshet product offering.
  • Enabled non-technical users to launch sites end-to-end without engineering involvement.
Technology

The stack

ReactNode.jsPostgreSQLRedisDockerWebSocket