My family video calling system

For the past three months, I’ve been working on a small side project that ended up becoming much more important to me than I initially expected.

I forked Cloudflare’s Orange Meets - their demo video-conferencing app built on Cloudflare Calls - and turned it into something I actually use regularly. I called the fork Family Meetings, because that’s exactly what it’s for: staying in touch with my family.

Orange Meets is a great demo and a solid starting point, but it’s still a demo. Once I started relying on it for real calls, a few rough edges became impossible to ignore. This project is essentially the result of fixing the things that kept breaking our conversations.

End-to-end encryption stability

The biggest issue was end-to-end encryption. In the original demo, encryption would often break when someone reconnected after a flaky network drop. Keys would fall out of sync, and the room could get stuck in a dead loop where people had to leave and rejoin one by one just to recover a working encryption state.

That was frustrating - especially when you’re talking to non-technical family members - so I rewrote the key synchronization logic to properly handle reconnects. Now, encryption survives temporary disconnects without any manual intervention.

Layout improvements

Another thing that stood out during daily use was the layout. I adjusted it based on how we actually use the app:

  • 1-on-1 calls - videos expand to fill the available space, instead of feeling oddly constrained
  • 3–5 participants - cleaner grid layouts that use screen real estate more efficiently
  • Mobile devices - layouts tuned specifically for smaller screens

These changes sound small, but they make calls feel much more natural.

Password protection

Originally, anyone with the link could join. That’s fine for a demo, but not great for something you actually use with family.

I added simple, site-wide password protection so only people with the password can access the app. The password is saved in the browser for 30 days, so returning users don’t have to re-enter it every time.

Password protection page

Usernames are also saved automatically, which turned out to be surprisingly helpful for less tech-savvy users.

Multi-language support

The main reason I started this project in the first place was language support. I wanted full Belarusian translation so my parents could use the app comfortably.

Once the internationalization groundwork was in place, it felt natural to keep going, so I added Ukrainian and Polish as well.

Currently supported languages:

  • Belarusian
  • English
  • Polish
  • Ukrainian

Users can switch languages using the selector in the top-right corner.

Home page in English Home page in Belarusian

The language preference persists across sessions, and all UI elements including the video room interface are fully translated.

Video room in English Video room in Belarusian

Open source

I’ve open-sourced all my changes. The repository is available at github.com/kariedo/family-meetings.

 

Useful links: