Developer Documentation

Platform Overview

Multi-tenant backend API serving all Reformer client websites

System Architecture

┌─────────────────────────────────────────────┐
│  Client Websites (Webflow + Memberstack)    │
│  - Member signups                           │
│  - Form submissions                         │
│  - Payment processing                       │
└─────────────────┬───────────────────────────┘
                  │ Webhooks
                  ↓
┌─────────────────────────────────────────────┐
│  Reformer Platform API (Render)             │
│  https://reformer-platform.onrender.com     │
│                                             │
│  ├─ Webhook receivers                       │
│  ├─ Service integrations                    │
│  ├─ Activity logging                        │
│  └─ API endpoints                           │
└─────────────────┬───────────────────────────┘
                  │ Reads/Writes
                  ↓
┌─────────────────────────────────────────────┐
│  Database (PostgreSQL)                      │
│  - accounts, members, integrations          │
│  - activity_log, support_tickets            │
└─────────────────┬───────────────────────────┘
                  │ Syncs to
                  ↓
┌─────────────────────────────────────────────┐
│  Third-Party Services                       │
│  ├─ Close CRM (sales pipeline)              │
│  ├─ Dropbox (file storage)                  │
│  ├─ ClickUp (task management)               │
│  ├─ Slack (team notifications)              │
│  └─ Pirsch (analytics)                      │
└─────────────────────────────────────────────┘

Key Components

1. Backend API

2. Database

⚠️ Current Issue: Using two databases (Render PostgreSQL + Supabase). Should consolidate to Supabase only.

3. Service Integrations

Service Purpose Status
Memberstack Authentication & billing Working
Close CRM Sales pipeline & customer data Working
Dropbox File storage per member Working
ClickUp Task & project management Working
Slack Team notifications Working
PageSpeed Performance monitoring Working
Pirsch Analytics tracking Tracking only
Webflow Form submissions Working

Data Flow Example

Member Signup Flow

1. User submits signup form on client website
   ↓
2. Memberstack creates member
   ↓
3. Memberstack sends webhook to Reformer Platform
   POST https://reformer-platform.onrender.com/webhooks/memberstack/{secret}
   ↓
4. Reformer Platform:
   - Finds account by webhook secret
   - Creates member record in database
   - Logs to activity_log
   ↓
5. Triggers integrations (parallel):
   - Sync to Close CRM
   - Create Dropbox folder
   - Send Slack notification
   - Create ClickUp onboarding task
   - Track signup event in Pirsch
   ↓
6. Returns success to Memberstack

Multi-Tenant Design

Each client gets:

How It Works

Webhook URL format:
https://reformer-platform.onrender.com/webhooks/{service}/{secret}

Example:
Client A: /webhooks/memberstack/client_a_secret_123
Client B: /webhooks/memberstack/client_b_secret_456

Server looks up account by secret:
SELECT * FROM integrations 
WHERE webhook_secret = 'client_a_secret_123'
AND service = 'memberstack'

Returns account_id → all operations scoped to that account

Tech Stack

Layer Technology
Backend Node.js + Express.js
Database PostgreSQL (should be Supabase)
Hosting Render.com
Frontend React + Vite + Tailwind
Client Sites Webflow + Memberstack

Deployment

Automatic deployment via GitHub:

git push origin main
   ↓
Render detects push
   ↓
Runs: npm install
Runs: npm start
   ↓
Live in ~2 minutes

Related Documentation