Один экран для календарей всех мастеров и залов: Luna
Luna, self-hosted приложение с открытым кодом, собирает календари CalDAV, iCal и Google на одном экране. Разбираем, как это помогает студии, клинике и прокату, как ставится и почему пока рано ставить её в боевую работу: релиза и лицензии нет.
Расписание размазано по пяти календарям
В студии работают шесть мастеров. У двоих записи в Google Calendar, у одного календарь на собственном сервере, у администратора ссылка на общий файл. Залы живут в отдельной таблице. Чтобы ответить клиенту «в субботу после обеда есть окно?», администратор открывает пять вкладок и складывает картину в голове.
Ошибка здесь вопрос времени. Один мастер уехал на обучение и отметил это у себя, а в таблице залов этого нет. Двух клиентов записали в одно окно, и один из них узнал об этом на пороге.
Прикидка, помечаю её как оценку: пять календарей по три минуты каждое утро дают около пяти часов в месяц только на сверку. Плюс редкие, но дорогие накладки. Пересобирать всё в одну систему ради этого обычно рано, люди привыкли к своим календарям.
Что такое Luna и как она ставится
Luna, публичный проект Opisek на GitHub: репозиторий Opisek/luna. В описании стоит «Self-Hosted Calendar Aggregator and Frontend». Бэкенд написан на Go, данные хранятся в PostgreSQL 16. На 2 октября 2026 у репозитория 503 звезды и 22 форка, создан он в апреле 2024 года. Последние правки в основной ветке, которые я видел, касались разбора длительностей в iCal и обработки слабых ETag при работе с CalDAV.
Подключаются три типа источников: CalDAV, iCal и Google Calendar. Все они собираются в одном интерфейсе. Есть управление пользователями: в документации по API описаны регистрация, приглашения и административные настройки, а ещё регистрация OAuth-клиентов.
Ставится через Docker Compose, там три контейнера: фронтенд на порту 8080, бэкенд и база. Готовых официальных образов нет. Образы собирают из исходников командой make, а на Docker Hub лежат сторонние сборки, за которые автор не отвечает. Нужен обратный прокси с TLS, пример для nginx в документации есть.
Как это выглядит в студии, клинике и прокате
Мастера и администратор остаются в своих календарях. Luna забирает события оттуда и показывает общей картиной. Администратор видит субботу целиком, клиника видит кабинеты и врачей рядом. В прокате на один экран можно вывести бронь, выдачу и ремонт техники, если каждая из них ведётся в своём календаре.
Для клиники это значит, что регистратор не спрашивает у каждого врача, свободен ли он в четверг. Для студии с залами видно, что в зале на втором этаже в пятницу вечером ничего нет, и его можно предложить под аренду.
Переносить данные никуда не надо. Если завтра Luna перестанет подходить, календари мастеров остались на месте, потерялся только общий экран.
По API у проекта описаны создание, изменение и удаление событий, значит, правка из общего экрана задумана. Как именно это работает для каждого типа источника, я на живом стенде не проверял. Для iCal-ссылки правка невозможна по самой природе формата: это подписка на файл. Поэтому для записи нужны CalDAV или Google.
Что важно учесть
Здесь список длиннее, чем хотелось бы.
Лицензии нет. В корне репозитория лежат только README, Makefile, docker-compose.yml и три папки, файла LICENSE среди них нет, и GitHub лицензию не определяет. Без явного разрешения автора права на использование остаются за ним. Для личного эксперимента это нестрашно, для установки клиенту стоит сначала спросить автора.
Релизов и тегов нет. В документации по установке сказано, что проект официально не выпущен, пользоваться стоит с осторожностью, а до версии 1.0.0 возможны поломки и сброс базы. Автор один, срока выхода 1.0.0 он не называет.
В README прямо перечислено, что не готово: полная поддержка повторяющихся событий и вёрстка под маленький экран. Для салона это существенно: «каждый вторник» у мастера может показываться неверно, а с телефона пользоваться неудобно.
Права. Отдельных ролей вроде «администратор видит всё, мастер только своё» в документации я не нашёл. Известно, что глобальные настройки, приглашения и OAuth-клиенты доступны только администратору. Тонкую матрицу доступа придётся проверять руками.
Безопасность. Пароли к источникам хранятся в базе в зашифрованном виде, ключи лежат в каталоге данных бэкенда. В документации честно сказано: тот, кто получил и базу, и ключи (в том числе недобросовестный администратор сервера), сможет их расшифровать.
Русский язык. Файлов переводов в репозитории я не нашёл, поэтому русский интерфейс не заявляю. Что именно показывает интерфейс, проверяйте на тестовом стенде.
И последнее. Luna только показывает расписание. Предоплата, напоминания, лист ожидания и запись из мессенджера в ней не появятся. Об этом мы писали в материале про неявки, предоплату и напоминания.
Что можно сделать уже сейчас
Первое. Выпишите, где у вас живёт расписание: чьи календари, какой тип, кто их ведёт. Часто выясняется, что три из пяти уже в Google или поддерживают CalDAV, и подключать нечего.
Второе. Поднимите Luna на тестовом сервере и подключите два-три реальных календаря. Неделя наблюдения покажет, хватает ли вам повторяющихся событий и удобно ли администратору.
Третье. Если общий экран прижился, а записи клиентов всё ещё идут вручную, настройте запись отдельно. Для выездных бригад у нас есть разбор, как не записать мастера на два адреса, а для записи на своём домене подойдёт Cal.com.
Четвёртое. Если хотите без возни, мы разворачиваем такой стенд и связываем его с вашей записью под ключ. Это входит в автоматизацию бизнеса. Условия лицензии и вопрос, брать ли Luna в рабочую схему или подождать 1.0.0, обсуждаем до начала работ.
Частые вопросы
Нужно ли переносить календари в Luna?
Нет. Календари остаются там, где были, Luna подключается к ним как к источникам. Это главное отличие от внедрения новой системы записи.
Можно ли показывать расписание клиентам?
Для этого проект не предназначен. Это внутренний экран для персонала с входом по учётной записи. Клиентская запись с выбором времени и предоплатой делается отдельно.
Можно ли сейчас ставить Luna в боевую работу?
Осторожно. Автор сам называет проект невыпущенным, возможны поломки и сброс базы, лицензия не указана. Разумный вариант: тест на копии расписания, пока исходные календари остаются главными.
Коротко о главном
Luna решает узкую задачу: показать календари разных мастеров, залов и техники одним экраном, не трогая сами календари. Проект активный и с понятной документацией, но без релиза, без лицензии, с недоделанной вёрсткой под телефон и повторяющимися событиями.
Расписание разбросано по календарям, а записи клиентов идут вручную или через мессенджер? Напишите мне в Telegram слово «КАЛЕНДАРЬ». Посмотрим, где у вас живут календари, что можно собрать на одном экране и что связать с вашей записью.
Ещё open-source для бизнеса
Эта статья — часть каталога бесплатных решений, которые я разворачиваю на вашем сервере под ключ: CRM, аналитика, документы, почта, безопасность, магазины, AI.
Что я делаю для бизнеса
- Боты в Telegram, MAX, VK
- Автоматизация процессов и CRM
- Аналитика и дашборды
- Сайты и лендинги под ключ
Бесплатно: чек-лист «Готов ли ваш бизнес к 152-ФЗ»
12 пунктов, которые проверяют готовность за час: данные, согласия, уведомление в РКН, локализация, защита. Отметьте, что уже сделано, и увидите дыры, за которые сейчас штрафуют.
Готовы обсудить вашу задачу?
Бесплатная консультация — разберём, как внедрить это в вашем бизнесе под ключ. Без форм, пишите напрямую.
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


