Backend Developer for Chat App Features
Budget / Salary$250–750
TypeFreelance project
LocationRemote
Posted3 hours ago
We are seeking an experienced Backend Developer to implement new messaging, media, privacy, and VoIP signaling, Screen Sharing features into our existing WhatsApp-like communication platform.
Tech Stack:
Backend: Node.js, Fastify, PrismaORM, MySQL
Real-time & Media: WebSockets, Mediasoup (Audio/Video calls)
Note: You will only be responsible for the backend development (REST APIs, WebSocket events, database schema updates, background jobs, and Mediasoup signaling). Our mobile development team will handle all front-end/app integration.
1. Chat & Messaging Module**
* **Message Reactions & Replies:**
* Add API endpoints and WebSockets/Socket events for attaching reactions (emoji) to specific `message_id`s.
* Support threaded replies by referencing `parent_message_id` in the message creation payload.
* **Message Editing:**
* Allow sender to update message content within a 10-minute window (`created_at` validation). Reject edits after 10 minutes.
* **Message Deletion:**
* Implement soft deletion (`is_deleted` flag). Return a standardized placeholder text/status for deleted messages in chat history APIs so the client can apply custom styling.
* Support hard/soft deletion of group conversations on a per-user basis (user-level chat visibility flag).
* **Ephemeral Messaging (Auto-Erase & Disappearing):**
* **View-Once (Auto-Erase):** Add a flag to immediately wipe message content from DB/storage once read receipts are acknowledged by both sides.
* **Disappearing Messages:** Support timer settings (`1h`, `6h`, `24h`, `7d`, `30d`, `90d`). Schedule background cleanup jobs (e.g., Redis TTL or Cron) to hard-delete expired messages for both sender and recipient.
2. Media & File Management**
* **File Metadata & Forwarding:**
* Preserve original file metadata (`original_filename`, `mime_type`, `file_size`) on upload.
* Create a message forwarding endpoint that duplicates file/media attachment references without re-uploading.
* **Media Album Grouping:**
* Accept batch uploads and assign a unified `media_group_id` or array of attachment IDs within a single message object.
* **Compression & Quality Options:**
* Expose upload parameters/endpoints handling both original quality files and server-side/client-side compressed variants.
### **3. Privacy & Security Policies**
* **Live Location Sharing:**
* Implement real-time location streaming over WebSockets with configurable expiration durations (`1h`, `3h`, `6h`, `24h`).
* Obfuscate/encrypt structural location URLs on the backend.
* **Private Chat Flags:**
* Add a `is_private_chat` status flag in conversation schemas. Deliver this flag via API so mobile clients can enforce restrictions (blocking screenshots, file downloads, text copying, and forwarding).
4. Calling & VoIP Signaling System**
* **Group Calling Logic & Constraints:**
* **Member Count Limitation (Group Call Visibility Flag):**
* Include a boolean flag `is_group_call_enabled` in the group metadata/details API response.
* **Rule:** Set `is_group_call_enabled = false` if `total_group_members >= 30`. This signals the client app to completely hide the group call button.
* **Max Participant Cap (Dynamic Room State via WebSockets):**
* Enforce a maximum limit of **20 active participants** per call room.
* Track current active participant count on the backend.
* When the active count reaches 20, emit a real-time socket event (e.g., `call_room_full` or updated `room_capacity_status`) to all remaining unjoined group members.
* This event informs the client app to immediately hide or disable the "Join Call" button for unjoined members while the call is full.
* If a participant leaves and the count drops below 20, emit an updated state event to re-enable the "Join Call" button for unjoined members.
* **Mid-Call Invitations:**
* Support adding new participants dynamically to an active call room up to the 20-participant cap.
5. Screen Sharing
*Develop as zoom or google meet premium control. (Mute all, audio lock, video lock, restricted presentation, make co- host, remove co-host, unmute single participant, hand rise, share screen, react, chat, photo, video, file share when meeting
*Extra control for creator: Per minute rate call rate. Participants pay call rate from Main Wallet, Creator Earn to Main Wallet (deduct 6% as platform charge)
*Meeting link create: Company charge from creator per hour as platform fee, $1/2/3/ Billed per hourly.
*When creator set call rate 0 (Zero) that means participants no need charge.
More information will be provided after disscussion.
Tech Stack:
Backend: Node.js, Fastify, PrismaORM, MySQL
Real-time & Media: WebSockets, Mediasoup (Audio/Video calls)
Note: You will only be responsible for the backend development (REST APIs, WebSocket events, database schema updates, background jobs, and Mediasoup signaling). Our mobile development team will handle all front-end/app integration.
1. Chat & Messaging Module**
* **Message Reactions & Replies:**
* Add API endpoints and WebSockets/Socket events for attaching reactions (emoji) to specific `message_id`s.
* Support threaded replies by referencing `parent_message_id` in the message creation payload.
* **Message Editing:**
* Allow sender to update message content within a 10-minute window (`created_at` validation). Reject edits after 10 minutes.
* **Message Deletion:**
* Implement soft deletion (`is_deleted` flag). Return a standardized placeholder text/status for deleted messages in chat history APIs so the client can apply custom styling.
* Support hard/soft deletion of group conversations on a per-user basis (user-level chat visibility flag).
* **Ephemeral Messaging (Auto-Erase & Disappearing):**
* **View-Once (Auto-Erase):** Add a flag to immediately wipe message content from DB/storage once read receipts are acknowledged by both sides.
* **Disappearing Messages:** Support timer settings (`1h`, `6h`, `24h`, `7d`, `30d`, `90d`). Schedule background cleanup jobs (e.g., Redis TTL or Cron) to hard-delete expired messages for both sender and recipient.
2. Media & File Management**
* **File Metadata & Forwarding:**
* Preserve original file metadata (`original_filename`, `mime_type`, `file_size`) on upload.
* Create a message forwarding endpoint that duplicates file/media attachment references without re-uploading.
* **Media Album Grouping:**
* Accept batch uploads and assign a unified `media_group_id` or array of attachment IDs within a single message object.
* **Compression & Quality Options:**
* Expose upload parameters/endpoints handling both original quality files and server-side/client-side compressed variants.
### **3. Privacy & Security Policies**
* **Live Location Sharing:**
* Implement real-time location streaming over WebSockets with configurable expiration durations (`1h`, `3h`, `6h`, `24h`).
* Obfuscate/encrypt structural location URLs on the backend.
* **Private Chat Flags:**
* Add a `is_private_chat` status flag in conversation schemas. Deliver this flag via API so mobile clients can enforce restrictions (blocking screenshots, file downloads, text copying, and forwarding).
4. Calling & VoIP Signaling System**
* **Group Calling Logic & Constraints:**
* **Member Count Limitation (Group Call Visibility Flag):**
* Include a boolean flag `is_group_call_enabled` in the group metadata/details API response.
* **Rule:** Set `is_group_call_enabled = false` if `total_group_members >= 30`. This signals the client app to completely hide the group call button.
* **Max Participant Cap (Dynamic Room State via WebSockets):**
* Enforce a maximum limit of **20 active participants** per call room.
* Track current active participant count on the backend.
* When the active count reaches 20, emit a real-time socket event (e.g., `call_room_full` or updated `room_capacity_status`) to all remaining unjoined group members.
* This event informs the client app to immediately hide or disable the "Join Call" button for unjoined members while the call is full.
* If a participant leaves and the count drops below 20, emit an updated state event to re-enable the "Join Call" button for unjoined members.
* **Mid-Call Invitations:**
* Support adding new participants dynamically to an active call room up to the 20-participant cap.
5. Screen Sharing
*Develop as zoom or google meet premium control. (Mute all, audio lock, video lock, restricted presentation, make co- host, remove co-host, unmute single participant, hand rise, share screen, react, chat, photo, video, file share when meeting
*Extra control for creator: Per minute rate call rate. Participants pay call rate from Main Wallet, Creator Earn to Main Wallet (deduct 6% as platform charge)
*Meeting link create: Company charge from creator per hour as platform fee, $1/2/3/ Billed per hourly.
*When creator set call rate 0 (Zero) that means participants no need charge.
More information will be provided after disscussion.
Apply on Freelancer →
Project sourced from Freelancer.com. Applications happen directly on the original platform — we never collect your data.