When we started Meetario, a scheduling app for people who get paid per session, every booking needed a video link. Asking users to pay for Zoom on top of their booking tool felt wrong, so we self-hosted Jitsi Meet and made it look and behave like part of our product.
Here's what that took.
1. One room per booking, protected by JWT
Jitsi rooms are public by default: anyone with the URL can join. We enabled JWT authentication on Prosody and disabled guest access. When someone opens their meeting link, our backend checks who they are (the host via their session, the attendee via a signed URL from the confirmation email) and redirects them to the Jitsi room with a short-lived token:
room: the booking's room name
context.user: email and display name from the booking
features.moderator: true for the host only
The display name is pre-filled from the booking, so attendees never type it again.
2. Branding without forking jitsi-meet
We didn't want to maintain a fork of the frontend.…