Boom Media Labs
Infrastructure ยท Assistee remote-support engine
Setup & White-Label Runbook ยท 2026-07-23

Assistee โ†’ MeshCentral (Boom Assist)

We replaced RustDesk with self-hosted MeshCentral, white-labelled as Boom Assist. This is the follow-along guide to stand up the engine, wire Assistee to it, and rebrand it so nobody ever meets the stock MeshCentral console. Everything the code needs is already written โ€” this is the ops half.

Why we switched. RustDesk made both sides work for it โ€” the tech typed a 9-digit ID and password, the client installed a generic app and typed a server host, and white-labeling meant re-compiling a signed client per brand. MeshCentral is friction-proof (one click each side, browser-based viewer) and white-labels with a single config block.

The friction-proof flow we built to

Client
Clicks one branded installer link. Server + group baked in. No host, no ID.
Device
Auto-registers. Sync pulls it into the dashboard โ€” no manual ID entry.
Tech
Clicks Connect. Remote desktop opens in the browser, inside Assistee chrome.

1 Point DNS

Add an A record so the engine has a home:

mesh.assistee.online   A   24.199.95.101   (boom-hosting droplet)

You Do this first โ€” SSL issuance in step 3 needs it resolving. Give it a few minutes to propagate.

2 Deploy MeshCentral on Coolify

On the boom-hosting droplet (24.199.95.101) โ€” not the Supabase box (keeps the OOM-prone Supabase droplet clear).

  1. Coolify โ†’ New Resource โ†’ Docker Compose.
  2. Paste SaaS/Assistee/infra/meshcentral-coolify.yml.
  3. Set env vars: MESH_HOSTNAME=mesh.assistee.online, and a MONGO_USER / MONGO_PASS of your choosing.
  4. Deploy. Traefik issues the Let's Encrypt cert automatically (labels are in the compose).
Nice side effect: MeshCentral serves everything over 443 โ€” none of RustDesk's exotic 21115โ€“21119 TCP/UDP port range to open. Agents dial out to 443.

3 Create the accounts

  1. Open https://mesh.assistee.online โ†’ create the first account โ€” it becomes site administrator.
  2. Create a second account named assistee-api. This is what Assistee's control API logs in as. Give it device-group management rights (site-admin is fine for MVP). Its username/password become MESH_API_USER / MESH_API_PASS.
Techs never log into MeshCentral. They use the Assistee dashboard; Assistee talks to the engine as this one service account. That's what keeps the white-label clean.

4 Rebrand it (kill the "old Windows" look)

The stock MeshCentral UI is dated. Two things fix that:

Key flags already set in that config:

SettingWhy
title / titlePicture / favicon"Boom Assist" branding, your logo, your favicon โ€” no MeshCentral identity
AllowFraming: trueLets Assistee embed the desktop viewer in an iframe (the /dashboard/view wrapper)
AllowLoginToken: trueEnables token-based auto-auth for embedded/console deep links
newAccounts: falseNo public signups on the engine โ€” invite/admin only
consentMessagesThe permission prompt the client sees says "Boom Assist", not "MeshCentral"

5 Wire Assistee

Code done The app is already repointed off RustDesk. You just supply env + run the migration.

Environment (.env.local or Vercel)

NEXT_PUBLIC_MESH_SERVER_URL=https://mesh.assistee.online
MESH_CONTROL_URL=wss://mesh.assistee.online/control.ashx
MESH_API_USER=assistee-api
MESH_API_PASS=<the service account password>
# BOO_ORG_ID once the Boom Media internal org exists

Install deps & run the migration

cd "SaaS/Assistee" && npm install        # adds ws + @types/ws
# then, in the db.boommedia.us SQL editor:
#   run migrations/002_meshcentral.sql   (after 001_initial.sql)
One live-validation step. The control-API client (src/lib/meshcentral.ts) is written to MeshCentral's documented protocol (actions createmesh, nodes, createInviteLink, createDeviceShareLink; x-meshauth login). It couldn't be exercised without a live server. On first deploy, run one Add-Device and one Connect and confirm each call โ€” adjust action/param names if your MeshCentral build differs. The app degrades gracefully until then (clean "engine not configured" states, never a crash).

6 Test the whole loop

  1. npm run dev โ†’ sign up. Onboarding provisions a device group for the org.
  2. Devices โ†’ Add Device โ†’ copy the installer link โ†’ run it on a test machine.
  3. Sync โ†’ the machine appears, marked Online.
  4. Connect โ†’ the remote desktop opens inside Boom Assist chrome. Done.
  5. Bonus: Start Session for a brand-new machine, and the BOO endpoint (POST /api/boo/support-session) for the restaurant "Request Support" button.

7 How each piece maps

Assistee conceptMeshCentralWhere
OrgDevice group (mesh)organizations.mesh_id
DeviceNode (installed agent)devices.mesh_node_id
Add Devicegenerateinvitelink/api/devices/invite
Synclistdevices/api/devices/sync
Connect (unattended)createDeviceShareLink (desktop, no-login)/api/session/create โ†’ /dashboard/view
Start Session / BOOgenerateinvitelink + hosted page/api/session/create, /api/boo/support-session
White-label economics. MeshCentral is Apache-2.0 and free. Cost is just its slice of the boom-hosting droplet โ€” no per-seat license, no RustDesk Pro tier, no per-brand client rebuild. Resell as Boom Assist with ~100% engine margin.