Under the hood

How Connectfy is built.

Encryption happens in your browser. Everything behind it is built to carry sealed messages quickly, reliably and without ever needing to read them.

Your browser

Connectfy web appEncrypts and decrypts every message on your device

Edge

API gatewayHTTP + WebSockets
LiveKit SFUGroup call media
TURN relayCalls through firewalls

Microservices

AuthIdentity, sessions, 2FA
AccountProfiles, settings, privacy
RelationshipFriends, blocks
MessengerChats, groups, calls
NotificationsEmail, push
Cron jobsScheduled jobs
Kafka event bus · transactional outbox · dead-letter queue

Data

MongoDB
Neo4j
Redis
MinIO

Engineering choices

Why it's built this way.

  • Encryption in the client

    libsodium runs in your browser: a content key per message, sealed to each recipient device, with keys backed up in the passphrase-locked vault.

  • One public door

    The browser talks only to the API gateway. Every service behind it is private and reached over internal TCP.

  • Services that scale independently

    Identity, profiles, relationships and messaging are separate NestJS services, so a rush on one doesn't slow the others.

  • Events that don't get lost

    Side effects travel over Kafka. A transactional outbox means a change and its event are saved together, and a dead-letter queue keeps any failure for a retry.

  • A real social graph

    Friendships and blocks live in Neo4j, which also powers people search — built for questions like “who can reach whom”.

  • Calls that scale

    One-on-one calls go peer to peer, with a TURN relay when networks get in the way. Group calls run through a LiveKit SFU that forwards frames it can't decrypt.

  • Direct-to-storage files

    Encrypted files go straight from your browser to private object storage through short-lived signed links — no app server in between.

  • Scheduled cleanup

    Expired pins and mutes, ended sessions and deleted content are cleaned up by a dedicated job service, away from the request path.

  • Privacy on the server

    Profile fields are filtered by each person's privacy settings before a response leaves the server, not hidden by the app afterwards.

Built for the next million conversations.

Free, in your browser, in a minute. No phone number needed.