Back to Portfolio
SaaS

Sline

Multi-tenant SaaS unifying CRM, browser-native VoIP, predictive dialer, and AI voice agents for call centers, retail, cafés, and high-volume restaurants.

Visit Live Site

Technologies Used

SaaSReact + Node.jsFreeSWITCH / WebRTCAI Voice AgentsPostgreSQL Multi-tenant

What We Delivered

  • End-to-end architecture: 12+ Node.js + TypeScript microservices behind a single API gateway, per-tenant PostgreSQL isolation, and a self-hosted FreeSWITCH telephony core.
  • Browser-native agent softphone over WebRTC/WSS, authenticated against a SaaS-aware SIP directory served dynamically by mod_xml_curl.
  • Predictive dialer engine with AMD, atomic lead locking, caller-ID pool rotation, timezone-aware dialing, and retry policies.
  • Full CRM front-end in React 19 + Vite + TypeScript using a hybrid Ant Design / Bootstrap / PrimeReact system, drag-drop ReactFlow pipelines, and in-browser softphone.
  • AI voice agent layer via Vapi: outbound and inbound AI calls, persona configuration, human handoff, and conversation logs tied back to CRM leads.
  • Compliance pack: DNC management with CSV import and DB-level filtering, call recording with 90-day rotation, and supervisor listen / whisper / barge.
  • Multi-tenant billing on Stripe with usage-based invoicing for minutes, numbers, and AI usage.
  • Hospitality vertical modules: restaurant, café, and retail call flows with order, seating, and reservation context attached to inbound calls.
  • Production deployment on Hetzner with PM2 supervision, GitHub-driven frontend deploys, log rotation, and an auto-provisioning SIP trunk system.

Key Outcomes

  • Agents go live in a browser tab — no desk phones, no installs, no extensions to provision.
  • New tenants and new agents onboard without any server-side changes thanks to the dynamic mod_xml_curl SIP directory.
  • AI voice agents share the same CRM context as humans and can hand off mid-conversation without losing the thread.
  • True multi-tenant isolation: every client has its own PostgreSQL database, its own numbers, agents, AI personas, and billing.
  • One platform replaces the five-to-six-tool stack call centers usually assemble themselves — CRM, dialer, PBX, IVR, analytics, and AI.

The Challenge

Call centers and hospitality operators typically stitch together five to six disconnected tools — a CRM, a desk-phone PBX, a separate dialer, an IVR, an analytics stack, and lately an AI bot — none of which share state or context. There was no multi-tenant SaaS option that combined a true browser-native softphone, a real predictive dialer, and AI voice agents that respect CRM data inside a single platform. Sline was built to be that platform.

The Solution

EMDev designed and shipped Sline as a fleet of 12+ Node.js + TypeScript microservices behind a single API gateway, with each tenant on its own isolated PostgreSQL database. A self-hosted FreeSWITCH 1.10 core handles all media, and mod_xml_curl serves a SaaS-aware SIP directory so new tenants and agents come online with zero server-side changes. Agents log in to a React 19 + Vite + TypeScript client, SIP.js registers them over WSS, and they take calls inside the browser tab. The dialer engine atomically locks leads under concurrent load (FOR UPDATE SKIP LOCKED), runs AMD via mod_avmd, and respects timezone windows, retry policies, dial ratios, and DNC lists. Vapi-powered AI voice agents share the same CRM context as humans and can hand off mid-call. Stripe-backed usage billing, Redis-driven realtime telemetry, and supervisor listen / whisper / barge close the loop.

sline.ch/
Projects.sline.name

Let's build your next product.

Partner with EMDEV to turn complex requirements into scalable, high-performance digital experiences.