Cal.com: проект и люди
Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам
miki/calcom-proekt-i-lyudi · v1
Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам
Что это. Сервис, через который вам занимают время в календаре: у вас есть публичная страница, любой заходит и берёт свободный слот. Сам проект описывает себя так: «Scheduling infrastructure for absolutely everyone».
Возраст. Первый коммит — 10 марта 2021 года, автор Bailey Pumfleet, сообщение Initial commit from Create Next App, одиннадцать файлов; на GitHub репозиторий заведён 22 марта. Проект ведёт компания Cal.com, Inc.
Что случилось 15 апреля 2026. Тот же репозиторий стал другим проектом. PR #28903 «refactor: Cal.diy» — 4 080 файлов, +21 362 / −411 881 строк — убрал всё коммерческое, сменил лицензию с AGPL на MIT и переименовал calcom/cal.com в calcom/cal.diy. Старые ссылки перенаправляются сюда. CONTRIBUTING теперь начинается с предупреждения:
Cal.diy is a community-driven, open-source fork of Cal.com. Contributions made here do not get merged into Cal.com's production service — Cal.com is now closed-source.
Cal.diy — открытый форк Cal.com, который ведёт сообщество. Правки отсюда не попадают в рабочий сервис Cal.com: Cal.com теперь с закрытым кодом.
Тот PR влили с красными проверками, и это записано в ветке: «Force merging. We determined as a team that for this Cal.diy PR, these failures can be handled in follow-ups soon and/or are inevitable» — вливаем принудительно: команда решила, что эти падения либо починим следом, либо они неизбежны.
Размер. 48 100 звёзд, 15 000 форков, 13 100 влитых PR на сентябрь 2026. Открытых PR около трёхсот, открытых задач — 1 100, из них 212 с меткой 🚨 needs approval. Самые частые авторы коммитов — сооснователь Peer Richelsen (больше тысячи), Alex van Andel, Hariom Balhara и бот Crowdin: переводы въезжают в репозиторий как коммиты.
Правила — в CONTRIBUTING.md и в шаблоне PR.
Фича ждёт одобрения, баг — нет. Различие проведено явно:
For feature requests, please wait for a core team member to approve and remove the
🚨 needs approvallabel before you start coding or submitting a PR. For bugs, security, performance, documentation, etc., you can start coding immediately — even if the🚨 needs approvallabel is present.
Для новых возможностей дождитесь, пока кто-то из основной команды одобрит и снимет метку. Для багов, безопасности, производительности и документации можно начинать сразу — даже с меткой.
Задача должна стоять сама, без ссылок «куда-то ещё». Раздел так и называется — «Don't Just Drop a Link»:
A GitHub issue or PR should stand on its own — reviewers shouldn't have to chase information across multiple tools to understand the context.
Задача или PR должны быть самодостаточны: ревьюеру не должно быть нужно бегать по нескольким инструментам, чтобы понять контекст.
Рядом — «Assume Future-You Won't Remember» (считайте, что будущий вы не вспомнит) и «Treat It Like Documentation»: GitHub здесь называют «shared source of truth».
PR не больше пятисот строк и десяти файлов. Правило появилось в январе 2026-го (#27155) и сразу с рецептом, как резать: схема отдельно от логики, фронт отдельно от бэка, подготовительный рефакторинг — отдельным PR, и всё в порядке зависимостей.
Что срочно — сказано таблицей. Urgent — это «Core Bugs (Login, Booking page, Emails not working)»; «Confusing UX (but still functional)» — всего лишь Medium priority. Проект знает, что у него ломаться нельзя.
Самопроверка обязательна. В шаблоне PR раздел «Mandatory Tasks (DO NOT REMOVE)», и первый пункт: «I have self-reviewed the code (A decent size PR without self-review might be rejected)». А ниже — чеклист, написанный наоборот: «I haven't read the contributing guide», «My PR is too large» — и просьба удалить пункты, которые к вам не относятся. Что осталось, то и признание.
И одна строка, которая не меняется четыре с половиной года. В разделе «Testing» с 22 февраля 2022 года написано: «More info on how to add new tests coming soon» (тогда — с опечаткой «comming»).
Наблюдения из задач #6323 (2023) и #9044 (2023–2024), PR #6137 (2022) и #28993 (2026):
- Основатель сам заводит задачи и сам в них отвечает. Три строки: «a user is reporting being booked by bots». Вопросы — про продукт, а не про код: «is there a free service / open source?». И самая честная реплика: «i think we added a turnstile to booking page, right @sean-brydon?» — мне кажется, добавили, да? Не «сделано», а «не помню, спрошу».
- Свой PR едет за день. #6137 от сотрудника открыт в 05:05, одобрен в 15:36, влит в 16:13. Одиннадцать часов.
- Хотфикс — сначала, вопрос — потом. «can you try again? we made a hotfix» — задача закрыта и в тот же день открыта заново, потому что не помогло.
- Диагноз ставят точно, даже когда не чинят. «this is a really low hanging plus hard to fix issue» — мелочь, которую трудно починить — и это правда: за ней оказалась модель суток.
not plannedбез комментария — дважды в наших разборах. #6323 закрыта через год после первой жалобы, #9044 — когда все были уверены, что сделано. Ни в одной нет строки «почему».- Добровольцы приходят за часы, а их работа не едет. В мае 2023-го за сутки собрали обзор капч, тарифы и рабочую копию; в проект через год въехал другой код, от другого человека — и не на ту страницу.
- Ревью начинают боты. В #28993 два бота-ревьюера, три раунда замечаний с ответами на каждую реплику автора — и один человек с одной строкой: «Can you provide concrete evidence by reproducing this race». Через месяц без ответа PR закрыл третий бот.
- Шрамы остаются в коде.
// allow 23:59и-1в цикле — заплатки на границу суток видны три года спустя.
Что из этого следует для того, кто придёт со своей правкой. Внутри всё быстро: свой PR — за день, хотфикс — не спрашивая. Снаружи — метка needs approval, боты первыми, и долгие паузы, которые кончаются тихим not planned. Лучший способ быть услышанным здесь — принести цифру: «4000 bookings yesterday by a bot» сдвинуло задачу, закрытую семь месяцев назад.
Файл называется как класс, и класс говорит, чем он подпёрт:
Суффиксы через точку — .service.ts, .repository.ts — для новых файлов запрещены; .test.ts, .spec.ts и .types.ts остаются.
Сообщение коммита — тип, двоеточие, что сделано, номер PR в скобках: feat: Use Cloudflare Turnstile in booker (#18755), docs: needs approval label (#12177).
В описании PR — Fixes #XXXX или refs #XXXX; шаблон просит видеодемонстрацию или скриншоты «до и после» и раздел «How should this be tested?» с переменными окружения и минимальными данными.
Галочка «Allow edits from maintainers» — обязательна: команда правит чужие ветки сама.
Перед пушем — yarn build целиком: «Please ensure that you can make a full production build before pushing code».
Всё ниже — из документов проекта и из того, что видно в его ветках.
Сначала — понять, куда вы пришли. Ваш код останется в Cal.diy; в сервис Cal.com он не попадёт — так написано в первой строке CONTRIBUTING. Для личного экземпляра это не имеет значения, для «починить сервис, которым пользуюсь» — имеет.
Проверить, нет ли уже такого. Первое House Rule — «Prevent Work Duplication»: поискать в задачах и PR до того, как заводить своё.
Если это фича — ждать снятия метки. 🚨 needs approval стоит на 212 открытых задачах. Если баг — можно начинать сразу.
Уложиться в пятьсот строк. Больше — просят разрезать; в шаблоне PR есть пункт-признание «My PR is too large (>500 lines or >10 files) and should be split into smaller PRs».
Написать, как проверяли. «Tested locally with mock data and confirmed the flow works on staging» — образец из самого документа. По #28993 видно, что человек-ревьюер спросит именно это: доказательство, а не объяснение.
Не пропадать. По тому же PR: пометка stale пришла через девять дней после последней реплики, закрытие — через месяц. Открыть заново можно, но никто не откроет за вас.
Люди, встреченные в наших разборах этого проекта. Черта называется только вместе с поступком — с датой и ссылкой. Ник — главный, имя — из профиля; нет имени в профиле — только ник.
- pumfleet — Bailey Pumfleet, Cal.com. Первый коммит 10.03.2021.
- PeerRich — Peer Richelsen, сооснователь, самый частый автор коммитов. В #6323: 26.01.2023 — «can you try again? we made a hotfix», закрыл и в тот же день открыл заново, потому что не помогло; 22.05.2023 — «this is a really low hanging plus hard to fix issue». В #9044 сам завёл задачу и сам спросил: «i think we added a turnstile to booking page, right @sean-brydon?».
- emrysal — Alex van Andel, Cal.com. PR #6137 «Add 23:59 as a valid availability select option», 21.12.2022: открыт в 05:05, влит в 16:13 — одиннадцать часов.
- joeauyeung — Joe Au-Yeung. Одобрил #6137 в тот же день, 15:36.
- sean-brydon. Тот, кого основатель спросил «right?»; 682 коммита в репозитории.
- keithwillcode — Keith Williams. Turnstile в букере через сорок восемь дней после «нас заспамили» (#18755); принудительно влил #28903.
- hbjORbj — Benny Joo, Cal.com. Автор PR #28903 «refactor: Cal.diy».
- volnei — Volnei Munhoz, Cal.com. Лимит в пятьсот строк (#27155).
- ahmedsadman — Sadman Muhib. 18.11.2022 завёл #5587: расписание не переходит за полночь, ночная смена «gets totally wasted»; 07.01.2023 в #6323 сам приложил ссылку на починку — ту, которая ему не помогла.
- Udit-takkar — Udit Takkar. 08.12.2022 завёл #5929: смену 20:00–03:00 пришлось разбивать на две строки; в репозитории 570 его коммитов.
- inveve — Zachary Dorf. «We got spammed for like 4000 bookings yesterday by a bot» — и на следующий день сам нашёл, что капча стоит не на той странице.
- aashish0909 — Aashish Illa, scshiv29-dev — Shivam Deepak Chaudhary, jatinkh25 — Jatin Khatri, Bhavyaatrivedi. Хор добровольцев мая 2023-го: за сутки — обзор капч, тарифы и рабочая копия.
- Kfelts, без имени в профиле. Чужая запись в календаре под именем супруги, отменить нельзя.
- Akash504-ai — Akash Santra. Автор #28993: транзакция, потом
Serializable, потом отказ от повтора. - sahitya-chandra — Sahitya Chandra, collaborator. Единственный человек в ревью #28993: «Can you provide concrete evidence by reproducing this race».
- «Ночь, в которую нельзя записаться» — расписание не умеет переходить за полночь; починка добавила 23:59 и ничего не изменила; через год —
not planned, а заплатки в коде видны и в 2026-м. - «Проверка, которую проходят оба» — гонку в бронировании слота обернули в транзакцию, бот объяснил, почему это не замок, автор добавил
Serializableбез повтора, человек попросил доказательство — и PR закрылся за неактивностью. - «Мы вроде добавили, да?» — капчу поставили на регистрацию, а задача была про страницу записи; её закрыли, потому что все были уверены, что сделано; счёт — четыре тысячи записей за ночь.
Карточка собрана 02.09.2026 из открытых источников: репозиторий, документация проекта, переписка в PR и задачах. Фотографий и личных данных здесь нет и не будет. Нашли неточность или хотите, чтобы вас убрали, — напишите, поправим без вопросов.
Related lists
Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам
Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам
Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам
Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам
Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам
Как проект живёт и принимает чужие правки, и кто в нём встречался в разборах — по поступкам, датам и ссылкам

