Published model · 2026-09-03

cal.com architecture,
read from the code.

365,422 lines of source, 6,222 parts described, 10 areas and 18 customer paths. Scheduling infrastructure. Every line on this page comes from the model — open it and check any of them.

In numbers

What the model holds.

365,422Lines of source read
6,222Parts described
10Areas
1,306Screens
4,101Actions
467API routes
273Records
754Services
18Customer paths
4Status flows
9Rules
344 of 467Endpoints on no described path
Areas

The 10 heaviest areas of 10.

AreaScreensActionsAPIRecordsWhat it covers
features1061,377023The product core: booking creation, rescheduling, cancellation and confirmation, availability and slots, calendar sync and cache, webhooks, tasker…
api01,0381752API v2 (NestJS): the platform REST surface — versioned bookings, slots, schedules, event types, calendars and OAuth clients with their managed users…
web695155841The Next.js web application: public booking pages, the signed-in shell, bookings/event-types/availability screens, cron endpoints and the app-router…
app-store746534845The app store: calendar, video, CRM, payment and analytics integrations, each with its OAuth install flow, credential keys, event-type app metadata…
lib2938907Shared library code: date and time helpers, string and URL utilities, permission and constant definitions used across the server and the web app.
trpc32231560The tRPC viewer API: authenticated routers and handlers behind the web app — bookings, event types, availability, apps, calendars, out-of-office and…
platform13861486Platform atoms and types: the embeddable React components (booker, availability, event types) and the shared DTO/validation types the API v2 and…
Shared & root79990109Everything not owned by another package: the Prisma schema and its entities, embed core, seed scripts and root-level configuration.
emails7110000Transactional email and SMS templates plus the services that render and send booking, auth, team and billing notifications.
ui111600The design system: buttons, forms, dialogs, tables and layout primitives shared by the web app and the platform atoms.
Customer paths

What a person walks through, step by step.

18 paths are described in the model; the longest 12 are here, with how many areas each one crosses.

Book a time slot20 steps · 3 areas

End-to-end public booking: the booker page loads the event type and its slots, the visitor submits the booking form, the booking service validates limits and hosts,…

Cancel a booking12 steps · 3 areas

Cancellation: the request is validated and rate-limited, the booking (or the remaining recurring instances, or one seat) is marked CANCELLED, payments are refunded or a…

Collect payment for a booking11 steps · 4 areas

Paid bookings: the booking service creates a payment through the installed payment app, the booker is sent to the payment page, and the provider's webhook drives the…

Confirm or reject a booking request11 steps · 4 areas

The pending-request path: the booking is stored PENDING, the host is notified, and the host's confirm/reject decision either creates the calendar event and confirmation…

Connect a calendar10 steps · 3 areas

Calendar connection: the app store starts the provider OAuth flow, the callback stores the credential, the connected calendars are listed and defaulted, and the user…

Deliver a webhook10 steps · 2 areas

Webhook fan-out: subscribers matching the trigger, event type, team, organization or OAuth client are looked up, each payload is signed and either POSTed immediately or…

Keep external calendars in sync10 steps · 2 areas

Calendar cache and sync: a cron subscribes selected calendars to provider push channels, fetched events are folded into the calendar cache, cached busy times answer…

Mark a no-show and charge the fee10 steps · 2 areas

No-show handling: delayed tasks inspect the Cal Video session after the start time, hosts can mark attendees or themselves as no-show, the flags are written to the…

Publish a meeting recording10 steps · 1 areas

Recording delivery: the Daily webhook is verified and matched to the booking through its video reference, the booking is marked recorded, and RECORDING_READY /…

Reschedule a booking10 steps · 4 areas

Moving a booking to a new time: reschedule restrictions are checked, the old booking is cancelled in favour of a new one, the calendar and video events are updated in…

Sign up and onboard9 steps · 2 areas

Account creation: the signup endpoint validates the username, email and any team-invite token, refuses watchlisted emails, sends the verification mail, and the first…

Configure an event type8 steps · 2 areas

Event-type setup: a new event type is created from the list page, then the editor tabs write duration, locations, booking fields and limits, hosts, private links and app…

Rules

What the product enforces on its own.

9 rules are described; each one watches a record and changes something else when it moves.

Blocking a report writes a watchlist entrywatches BookingReport · reaches Watchlist · Booking · BookingReport

