Skip to content

Time estimation

Giacomo Sanchietti edited this page Oct 24, 2025 · 6 revisions

Choosing a Chat Engine for NethVoice

Overview

Cost evaluation for:

  • Selecting an engine among XMPP, Matrix, Mattermost
  • A UI integrated only in the CTI
  • A phone-island style UI (chat-island) that can be integrated in third-party projects, including Nethlink
  • Implementing the webservice to integrate chat with the Acrobits mobile app (CloudSoftphone)

UI (Independent of Chosen Backend)

Chat UI implementation for NethVoice CTI can be done in two ways:

  • Basic UI (CTI only)
  • Advanced UI (chat-island)

1. Basic UI (CTI Only Integration)

  • Minimal features (send/receive text messages, view online/offline status, message notifications, writing notification, emojii): ~360 hours
  • Chat rooms, groups, channels management: ~80 hours
  • File attachment management: ~80 hours

Subtotal: 480 hours + 20% design = 576 hours (~14 weeks)

2. Advanced UI

  • Minimal features (send/receive text messages, view online/offline status, message notifications, emojii): ~468 hours
  • Chat rooms, groups, channels management: ~104 hours
  • File attachment management: ~104 hours
  • Nethlink integration (show online/offline status and send messages directly from Nethlink): ~80 hours

Subtotal: 756 hours + 20% design = 907 hours (~23 weeks)

Javascript libraries


XMPP Backend (ejabberd)

Prerequisites

  • We already have a working ejabberd module in NethServer 8
  • Goal is to integrate it into NethVoice, not with external clients (e.g., Pidgin)
  • Push notifications needed only for Acrobits mobile app, not for other mobile apps

Tasks

  1. Alternative 1: Modify ejabberd module to allow multiple instances per node: ~40 hours
  2. Alternative 2 (Recommended): Integrate ejabberd container into NethVoice as a module: ~80 hours
  3. Group chat functionality with channel creation: ~40 hours
  4. File transfer (XEP-0363): ~10 hours
  5. Backend-CTI integration (room creation, message sending, message retrieval): ~160 hours

XMPP Estimated Time: 290 hours (excluding Alternative 1) (~4 weeks)

Additional Notes

  • Converse.js can be used as integrated web client on ejabberd port 5280
  • For push notifications outside Acrobits app, an XEP-0357 proxy is required. Candidates: fpush or MoongousePush

Mattermost Backend

Tasks

  1. Authentik module stabilization (probable core integration): ~80 hours
  2. Mattermost configuration for SSO with Authentik: ~16 hours
  3. Backend-CTI integration (room creation, message sending, message retrieval): ~120 hours

Mattermost Estimated Time: 216 hours (~3 weeks)


Matrix Backend

Tasks

  1. Module stabilization (backup/clone/move, documentation, repository publishing): ~80 hours
  2. Fix Dex template for SSO: ~60 hours
  3. Element configuration (restrict login to local Matrix instance only): ~40 hours
    • Most users won't use Element, so this could be skipped
  4. Backend-CTI integration (room creation, message sending, message retrieval): ~120 hours

Matrix Estimated Time: 300 hours (~4 weeks)


Chat Integration with Mobile App

Problem 1: Commands from Acrobits App to Chat Backend

Regardless of backend choice, implement a proxy server that communicates with the app and implements these Acrobits APIs:

Problem 2: Sending Push Notifications from Chat Backend to Acrobits App

Configure chat backend to send push notifications to Acrobits server via Push Notifications over HTTP using previously saved tokens.

Implementation depends on chosen backend.


XMPP (ejabberd)

Possible Solutions

Problem 1:

  • Implement proxy server exposing Acrobits APIs communicating with ejabberd via XMPP. Challenge: XMPP and MAM message retrieval interaction: ~160 hours

Problem 2:

  • Fork and extend fpush to support Acrobits push notifications: ~160 hours

XMPP Total: 320 hours


Mattermost

Possible Solutions

Problem 1:

Problem 2:

  • Option 1: Extend matterbridge to send notifications to Acrobits upon message receipt: ~80 hours
  • Option 2: Change Mattermost push URL to point to Traefik instance that sends notifications through proxy (/push endpoint, reads token from reporter, sends to Acrobits) then proxies original Mattermost server: ~40 hours

Mattermost Total: 160 hours (Option 1) or 120 hours (Option 2)


Matrix

Possible Solutions

Problem 1:

Problem 2:

  • Option 1: Use Matrix hookshot configured to call proxy for sending Acrobits notifications: ~80 hours
  • Option 2: Change Matrix push URL to point to Traefik instance that sends notifications through proxy (/push endpoint, reads token from reporter, sends to Acrobits) then proxies original Matrix server: ~40 hours

Matrix Total: 160 hours (Option 1) or 120 hours (Option 2)


Time Estimates Summary

Backend + Acrobits Integration Only

Engine Estimated Time Duration
Mattermost (Option 2 notifications) 336 hours ~5 weeks
Matrix (Option 2 notifications) 420 hours ~6 weeks
XMPP 610 hours ~8 weeks

With Basic UI

Engine Estimated Time Duration
Mattermost Complete 912 hours ~23 weeks
Matrix Complete 978 hours ~24 weeks
XMPP Complete 1186 hours ~30 weeks

With Advanced UI

Engine Estimated Time Duration
Mattermost Complete 1243 hours ~31 weeks
Matrix Complete 1327 hours ~33 weeks
XMPP Complete 1517 hours ~38 weeks