It runs on a dedicated server with a Node.js/Express API + PostgreSQL backend.
The Android app syncs messages, contacts, and call history, and you read/send them from a native Mac app or web client. Your messages never touch Google, Apple, or any third-party cloud.
Key technical decisions: - E2EE with Signal Protocol for message encryption - WebRTC for video/audio calls between devices - MMS attachments stored on Cloudflare R2 via presigned URLs - WebSocket for real-time message delivery + delivery status tracking - Firebase Auth for identity only — message data is fully separate
Stack: Kotlin (Android), Swift (Mac), Next.js (Web), Express + PostgreSQL (Server)
What it does:
- Read/send SMS and MMS from Mac or browser
- Full contact and call history sync
- Video and audio calling via WebRTC
- File Transfer between your devices
- Spam filtering and scheduled messages
Free tier: 200 messages/month. Paid removes limits. Downloads: https://sfweb.app/download
Would love feedback on the architecture especially the E2EE implementation and the MMS sync approach.