Hi HN! I've been working on Cairo, an open-source platform for managing outreach campaigns across Lemlist, Smartlead, and other tools. The latest feature solves a problem every agency faces: keeping client data separated without complex configuration. How it works: - Name campaigns with client identifiers: "ACME Corp - Q1 2024" - System automatically detects "ACME Corp" and routes to isolated tables - Each namespace gets its own {namespace}\_user_source table - Complete API for managing namespaces programmatically Technical highlights: - Node.js + PostgreSQL - Dynamic table creation with proper indexes - Smart caching layer (5-min TTL) - Zero-downtime migration from single to multi-tenant - ~3ms overhead for namespace detection We're dogfooding this with 12 clients and it's eliminated hours of manual data wrangling weekly. Happy to answer questions about the architecture, multi-tenancy patterns, or anything else! |