The Agent Skill that builds a whole booking website on Opencals — pick an official Next.js template, scaffold, wire availability and checkout, rebrand, and deploy to Vercel.
The build skill. Install it when you want an agent to stand up a complete booking
website — not just call the API. It picks the closest official template,
scaffolds it, wires it to a store, restyles it to your brand, and deploys it. For
exact API calls it defers to the opencals-storefront-api skill.Repo:github.com/letsopencals/skills ·
Install:see the overview
Choosing a template by booking shape (people vs resources, groups, multi-location).
The workflow: scaffold → configure env → understand the SDK wiring → rebrand → verify → deploy to Vercel.
Resource-booking (courts, lanes, rooms, equipment): the three conflict rules, allowCustomDuration, and the units × time grid strategy, and multi-location resources with one availability read per location — the VOLT template is the worked example.
Rentals by the day (cars, boats, equipment, villas): 1-day base duration with custom duration on a 24/7 schedule, merged availability ranges with a client-side fit, 00:00-aligned slots, handover details as custom attributes. The NOIR Drive template is the worked example.
Nightly stays (villas, cabins, guest houses, rooms): a one-night base with custom duration and fixed check-in/check-out times that the API enforces, turnover days, guest and arrival details as custom attributes. The Bali Villa Rentals template is the worked example.
Schools and classes (languages, music, coding, tutoring): subjects as collections, levels as variants, teachers as staff, seats left from slot availability, and the online location’s link for a Join button. The Fluently template is the worked example.
Fitness and Pilates studios (reformer, yoga, barre, spin): one variant per class × studio × instructor capped at the beds in the room, Full classes inferred from each series’ weekly pattern because the API drops full slots, privates sharing a product pool, and dated workshops. The Tensile template is the worked example.
Customising: colour/font tokens, siteConfig, and what comes from the API vs. what you edit in code.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Opencals Developer Docs","description":"Documentation for the Opencals Storefront API — REST booking API, TypeScript SDK, and open-source booking website templates for building custom booking experiences.","colors":{"primary":"#FAFAFA","light":"#FAFAFA","dark":"#000000"},"logo":{"light":"https://mintcdn.com/opencals/u-hilaMvCUwjSvKO/logo/logo-dark.svg?fit=max\u0026auto=format\u0026n=u-hilaMvCUwjSvKO\u0026q=85\u0026s=33fe9ed8c6af758fbed7d69d6ea8cf49","dark":"https://mintcdn.com/opencals/u-hilaMvCUwjSvKO/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=u-hilaMvCUwjSvKO\u0026q=85\u0026s=e2712dc0035a3df419c8cbc7cfb6ee18","href":"https://opencals.com"},"favicon":"https://mintcdn.com/opencals/vw6EDU318jAxiFur/logo/logo.svg?fit=max\u0026auto=format\u0026n=vw6EDU318jAxiFur\u0026q=85\u0026s=6a41a654f0a05688873128d57550ee54","appearance":{"default":"dark","strict":true},"background":{"color":{"light":"#FAFAFA","dark":"#09090B"}},"navbar":{"links":[{"href":"https://www.npmjs.com/package/@opencals/storefront-sdk","label":"npm SDK"},{"href":"https://github.com/letsopencals","label":"GitHub"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.opencals.com"}},"footer":{"socials":{"github":"https://github.com/letsopencals","website":"https://opencals.com"}},"search":{"prompt":"Search the docs..."},"seo":{"metatags":{"og:site_name":"Opencals Developer Docs","og:type":"website","twitter:card":"summary_large_image","keywords":"booking API, scheduling API, booking SDK, headless booking, booking infrastructure, open source booking templates"},"indexing":"navigable"},"fonts":{"family":"Geist"},"icons":{"library":"lucide"},"styling":{"codeblocks":{"theme":{"light":"github-light","dark":"github-dark-default"}},"latex":false},"integrations":{"clarity":{"projectId":"vs41kwf7m5"}},"contextual":{"options":["copy","view","chatgpt","claude","download-spec"],"display":"header"},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"opencals","hasAudioNarration":false,"actualSubdomain":"opencals","customDomains":["opencals.com"],"gitSource":{"type":"github","owner":"letsopencals","repo":"frontend","deployBranch":"main","contentDirectory":"apps/landing/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"487090e2-ffdb-4900-9ae4-ffe306794915","liveDeploymentHistoryId":"6ade68eca5087fd650cc6329","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ade68eca5087fd650cc6329"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ade68eca5087fd650cc6329","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"API Reference","count":72},{"language":"default","tag":"Endpoints","count":71},{"language":"default","tag":"Changelog","count":21},{"language":"default","tag":"Guides","count":11},{"language":"default","tag":"Auth","count":11},{"language":"default","tag":"Appointments","count":10},{"language":"default","tag":"Cart","count":10},{"language":"default","tag":"Products","count":10},{"language":"default","tag":"Open Source","count":9},{"language":"default","tag":"Templates","count":9}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"ai-agents/build-booking-site-skill","slug":"/ai-agents/build-booking-site-skill","pageMetadata":{"title":"opencals-build-booking-site skill","description":"The Agent Skill that builds a whole booking website on Opencals — pick an official Next.js template, scaffold, wire availability and checkout, rebrand, and deploy to Vercel.","icon":"layout-template","href":"/ai-agents/build-booking-site-skill"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"The Agent Skill that builds a whole booking website on Opencals — pick an official Next.js template, scaffold, wire availability and checkout, rebrand, and deploy to Vercel.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,Heading}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The build skill. Install it when you want an agent to stand up a complete booking\nwebsite — not just call the API. It picks the closest official template,\nscaffolds it, wires it to a store, restyles it to your brand, and deploys it. For\nexact API calls it defers to the `,_jsx(_components.a,{href:`/ai-agents/storefront-api-skill`,children:`opencals-storefront-api skill`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Repo:`}),` `,_jsx(_components.a,{href:`https://github.com/letsopencals/skills`,children:`github.com/letsopencals/skills`}),` ·\n`,_jsx(_components.strong,{children:`Install:`}),` `,_jsx(_components.a,{href:`/ai-agents/overview#install`,children:`see the overview`})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-it-covers`,children:`What it covers`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Choosing a template`}),` by booking shape (people vs resources, groups, multi-location).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The workflow`}),`: scaffold → configure env → understand the SDK wiring → rebrand → verify → deploy to Vercel.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Resource-booking`}),` (courts, lanes, rooms, equipment): the three conflict rules, `,_jsx(_components.code,{children:`allowCustomDuration`}),`, and the units × time grid strategy, and multi-location resources with one availability read per location — the `,_jsx(_components.a,{href:`/open-source/volt`,children:`VOLT template`}),` is the worked example.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Rentals by the day`}),` (cars, boats, equipment, villas): 1-day base duration with custom duration on a 24/7 schedule, merged availability ranges with a client-side fit, 00:00-aligned slots, handover details as custom attributes. The `,_jsx(_components.a,{href:`/open-source/noir`,children:`NOIR Drive template`}),` is the worked example.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Nightly stays`}),` (villas, cabins, guest houses, rooms): a one-night base with custom duration and fixed check-in/check-out times that the API enforces, turnover days, guest and arrival details as custom attributes. The `,_jsx(_components.a,{href:`/open-source/bali-villas`,children:`Bali Villa Rentals template`}),` is the worked example.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Schools and classes`}),` (languages, music, coding, tutoring): subjects as collections, levels as variants, teachers as staff, seats left from slot availability, and the online location’s `,_jsx(_components.code,{children:`link`}),` for a Join button. The `,_jsx(_components.a,{href:`/open-source/fluently`,children:`Fluently template`}),` is the worked example.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Fitness and Pilates studios`}),` (reformer, yoga, barre, spin): one variant per class × studio × instructor capped at the beds in the room, Full classes inferred from each series’ weekly pattern because the API drops full slots, privates sharing a product pool, and dated workshops. The `,_jsx(_components.a,{href:`/open-source/reformer`,children:`Tensile template`}),` is the worked example.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Customising`}),`: colour/font tokens, `,_jsx(_components.code,{children:`siteConfig`}),`, and what comes from the API vs. what you edit in code.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`templates-it-builds-on`,children:`Templates it builds on`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Haar — salon`,icon:`scissors`,href:`/open-source/haar`}),_jsx(Card,{title:`Frisor — barbershop`,icon:`scissors`,href:`/open-source/frisor`}),_jsx(Card,{title:`Clear Care — clinic`,icon:`stethoscope`,href:`/open-source/clarity`}),_jsx(Card,{title:`VOLT — padel \u0026 squash`,icon:`trophy`,href:`/open-source/volt`}),_jsx(Card,{title:`NOIR Drive — car rental`,icon:`car`,href:`/open-source/noir`}),_jsx(Card,{title:`Fluently — language school`,icon:`languages`,href:`/open-source/fluently`}),_jsx(Card,{title:`Bali Villa Rentals — villa stays`,icon:`house`,href:`/open-source/bali-villas`}),_jsx(Card,{title:`Tensile — reformer Pilates`,icon:`dumbbell`,href:`/open-source/reformer`})]}),`\n`,_jsx(Heading,{level:`2`,id:`when-it-triggers`,children:`When it triggers`}),`\n`,_jsx(_components.p,{children:`“Build me a booking website”, “I run a [salon / clinic / padel club] and need a\nbooking site”, or handing the agent a business idea plus inspiration.`}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/open-source/templates`,children:`Open-source templates`}),` — the template gallery`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/ai-agents/storefront-api-skill`,children:`opencals-storefront-api skill`}),` — the exact API/SDK reference this skill builds on`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/build-a-booking-page`,children:`Build a booking page`}),` — the manual tutorial`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark-default"}},"config":{},"pageMetadata":{"title":"opencals-build-booking-site skill","description":"The Agent Skill that builds a whole booking website on Opencals — pick an official Next.js template, scaffold, wire availability and checkout, rebrand, and deploy to Vercel.","icon":"layout-template","href":"/ai-agents/build-booking-site-skill"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What it covers","slug":"what-it-covers","depth":2,"children":[]},{"title":"Templates it builds on","slug":"templates-it-builds-on","depth":2,"children":[]},{"title":"When it triggers","slug":"when-it-triggers","depth":2,"children":[]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"opencals","siteName":"Opencals Developer Docs","title":"opencals-build-booking-site skill - Opencals Developer Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-24T18:50:55.297Z","gitLastModified":"2026-10-24T18:50:39.000Z","originalFileLocation":"ai-agents/build-booking-site-skill.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"The Agent Skill that builds a whole booking website on Opencals — pick an official Next.js template, scaffold, wire availability and checkout, rebrand, and deploy to Vercel.\">\u003cmeta data-mint-head name=\"keywords\" content=\"booking API, scheduling API, booking SDK, headless booking, booking infrastructure, open source booking templates\">\u003cmeta data-mint-head name=\"application-name\" content=\"Opencals Developer Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/opencals/bsANrw0YwxSPH6E2/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/opencals/bsANrw0YwxSPH6E2/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/opencals/bsANrw0YwxSPH6E2/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/opencals/bsANrw0YwxSPH6E2/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/opencals/bsANrw0YwxSPH6E2/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/opencals/bsANrw0YwxSPH6E2/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/opencals/bsANrw0YwxSPH6E2/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/opencals/bsANrw0YwxSPH6E2/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/opencals/bsANrw0YwxSPH6E2/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"opencals-build-booking-site skill - Opencals Developer Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"The Agent Skill that builds a whole booking website on Opencals — pick an official Next.js template, scaffold, wire availability and checkout, rebrand, and deploy to Vercel.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Opencals Developer Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://opencals.com/docs/ai-agents/build-booking-site-skill\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://opencals.mintlify.app/_mintlify/api/og/v2?division=Agent+skills\u0026amp;title=opencals-build-booking-site+skill\u0026amp;description=The+Agent+Skill+that+builds+a+whole+booking+website+on+Opencals+%E2%80%94+pick+an+official+Next.js+template%2C+scaffold%2C+wire+availability+and+checkout%2C+rebrand%2C+and+depl\u0026amp;theme=313fbada41e7f59805177b81\u0026amp;signature=03ab55f408d8170933e63af0971d23f30f24c631a1e26a12f6ec215731271b53\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"opencals-build-booking-site skill - Opencals Developer Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The Agent Skill that builds a whole booking website on Opencals — pick an official Next.js template, scaffold, wire availability and checkout, rebrand, and deploy to Vercel.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://opencals.mintlify.app/_mintlify/api/og/v2?division=Agent+skills\u0026amp;title=opencals-build-booking-site+skill\u0026amp;description=The+Agent+Skill+that+builds+a+whole+booking+website+on+Opencals+%E2%80%94+pick+an+official+Next.js+template%2C+scaffold%2C+wire+availability+and+checkout%2C+rebrand%2C+and+depl\u0026amp;theme=313fbada41e7f59805177b81\u0026amp;signature=03ab55f408d8170933e63af0971d23f30f24c631a1e26a12f6ec215731271b53\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/opencals/bsANrw0YwxSPH6E2/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Opencals Developer Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FAFAFA\">\u003clink data-mint-head rel=\"canonical\" href=\"https://opencals.com/docs/ai-agents/build-booking-site-skill\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/ai-agents/build-booking-site-skill.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://opencals.com/#organization\",\"name\":\"Opencals Developer Docs\",\"url\":\"https://opencals.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/opencals/u-hilaMvCUwjSvKO/logo/logo-dark.svg?fit=max\u0026auto=format\u0026n=u-hilaMvCUwjSvKO\u0026q=85\u0026s=33fe9ed8c6af758fbed7d69d6ea8cf49\"}},{\"@type\":\"WebSite\",\"@id\":\"https://opencals.com/docs#website\",\"name\":\"Opencals Developer Docs\",\"url\":\"https://opencals.com/docs\",\"publisher\":{\"@id\":\"https://opencals.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://opencals.com/docs/ai-agents/build-booking-site-skill#webpage\",\"url\":\"https://opencals.com/docs/ai-agents/build-booking-site-skill\",\"name\":\"opencals-build-booking-site skill\",\"description\":\"The Agent Skill that builds a whole booking website on Opencals — pick an official Next.js template, scaffold, wire availability and checkout, rebrand, and deploy to Vercel.\",\"dateModified\":\"2026-10-24T18:50:39.000Z\",\"isPartOf\":{\"@id\":\"https://opencals.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://opencals.com/docs/ai-agents/build-booking-site-skill#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://opencals.com/docs/ai-agents/build-booking-site-skill#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Agent skills\",\"item\":\"https://opencals.com/docs/ai-agents/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"opencals-build-booking-site skill\",\"item\":\"https://opencals.com/docs/ai-agents/build-booking-site-skill\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://opencals.com/docs/ai-agents/build-booking-site-skill#article\",\"headline\":\"opencals-build-booking-site skill\",\"name\":\"opencals-build-booking-site skill\",\"description\":\"The Agent Skill that builds a whole booking website on Opencals — pick an official Next.js template, scaffold, wire availability and checkout, rebrand, and deploy to Vercel.\",\"url\":\"https://opencals.com/docs/ai-agents/build-booking-site-skill\",\"mainEntityOfPage\":{\"@id\":\"https://opencals.com/docs/ai-agents/build-booking-site-skill#webpage\"},\"dateModified\":\"2026-10-24T18:50:39.000Z\",\"publisher\":{\"@id\":\"https://opencals.com/#organization\"},\"isPartOf\":{\"@id\":\"https://opencals.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Opencals Developer Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Opencals Developer Docs","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"API Reference","icon":"book-a","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Open Source","icon":"package-open","pages":[{"title":"Open Source","href":"/open-source/templates"}]},{"tab":"AI \u0026 Builders","icon":"sparkles","groups":[{"group":"Agent skills","pages":[{"title":"AI Agents \u0026 App Builders","icon":"sparkles","href":"/ai-agents/overview"},{"title":"opencals-storefront-api skill","description":"The ground-truth Agent Skill for building on the Opencals API and @opencals/storefront-sdk — availability, carts, appointments, checkout, discounts, customer accounts, guests, custom durations, reschedule/cancel and rate limits.","icon":"code","href":"/ai-agents/storefront-api-skill"},{"title":"opencals-build-booking-site skill","icon":"layout-template","href":"/ai-agents/build-booking-site-skill"}]},{"group":"AI app builders","pages":[{"title":"Lovable","description":"Add Opencals to Lovable as a custom connector so Lovable apps take real bookings: live availability, cart, checkout and Stripe payments. Every field ready to copy.","icon":"heart","href":"/ai-agents/lovable"},{"title":"v0","icon":"triangle","href":"/ai-agents/v0"},{"title":"Base44","icon":"box","href":"/ai-agents/base44"}]}]},{"tab":"Changelog","icon":"logs","pages":[{"title":"Changelog","href":"/changelog"}]}]},"title":"opencals-build-booking-site skill - Opencals Developer Docs","buildId":"dpl_3rfzHPCtRhDFBbetXZ3oLkN5tjmA","deploymentId":"dpl_3rfzHPCtRhDFBbetXZ3oLkN5tjmA","dynamics":[],"chunks":[]}