THE UNIFIED PLATFORM BIBLE — ADDENDUM 09
WebaCom · WebaCall — Media Saving and Video Calls — July 2026
Version: 1.0
Date: July 7, 2026
Author: Alain Bessette, CFO/Product Owner, ABI Conglomerate
Domain: GoWeBa.com
Status: Official strategic addendum — Binding specification
Constraints: ZERO data loss · ZERO force-reset · ZERO service interruption
⚠️ CRITICAL NOTICE
This addendum has the SAME authority as Part 1, Part 2, and all previous addendums.
All features described are deployed in production and saved as checkpoints.
No incompatible schema modifications were made.
📋 TABLE OF CONTENTS
- Overview
- Phase I-5g — Save Media to WebaDrive
- Phase J — WebaCall with Jitsi Meet
- Technical Architecture
- Key Modified Files
- Roadmap — Evolution to Twilio
<a id="overview"></a>
SECTION 1: OVERVIEW
This addendum documents two major new features delivered on July 7, 2026, strengthening the WebaCom module (team messaging):
| Feature | Phase | Description |
|---|---|---|
| Media Saving → WebaDrive | I-5g | Any content shared in WebaCom (photos, videos, audio, files) can be saved to WebaDrive with one click |
| WebaCall (Jitsi Meet) | J | Audio and video calls integrated into conversations (DM + channels) via Jitsi Meet |
Design Principles
- Zero download: Saving to WebaDrive uses intra-bucket S3 copy (no download/re-upload)
- Determinism: Jitsi rooms are generated from a SHA-256 hash of the conversation ID — same conversation = same room
- Trilingual: All interfaces support French, English, and Spanish
- No schema changes: Both features use existing fields (
contentType,metadata Json)
<a id="save-to-drive"></a>
SECTION 2: PHASE I-5g — SAVE MEDIA TO WEBADRIVE
2.1 Problem Solved
Users regularly share photos, videos, voice messages, and files in WebaCom. Before this phase, these media remained confined to the conversation without the ability to organize them in WebaDrive for later access or filing.
2.2 Solution Implemented
A "Save" button appears on every type of media shared in WebaCom conversations. With one click, the file is copied to an automatically created "WebaCom" system folder in the user's WebaDrive.
2.3 Detailed Features
2.3.1 Backend API
Route: POST /api/webacom/media/save-to-drive
| Parameter | Type | Description |
|---|---|---|
cloudStoragePath | string | S3 path of the source file |
fileName | string | Name of the file to save |
mimeType | string | File MIME type |
fileSize | number? | Size in bytes (optional, retrieved via HeadObject if absent) |
Behavior:
- Authentication required (
requireAuth()+getOrgScope()) - Auto-creates the "WebaCom" system folder (type
SYSTEM_DEFAULT, cyan color, MessageCircle icon) - Intra-bucket S3 copy via
CopyObjectCommand— no network download - Duplicate detection (checks
description contains 'webacom-source:{path}'before creating) - Creates a
FileAssetrecord with source tracking - Serialized
BigInthandling forsizeBytes
2.3.2 Storage Utilities Added
Two new functions in lib/storage.ts:
| Function | Description |
|---|---|
copyObjectInS3(sourceKey, destKey) | Intra-bucket S3 copy — no network transfer |
headObject(key) | Retrieves size + MIME type without downloading content |
2.3.3 User Interface
The save button appears on four content types in WebaCom message bubbles:
| Content Type | Button Position | Note |
|---|---|---|
| Images | Pill button below filename | Next to download button |
| Files (PDF, DOC, etc.) | Pill button below filename | Next to download button |
| Videos | Pill button in action row | Next to "Transcribe" |
| Audio | Pill button in action row | Next to "Transcribe" |
3 visual states:
| State | Icon | Text | Style |
|---|---|---|---|
| Ready | HardDriveDownload | Save to Drive | Normal |
| Saving | Spinner | Saving... | Animated |
| Done | Check | Saved | Green ✓ |
<a id="webacall"></a>
SECTION 3: PHASE J — WEBACALL WITH JITSI MEET
3.1 Problem Solved
Organization members communicate via WebaCom (text, audio, video, files), but had no integrated way to launch a voice or video call directly from a conversation.
3.2 Solution Implemented
WebaCall integrates Jitsi Meet (open-source video conferencing platform) directly into WebaCom. Two call buttons (audio + video) appear in the header of every conversation, and a rich call card is displayed in the message thread.
3.3 Detailed Features
3.3.1 Call Buttons in Chat Header
| Button | Icon | Action | Position |
|---|---|---|---|
| Audio call | Phone (blue) | Launches a Jitsi audio call | Header, before SSE indicator |
| Video call | Video (green) | Launches a Jitsi video call | Header, before SSE indicator |
Behavior:
- Available on all conversation types: DM (1-to-1) and Channels (group)
- Cross-organization support (
isCrossOrgconversations) - Loading spinner during initialization
- Opens Jitsi Meet in a new browser tab
3.3.2 Backend API
Route: POST /api/webacom/conversations/[id]/call
| Parameter | Type | Description |
|---|---|---|
callType | 'audio' | 'video' | Type of call to start |
Algorithm:
- Authentication (
requireAuth()+getOrgScope()) - Membership verification (supports cross-org)
- Deterministic room name generation:
SHA-256(conversationId) → first 12 characters → "GoWeBa-{hash12}" - Creates a
WebaComMessagewith:contentType = 'call'metadata = { jitsiUrl, roomName, callType, startedBy, startedByName, startedAt }
- Updates conversation preview + unread counts
- Returns created message + Jitsi URL
Room URL: https://meet.jit.si/GoWeBa-{hash12}
Key property: Room names are deterministic — the same conversation always generates the same room. Participants can leave and rejoin at any time.
3.3.3 Call Card in Messages
When a call is started, a rich card appears in the message thread:
| Element | Audio | Video |
|---|---|---|
| Icon | PhoneCall in blue circle | Video in green circle |
| Title | Audio call | Video call |
| Subtitle | Started by [name] | Started by [name] |
| Action | "Join" button with ExternalLink icon | "Join" button with ExternalLink icon |
3.3.4 Jitsi Meet Capabilities
| Feature | Supported | Notes |
|---|---|---|
| 1-to-1 calls | ✅ | Via DM |
| Group calls | ✅ | Via channels — up to 75+ participants |
| Audio only | ✅ | Camera can be disabled in Jitsi |
| HD video | ✅ | Adaptive resolution based on bandwidth |
| Screen sharing | ✅ | Native Jitsi feature |
| Encryption | ✅ | TLS + SRTP (optional end-to-end) |
| Recording | ❌ | Not available on public Jitsi servers |
| Transcription | ❌ | Not available on public Jitsi servers |
<a id="architecture"></a>
SECTION 4: TECHNICAL ARCHITECTURE
4.1 No Schema Changes
Both features were implemented without any Prisma schema modifications. They leverage existing fields on the WebaComMessage model:
| Field | Type | Usage |
|---|---|---|
contentType | String @default("text") | New value: 'call' (WebaCall) |
metadata | Json? | Structured metadata: Jitsi URL, call type, etc. |
4.2 Security
- All APIs require authentication (
requireAuth()) - Conversation membership verification before any action
- Cross-organization conversation support (
isCrossOrg) - Duplicate detection for WebaDrive saving
- Intra-bucket S3 copy (no data exposure in transit)
<a id="files"></a>
SECTION 5: KEY MODIFIED FILES
5.1 Phase I-5g — Media Saving
| File | Action | Description |
|---|---|---|
lib/storage.ts | Modified | Added copyObjectInS3(), headObject() |
app/api/webacom/media/save-to-drive/route.ts | New | Save to WebaDrive API |
app/(app)/webacom/webacom-client.tsx | Modified | "Save" buttons on all media types |
5.2 Phase J — WebaCall
| File | Action | Description |
|---|---|---|
app/api/webacom/conversations/[id]/call/route.ts | New | Jitsi call initiation API |
app/(app)/webacom/webacom-client.tsx | Modified | Call buttons in header, rich call card |
<a id="roadmap"></a>
SECTION 6: ROADMAP — EVOLUTION TO TWILIO
WebaCall currently uses Jitsi Meet (free public servers) for video conferencing. The architecture is designed to evolve to Twilio when advanced features are needed.
6.1 Current Phase J (Jitsi Meet)
| Aspect | Status |
|---|---|
| Audio/video calls (1-to-1 and group) | ✅ Deployed |
| Screen sharing | ✅ Via Jitsi |
| Call card in WebaCom | ✅ Deployed |
| Cost | Free |
6.2 Planned Phase J-v2 (Twilio)
| Feature | Description |
|---|---|
| Call recording | Auto-save to WebaDrive |
| Auto-transcription | Reuses existing I-5a pipeline: /api/webacom/media/transcribe |
| Translation | Reuses existing I-5a pipeline: /api/webacom/media/translate |
| Full history | Detailed call log with duration, participants, status |
| Phone numbers | PSTN calls via existing Twilio lines |
Note: GoWeBa already uses Twilio for telephony and SMS, and SendGrid for emails. Migration to Twilio for video conferencing is part of the unified Twilio/SendGrid platform consolidation strategy.
📝 VERSION HISTORY
| Version | Date | Changes |
|---|---|---|
| 1.0 | July 7, 2026 | Initial version — Phase I-5g + Phase J |
End of Addendum 09 — WebaCom · WebaCall — July 2026