3 Commits

Author SHA1 Message Date
jp
e390e3a145 Separate JSON API backend + React+react-router frontend
- vm_api.py: pure FastAPI JSON API on :8098, CORS enabled
- vm-api.service: systemd unit for API backend
- frontend/: Vite + React 18 + react-router-dom 7 + TanStack Query
- React pages: messages, contacts, contact history, settings, login, logout
- Apache: /api/ proxy to :8098, DocumentRoot -> frontend/dist, SPA fallback
- Backward compat: old :8099 portal still running as fallback
2026-08-13 17:55:40 +01:00
jp
49bdd342c2 Remove node_modules from git; add to .gitignore 2026-08-13 17:42:59 +01:00
jp
857284abbf Initial build: Asterisk voicemail transcription + portal
- mailcmd replacement (vm_mailcmd.py): faster-whisper transcription (CPU int8),
  extractive summary + intent tags + spoken-digit number extraction,
  multipart/alternative HTML email, fail-safe relay of original message
- Telegram DM delivery (vm_telegram.py) with per-mailbox routing
- Caller-ID -> name (vm_contacts.py): file / google / carddav backends
- SQLite store (vm_store.py) with content-addressed audio
- FastAPI portal (vm_web.py): PIN login, list/play/delete, per-user settings,
  zero JS, loopback-only behind Apache TLS
- Backfill importer (vm_import.py) for existing spool recordings
- systemd unit, Apache vhost + certbot TLS, install.sh
- Docs: INSTALL, CONFIGURATION, ARCHITECTURE, OPERATIONS, SECURITY, TESTING

Verified end-to-end on mail.txt3.net: 157 historical messages backfilled,
live voicemail -> transcribed -> stored -> visible at https://vm.txt3.net.
2026-08-13 09:31:41 +01:00