a5de247948b98de81e784d603444a31a16ecc04b
render() is pure and gives every file the header (bodies arrive per task). apply() runs one at a time, debounces requestApply, writes changed files atomically (mode 0640), keeps .prev, sends each needed reload once, skips pjsip reload and sets restartRequired when transports change, and records generator_runs. AMI connects on startup and every reconnect forces a full apply. Admin routes: config apply/rollback and a masked generated-files view. Task: M2-T2
SelfPhoneNG
A fully open source, self-hosted business phone system: extensions, desk phones and a browser softphone, voicemail to email, IVRs, ring groups, queues, office hours, call recording, live dashboard, SMS and phone provisioning. Bring your own SIP trunk and numbers (reference provider: voip.ms). Built on Asterisk 24 LTS + TypeScript + PostgreSQL 18.
Status: specification stage. Nothing is built yet.
- Start here if you are writing code (human or AI):
AGENTS.md - The full spec:
docs/spec/ - Build order:
docs/spec/09-roadmap.md
License: AGPL-3.0-or-later.
Description
Open source, self hosted alternative for 3cx
https://github.com/iamdoubz/selfphoneng
9.2 MiB
0 Stars
1 Watchers
0 Forks
Languages
TypeScript
83.9%
JavaScript
15%
Shell
0.7%
Dockerfile
0.3%