Reporting a booking cancels the upcoming instances, and blocking that report adds the booker's email or domain to the blocklist that later refuses their bookings and…

Booking actions write an audit rowwatches Booking · reaches Task · BookingAudit

Every booking action that changes state is queued as an audit task and consumed into a BookingAudit row with the resolved actor, so the booking's history can be replayed.

Calendar subscription refreshes the availability cachewatches SelectedCalendar · reaches CalendarCacheEvent · SelectedCalendar · Availability

Selected calendars that are due for a subscription get a provider watch channel, and every push or poll folds the fetched events into the cache that answers busy-time…

Cancelled booking cleans up its scheduled workwatches Booking · reaches BookingReference · WebhookScheduledTriggers · Task · Attendee

Cancelling a booking removes its integration events and every future job attached to it — scheduled webhook triggers and delayed no-show tasks — before the cancellation…

Confirmed booking creates its integration eventswatches Booking · reaches BookingReference · DestinationCalendar · Attendee

Confirming a pending booking is what actually creates the calendar entry, the video room and the CRM record, then sends the scheduled-meeting notifications.

External calendar deletion cancels the bookingwatches CalendarCacheEvent · reaches Booking · CalendarCacheEvent

A synced calendar event that disappears or is cancelled on the provider side cancels the matching Cal.com booking, but only when the calendar owner is the organizer.

No-show flag fans out to webhooks and CRMswatches Attendee · reaches Booking · Webhook · Contact

Marking an attendee or the host as a no-show updates the booking, notifies webhook subscribers and forwards the no-show to every CRM app configured for it.

Out-of-office entry blocks availabilitywatches OutOfOfficeEntry · reaches Availability · User · Webhook

An out-of-office period is expanded into blocked working days for the absent user, removing those slots from the booker and notifying the colleague who covers the…

Status flows

The states records move through.

Booking · features

Booking status

Pending → Awaiting host → Accepted → Rejected → Cancelled

5 states · 6 transitions

Payment · app-store

Booking payment state

Awaiting payment → Held → Paid → Refunded

4 states · 4 transitions

BookingReport · features

Booking report moderation status

Pending → Dismissed → Blocked

3 states · 2 transitions

Membership · features

Team membership acceptance

Invited → Accepted

2 states · 1 transitions

What the model says about itself

Answers nobody wrote down.

Computed from the model’s own connections, with the count behind each one.

How much of this product is built but unused?

74% of this product's API surface is dark: built and paid for, but part of no described customer path and consumed by no screen.

344 OF 467 ENDPOINTS · READ FROM 18 CUSTOMER PATHS DESCRIBED SO FAR

Where is it riskiest to make a change?

The riskiest place to change is “platform”: more of the product depends on platform-libraries than on anything else.

138 INBOUND DEPENDENCIES · COMPUTED FROM THE REACH GRAPH, NOT ESTIMATED

Where did the engineering effort actually go?

The deepest engineering investment is “features” — 25% of the product's mass. “ui” is compact and self-contained: the cheapest place to change.

1533 VS 118 OBJECTS · CHANGE-COST RATING = SIZE × CROSS-DOMAIN COUPLING

Which customer experience breaks first?

The most fragile customer experience is “Collect payment for a booking”: it crosses 4 domains in 11 steps — the first place integration breaks.

INTEGRATION-TEST PRIORITY №1 · DOMAINS COUNTED PER PATH STEP

Does the product lean on any one part?

One subsystem — Event Types 2024-06-14 Booking Inputs — alone carries 17 core objects. The product leans on it.

CONCENTRATION RISK · COUNTED FROM OWNERSHIP LINKS

Ask the model your own question →How these answers were scored →

Questions

About this model.

How was this cal.com architecture built?

GitMir read the public repository and established what the product does: its areas, screens, actions, API routes, records, customer paths, status flows and rules, with every statement traceable to the source it came from. Nothing on this page is written by hand; it is the published model, as of 2026-09-03.

Is it current?

This page is a snapshot of the published model. On a connected repository the model is updated as commits land, so people and AI agents work from the product as it is now rather than as it was when somebody last wrote it down.

Can I get this for my own repository?

Yes — connect a repository and GitMir builds the same thing for it: features, rules, customer paths and how they connect, available to people on the screen and to coding agents over MCP.

Supabase Studio architecture →OpenAI Codex architecture →

Get this for your
own product.