2-09 / Series
2-09 № 09 · 2026

Meetings and calendars,
on your own domain.

Teams meetings and shared calendars — on your own domain. Booking is written in 2-12

Meetings and shared calendars are generic functions. Teams calls and shared calendars alike are already shared as OSS. The previous chapter brought mail back to your own side. Here we stand up two things and place them on your own domain, on the machine handed to the AI in 2-02.

Booking (in place of Calendly and Microsoft Bookings) is not stood up in this chapter. With no OSS left that can be self-hosted for it, it is written in 2-12 as a small FastAPI app. It sits directly on this chapter's Jitsi and calendar and on the mail of 2-08.

Stand up Jitsi Meet for meetings

Meetings are Jitsi Meet. Participants need only a browser — no app install, no account. Send a link and the meeting starts. Raise hand, breakout rooms, a whiteboard, recording, and screen sharing all come standard.

Jitsi installs from its official apt repository (Debian 12 or newer). As 2-02 decided, no Docker. Three decisions go with it.

# after registering the official apt repository
sudo apt install jitsi-meet        # web, prosody, jicofo, and jvb run under systemd

Hand out meet.example.com with your own logo and your own domain.

Large meetings are handled by adding video bridges (JVB). That is "adding," not "standing up" — lining up servers to match the scale.

For serious teaching (attendance records, LMS integration) there is BigBlueButton, but it needs a dedicated Ubuntu machine and does not fit on the 2-02 box. Stand up a separate machine for the duration of a course and tear it down after (2-01). Most courses are fine on Jitsi.

Share calendars with Radicale

Shared calendars are CalDAV. Stand up the lightweight Radicale and Thunderbird connects. On phones, the iPhone's stock calendar speaks CalDAV; Android needs one app such as DAVx⁵. Radicale is in Debian 13's apt.

sudo apt install radicale          # runs under systemd; listens on localhost
meet.example.com { reverse_proxy localhost:8443 }   # Jitsi's nginx
cal.example.com  { reverse_proxy localhost:5232 }   # Radicale

Radicale's login is Radicale's own (2-05). Account names match the gate.

Migration is only the future

Moving off Teams or Google Calendar needs no project. Meeting links are disposable; there is nothing to move. For calendars, export only future events as .ics and import them into Radicale — a one-time operation. Recordings or chat worth keeping are inventoried in 2-15's information tidy-up and filed into the 2-07 home as files.

How to check you are done

This chapter is done when these four hold.

  1. From a browser on another PC you can join a meeting at meet.example.com, with no app and no account
  2. Two or more people join, and video, audio, and screen sharing work
  3. Thunderbird and a phone calendar show the same events over CalDAV, and an event entered on one appears on the other
  4. Seen from outside, the open ports are only 80, 443, ssh, 25/465/587/993 (2-08), 10000/UDP, and 5349/TCP
systemctl status jitsi-videobridge2 prosody jicofo radicale   # running under systemd
curl -sI https://meet.example.com | head -1                   # the meeting page answers

What the human holds

Values the human supplies

Actions the AI states before performing

Versions checked, and when

Summary

Meetings and calendars, on your own domain.

By now the foundation, the gate, the code, the documents, the mail, the meetings, and the calendars are in place. The next chapter builds the website that shows them to the outside.


Related articles