IT / telecom leads
Operate Asterisk 22 with a control plane instead of snowflake files.
Next.js face · NestJS brain
A signed-in business phone system you can inspect: Next.js is the face, NestJS is the control plane, Asterisk 22 LTS is the muscle, and PostgreSQL owns extensions, queues, routes and trunks — generated conf files are output, not the place operators edit.
For companies that want recordings, trunks and extensions on a box they operate — not a locked UCaaS SKU.
When the admin UI, generated files and AMI disagree, teams typically hit:
One platform: Admin change in Next.js → NestJS validates → PostgreSQL → generate PJSIP/queues/dialplan → debounced AMI reload → Asterisk 22 executes
Desk phones and browser clients can share extensions. The admin never talks AMI; the SPA uses JWT REST and a UI-safe WebSocket.
PJSIP/WebRTC on Asterisk 22. BYOC, own SIP trunks, or Twilio/Telnyx/Sinch selectable in the estimator.
flowchart TB UI[Next.js admin JWT WebSocket] API[NestJS tenants generate AMI ARI] PG[(PostgreSQL source of truth)] Conf[Generated pjsip queues dialplan] AST[Asterisk 22 LTS] UI --> API API --> PG API --> Conf Conf --> AST API --> AST
This product is a productized delivery of the documented engineering case study — evidence stays on this page so you do not have to guess what was shipped.




Full case study with video and FAQ →
Configure this scope & send RFQ →
Operate Asterisk 22 with a control plane instead of snowflake files.
On-prem or private DC selectable in the quote builder.
Recordings and trunks on a box you can inspect.
Health tables and workers instead of blocking OS calls on every dashboard hit.
| Traditional setup | This product direction |
|---|---|
| Edit pjsip.conf and the admin | PostgreSQL owns the row; Asterisk consumes generated output |
| AMI in the browser | NestJS AMI/ARI; SPA gets tenant-scoped events |
| Queue name in three sanitizers | One persisted Asterisk identifier |
| Locked UCaaS SKU | Asterisk 22 LTS you operate |
Establishes a signed-in admin for status, CDR, extensions, trunks, IVR, queues and conference with generated Asterisk files. Isolation that exists only as a dialplan naming convention is not claimed as tenancy — that is a different product line.
Estimates are scope-based planning figures — not binding quotes. Taxes, carrier deposits, DIDs and third-party AI usage are scoped in discovery.
No. This is the self-hosted Asterisk 22 UnifiedPBX product. Multi-tenant IP PBX is a separate case study.
No. CCaaS seats on FreeSWITCH ESL is a different product page.
Yes. BYOC and own SIP trunks are first-class in the estimator.
No. NestJS owns AMI command/event sockets; the UI uses JWT and a safe WebSocket.
Optional requirement in the quote builder — same numbering plan as SIP phones.
Yes. On-prem / private DC is a deployment option (quote adjusted).
Optional scrape; JSON health endpoints exist so Grafana is not mandatory.
Yes — see PBX migration solution and include current stack in the RFQ.