{"id":51180083,"url":"https://github.com/calcom/developer-starter-kit","last_synced_at":"2026-06-27T06:30:56.987Z","repository":{"id":364198735,"uuid":"1266821362","full_name":"calcom/developer-starter-kit","owner":"calcom","description":"Next.js starter for embedding Cal.com Platform — own every component, no SDK lock-in. Built with Cal Sans, Tailwind v4, shadcn-style primitives, and bun.","archived":false,"fork":false,"pushed_at":"2026-06-12T03:24:32.000Z","size":244,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-12T05:07:46.714Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://developer-starter-kit-cal.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/calcom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-12T01:35:32.000Z","updated_at":"2026-06-12T03:24:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/calcom/developer-starter-kit","commit_stats":null,"previous_names":["calcom/platform-starter"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/calcom/developer-starter-kit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calcom%2Fdeveloper-starter-kit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calcom%2Fdeveloper-starter-kit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calcom%2Fdeveloper-starter-kit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calcom%2Fdeveloper-starter-kit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/calcom","download_url":"https://codeload.github.com/calcom/developer-starter-kit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calcom%2Fdeveloper-starter-kit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34844344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-27T06:30:54.797Z","updated_at":"2026-06-27T06:30:56.978Z","avatar_url":"https://github.com/calcom.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cal.com Developer Starter Kit\n\nA Next.js template for embedding the Cal.com Developer SDK flows in your product, without the `@calcom/atoms` SDK. Every component lives in this repository, so you own the visuals, the markup, and the data layer end-to-end.\n\n[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fcalcom%2Fdeveloper-starter-kit\u0026env=CAL_API_KEY,NEXT_PUBLIC_CAL_USERNAME,NEXT_PUBLIC_BRAND_NAME\u0026envDescription=Your%20Cal.com%20API%20key%20and%20default%20username\u0026envLink=https%3A%2F%2Fapp.cal.com%2Fsettings%2Fdeveloper%2Fapi-keys)\n\n## What you get\n\n| Route | What it does |\n| --- | --- |\n| `/` | Landing page with shortcuts to every flow |\n| `/book/[username]/[eventSlug]` | Public booking widget — month calendar, time slots, attendee form, confirmation |\n| `/book/[username]/[eventSlug]?rescheduleUid=…` | Same widget in reschedule mode |\n| `/booking/[uid]` | Manage an existing booking — view, reschedule, cancel |\n| `/routing/[id]` | Config-driven routing that maps form responses to event types |\n\nEvery flow talks to the **Cal.com API v2** through a thin server-side client (`src/lib/cal-api/`). No client-side SDK. No `@calcom/atoms` dependency.\n\n## Stack\n\n- **Next.js 16** (App Router, RSC, Server Actions)\n- **React 19**\n- **Tailwind CSS v4** with CSS-first config\n- **coss/ui** primitives, copied into `src/components/ui/`\n- **Biome** for lint + format\n- **bun** for install + scripts\n- **TypeScript strict**\n- **react-day-picker v9** for the month calendar\n- **react-hook-form + zod** for the attendee form\n\n## Quickstart\n\n```bash\nbun install\ncp .env.example .env.local\n# Fill in CAL_API_KEY and NEXT_PUBLIC_CAL_USERNAME\nbun dev\n```\n\nOpen \u003chttp://localhost:3000\u003e.\n\n## Environment\n\n| Variable | Required | Description |\n| --- | --- | --- |\n| `CAL_API_KEY` | yes | API key from \u003chttps://app.cal.com/settings/developer/api-keys\u003e |\n| `CAL_API_URL` | no | Defaults to `https://api.cal.com/v2`. Override for self-hosted |\n| `CAL_API_VERSION` | no | Defaults to `2024-08-13` |\n| `NEXT_PUBLIC_CAL_USERNAME` | no | Default username used by the landing-page shortcuts |\n| `NEXT_PUBLIC_BRAND_NAME` | no | Replaces the brand label across the app |\n\n## Project layout\n\n```\nsrc/\n├── app/                      # Next.js routes\n│   ├── page.tsx              # landing\n│   ├── book/[username]/[eventSlug]/page.tsx\n│   ├── booking/[uid]/page.tsx\n│   └── routing/[id]/page.tsx\n├── components/\n│   ├── theme-provider.tsx\n│   └── ui/                   # coss/ui primitives, own them, edit them\n├── features/\n│   ├── booker/               # booking widget — every panel and step\n│   ├── booking/              # manage-booking flow\n│   └── routing/              # routing renderer\n└── lib/\n    ├── cal-api/              # typed Cal.com API v2 client (server-only)\n    ├── routing/              # local routing registry + evaluator\n    └── utils.ts\n```\n\nThe Booker is decomposed into the same panels you would build by hand:\n\n```\nfeatures/booker/\n├── booker.tsx                # orchestrator (steps, state)\n├── event-meta.tsx            # left panel — host, title, duration, timezone\n├── date-picker.tsx           # middle panel — month calendar\n├── time-slots.tsx            # right panel — slot list\n├── booking-form.tsx          # attendee form (name / email / notes)\n├── booking-confirmation.tsx  # success screen\n├── booker-skeleton.tsx       # loading state\n├── actions.ts                # server actions (fetch slots, create, reschedule)\n├── utils.ts                  # date / timezone helpers\n└── types.ts\n```\n\n## Routing\n\nThe starter ships with a **config-driven** routing flow (`src/lib/routing/registry.ts`). It mirrors the embedder-facing UX: collect responses, evaluate rules, send the visitor to the matching event type.\n\nThe Cal.com API v2 exposes routing forms only under the **organization** scope (`/organizations/{orgId}/routing-forms`). If you have org credentials, replace the local registry with `getOrgRoutingForms` and `getOrgRoutingFormResponses` calls — the renderer doesn't change.\n\nFor single-tenant use, edit `src/lib/routing/registry.ts` to define your fields and rules. Each rule maps response equality to either:\n\n- another booker page (`{ kind: \"event-type\" }`)\n- an external URL (`{ kind: \"url\" }`)\n- a final message (`{ kind: \"message\" }`)\n\n## Theming\n\nThe coss/ui primitives in `src/components/ui/` read CSS variables defined in `src/app/globals.css`. Tweak the `--primary`, `--background`, `--emphasis` tokens (and their `.dark` counterparts) and the entire app follows. Tailwind v4's `@theme inline` block wires those variables to utility classes.\n\n### Fonts\n\nThe starter uses **Cal Sans** (the Cal.com brand typeface) loaded via `next/font/local` in `src/app/layout.tsx`. The woff2 files live in `src/fonts/` and are exposed as `--font-sans` (UI body) and `--font-heading` (display headings). To swap for another font, replace the files in `src/fonts/` or switch to `next/font/google`.\n\n## Why not just use `@calcom/atoms`?\n\n`@calcom/atoms` is great when you want batteries-included scheduling and don't care about exact markup. This template targets the opposite: you own every line, swap any primitive, and have nothing to upgrade against. The trade-off is that you build the surface area you need — start with the Booker, add what comes next.\n\n## Scripts\n\n```bash\nbun dev          # next dev\nbun run build    # next build\nbun start        # next start\nbun typecheck    # tsc --noEmit\nbun check        # biome check --write\nbun lint         # biome lint\nbun format       # biome format --write\n```\n\n## License\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalcom%2Fdeveloper-starter-kit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcalcom%2Fdeveloper-starter-kit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalcom%2Fdeveloper-starter-kit/lists"}