Account
Initializing…
Last call
Stats
Loading…
Control Centre
Create User
Create user
Creates a Supabase auth user and assigns their role. The new user will be forced to reset their password on first login.
Integrations
Loading…
Usage
Loading…
Tech Stack
The pieces this app is built on, and what each one does.
- Twilio Voice Telephony backbone for the whole app — inbound + outbound PSTN calls, browser-based softphone via the Voice JS SDK (registered on the AU1 Sydney edge), call recording, conference-based flow for admin live-listen + blind transfer, and inbound hunt-group routing. Every Twilio resource (numbers, TwiML app, tokens, conferences, REST clients) runs in AU1.
-
Supabase
Auth (email/password with role-based access — PSC / Admin / pending) and Postgres for
call_logs,user_roles(+ first/last name, avatar URL), transcripts, recording metadata, and audit-flag placeholders. Supabase Storage hosts profile pictures in theavatarspublic bucket. RLS enforces per-user isolation; admins bypass via service role server-side. -
Node.js + Express
Backend server (
server.js) issues Twilio Access Tokens, handles all TwiML webhooks (/api/voice,/api/callee-twiml,/api/inbound-ring-twiml,/api/transfer-ring-twiml, recording + transfer + conference status callbacks), proxies recordings to the browser, orchestrates inbound ring + blind transfer, exposes stats + leaderboard endpoints, and mints short-lived AssemblyAI streaming tokens. -
Railway
Cloud host for the Node backend. Auto-deploys on
railway up; holds all secrets as env vars. The dialler's public URL is a Railway subdomain. Build timestamp from Railway boot is shown in the sidebar footer so the team can see at a glance whether they're on the latest web deploy. -
AssemblyAI
Two flavours: (1) post-call transcription (speaker-labelled) — on recording-complete the server downloads the MP3, uploads to AssemblyAI, and writes the transcript into
call_logs.call_transcript. (2) Universal-Streaming v3 — when an admin clicks Monitor, the browser opens a direct WebSocket tostreaming.assemblyai.com/v3/ws(using a short-lived token from our server) and pipes the conference audio through an AudioWorklet at 16 kHz PCM. Speaker labels enabled; turns render live in the drawer. -
Anthropic Claude (Haiku 4.5)
Call-auditing pass on new transcripts — extracts compliance flags (SuperCare fee disclosure, approximate pricing given, deposit requested) into
call_logs.audit_flagsvia a structured JSON prompt. Currently dormant untilANTHROPIC_API_KEYis set in Railway env. -
Electron (desktop shell)
Thin wrapper (
LGG Dialler Desktop/) that loads the Railway URL in a Chromium window with custom icon, name, auto-granted microphone permissions, and a tiny preload.js that exposes the shell version to the renderer. Backend/UI updates ship without a DMG reinstall — the team just restarts the app. Reinstall only required when shell files (main.js,preload.js, icon, package.json) change. -
Vanilla JS + HTML/CSS
Frontend (
index.html,login.html). No framework; minimal dependencies (Supabase JS client, Twilio Voice SDK). All styling hand-rolled to match an Apple-style aesthetic. Single-file app keeps load simple and makes the live transcription AudioWorklet possible via inline Blob URLs.
Call logs
Loading…
Monitor
Live · refreshing every 5s
Checking…
Pickup Rate Trend
This period
Prior period
Number Health
Proxy signal for spam labelling / reputation drift, computed from outbound call outcomes
(pickup rate, sudden drops, and <10 s answered-then-hung-up calls). This is an early-warning
alarm, not a definitive health score — confirm with a manual test call if a row flags.
Loading…