I've been working on this for a while and finally have some spare time to complete. You can find it here. I have been testing it locally with my landline and in the next few days I will be deploying it on my home server using Docker. I don't have a Raspberry Pi on hand (with full working GPIO pins -- the crucial ones are fried) so I can't guarantee the GPIO features were ported correctly (please create tickets with bugs you encounter). You can find the project here: https://github.com/foureight84/CallAttendantNext
This project builds upon the incredible effort Bruce started with functionality improvements and some new features to extend usability.
What's New vs. the Original Python Project
- Non-blocking call handling — async/await throughout, no blocking main thread
- Easier debugging — structured log events streamed to the browser via SSE; Debug Console page
- Piper TTS instead of WAV files — greetings are synthesized on demand from
.txt scripts; no per-voice audio files to manage
- ffmpeg voicemail encoding — recordings saved as MP3 (falls back to WAV if ffmpeg is unavailable)
- Updated Nomorobo scraping — adapted for their current website format
- Improved serial port handling — faster modem detection, reduced call response time
- Raspberry Pi GPIO LED support — toggle via
ENABLE_GPIO=true in .env
- Wild card permitted and block list
What's next:
- I need to build a migration strategy so that you can import your call logs, blocklist, permitted and voicemails over to the new project. If this is a necessary feature, I would recommend to wait for another week or two and when have this feature implemented.
- Extending attendant functionalities like checking voicemail from your cellphone. Self-hosting will always be the use case you'll never need to expose this service to the internet. I was thinking of using the traditional way that a few fancy answering machines used to have: calling your landline from another phone to access voicemail. Utilizing Caller ID to enable this menu when set phone number calls and use the key pad to navigate a simple menu to play new voicemails. This wouldn't have been possible with the old implementation but with Piper-TTS we should be able to dynamically generate voice and provide a robust experience.
- If you have any features you want added, open a "Feature Request" ticket at https://github.com/foureight84/CallAttendantNext and we can discuss feasibility of implementation.
- Integration with https://www.ipqualityscore.com/ for Caller ID screening as an alternative to NOMOROBO.
- Integration with Home Assistant
Stack
- Next.js 15 — frontend and API routes
- React 19 — settings, call log, whitelist/blacklist, voicemail UI
- ts-rest + zod — type-safe REST API contract
- SQLite via drizzle-orm + libsql
- serialport — serial communication with USB modem
- Piper TTS — real-time speech synthesis for greetings
- ffmpeg — voicemail encoding (MP3) and audio conversion
- Docker — containerized deployment
I've been working on this for a while and finally have some spare time to complete. You can find it here. I have been testing it locally with my landline and in the next few days I will be deploying it on my home server using Docker. I don't have a Raspberry Pi on hand (with full working GPIO pins -- the crucial ones are fried) so I can't guarantee the GPIO features were ported correctly (please create tickets with bugs you encounter). You can find the project here: https://github.com/foureight84/CallAttendantNext
This project builds upon the incredible effort Bruce started with functionality improvements and some new features to extend usability.
What's New vs. the Original Python Project
.txtscripts; no per-voice audio files to manageENABLE_GPIO=truein.envWhat's next:
Stack