QwixBox

Docs / Product roadmap

Product roadmap

Carried over from QwixPBX v1’s ROADMAP.md (27 areas), re-marked against what this codebase actually contains. v1’s own status markers were unreliable — it marked Billing, FAX and SMS/Messaging as complete when they had schema and no working feature — so every line below was checked against the code rather than copied.

For what blocks a shippable product, see mvp.md — this file is the long view.

Re-checked against the code on 2026-08-01.

Status key

MarkMeaning
WorkingBuilt, deployed, and proven by doing it — a call placed, a packet captured
UntestedCode exists and is deployed; it has never been executed
PartialReal but incomplete — the gap is named
Schema onlyA table exists; nothing reads or writes it as a feature
Not startedDesign may exist under docs/design/; no code

The distinction between Working and Untested is the one that matters. Four bugs found on 2026-07-31 were all code that read as correct and did nothing, and static review caught none of them. “Deployed” is not evidence.

Everything marked Working is proven at the signalling layer. Two-way audio has not been confirmed on any call, so voicemail recording, IVR DTMF and fax remain unproven regardless of how complete their code looks. mvp.md item 1 is that test.

Where the product is

#AreaStatusNotes
1Multi-tenancy & administrationWorkingTenant = better-auth organization; requireTenant refuses an unscoped request
2User management & authenticationWorkingbetter-auth, RBAC via createAccessControl, no self-service registration by design. Users page in the portal, roles enforced server-side per request, password reset by email verified end to end. The installer creates the first account and tenant
3Extension & device managementPartialExtensions work; one credential set per extension. Multi-device in backlog
4Dialplan & call routingWorkingExtension-to-extension, inbound DID and outbound-to-carrier all verified by placing calls. Signalling only — see the media note below
5Call featuresWorkingRing groups (simultaneous fan-out + failover), time conditions and the forwarding/DND feature codes all verified by placing calls. No MoH management or parking
6VoicemailPartialReached and answered (*97, ring-group failover) with prompts loading; no message has been left or delivered to email, and that needs real audio
7IVRPartialA call traverses the menu and the timeout destination is honoured; DTMF selection needs a real endpoint
8Conference roomsNot startedbacklog
9Call centre / contact centreSchema onlyA bare queue table. The big one — design
10CDR & reportingPartialCDR ingest wired; call list with filters, aggregate summary and CSV export in the portal. No reporting beyond that
11Real-time monitoringNot startedESL client exists (services/esl.ts); no wallboard
12Trunks & providersWorkingEncrypted credentials, Kamailio projection, and outbound delivery to a carrier verified
13Contacts & directoryNot startedbacklog; mod_cidlookup is built and unused
14WebRTC & softphoneUntestedWSS listens and rtpengine is in the media path in config; no browser client has connected. A native softphone does register
15System administrationPartialInstaller, four-question wizard, one-line bootstrap, health checks and log rotation work. DNS records created automatically via Domain Connect or a Cloudflare token. Backups run and have never been restored
16Integration & APIsPartialThe REST API is the integration surface and the portal is a client of it. Audit trail readable via /api/audit. No webhooks
17Billing & invoicingNot startedv1 marked this complete; it was not — design
18Call transcription & AINot startedPremium in v1’s plan
19AI digital receptionistNot startedSee below
20FAXUntestedInbound fax to email is written end to end (fax_receive.lua, /fs/fax, services/fax.ts) with T.38 via mod_spandsp; no fax has been sent or received
21SMS / messagingNot startedv1 marked complete; schema only — backlog
22Hospitality / hotel moduleNot startedSpeculative
23OmnichannelNot startedSpeculative
24Storage & infrastructurePartialLocal disk plus scheduled pg_dump; no object storage
25Grafana monitoringNot startedprometheus-node-exporter is installed by 52-monitoring.sh
26ClickHouse analyticsNot startedPremium in v1’s plan
27STIR/SHAKENPartial33-stir-shaken.sh exists, off by default; source build currently fails on Debian 13

Editions

v1 split the product into a free Basic edition and a Premium contact-centre edition, with the call centre, transcription/AI, ClickHouse and HA as the premium line. That split is worth keeping in mind while building area 9, because it determines whether the call centre is a bolt-on or an assumption — but nothing in this codebase enforces an edition boundary today, and adding one before there is a product to sell would be the wrong order.

Notes on specific areas

4 — Call routing. All three paths were broken and are now fixed and verified: outbound died in Kamailio’s empty dr_* tables (and again in mod_hiredis corrupting the route pattern), while extension-to-extension and inbound DID both died because FreeSWITCH held no registrations — endpoints register to Kamailio. See CLAUDE.md for the mechanics. Registration is now proven on real hardware, but media has still never been tested — only signalling; mvp.md covers what that leaves open.

9 — Call centre. The largest single gap and the best-documented part of v1. The architecture is settled: mod_callcenter runs the queue, we own configuration and history. See design/call-centre.md.

17 — Billing. Blocked on nothing technical. The design is in design/billing.md; the decision it needs is whether prepaid (real-time credit control on the call path) is in scope, because that is most of the work.

19 — AI digital receptionist. v1 had a 255-line design document and a six-table schema (ai_receptionist_config, ai_intents, ai_training_data, ai_conversations, ai_messages, ai_analytics). It is an IVR whose branching is driven by speech recognition and intent matching rather than DTMF, which means it slots into the existing destination model — an AI receptionist is just another destination type resolved by qwixbox.go. The hard parts are latency (speech recognition sits on the call path, where the existing budget for a Redis lookup is 200ms) and cost per minute. Not designed further here; the schema is recoverable from the archived v1 repo at 6c4ea50 if it is picked up.

25 — Grafana. 52-monitoring.sh already installs prometheus-node-exporter and its collectors, so host metrics are being produced and nothing consumes them. That is the cheapest gap on this list to close.

27 — STIR/SHAKEN. Worth knowing before planning: the libstirshaken source build currently fails on Debian 13 with a deprecated OpenSSL API under -Werror. The step is off by default, so this does not affect installs, but the area is not simply “not enabled”.

Edit this page on GitHub