# ContentBind > An enterprise visual CMS. Marketing teams edit landing pages visually inside the > real application; engineers integrate once and keep their components in their own > repository. Published content is served from the edge in under a minute. ContentBind renders your React components with props from a headless store. The editing canvas is your own site loaded in an iframe, not a re-implementation of it. Experiments run against the flag tool you already use; personalization is resolved server-side before caching, except for rules about the visitor's own URL. ## Integration essentials (read before writing code) - Every fetch returns `Data | ContentBindError`, never a throw: always narrow with `isContentBindError(result)` before `.map` or reading fields. - The URL parameter of `fetchOneEntry` is `urlPath`, not `url`. - Two entry points: `@contentbind/sdk` is server code (fetchOneEntry, fetchEntries, isPreviewing, getPreviewToken, isContentBindError); `@contentbind/sdk/react` is components and hooks (Content, useIsPreviewing). - One env var: NEXT_PUBLIC_CONTENTBIND_KEY in .env.local (KEY=value syntax, no quotes). Restart the dev server after adding it - NEXT_PUBLIC_ vars are inlined at build time. There is no API URL setting. - Personalization by URL parameter needs no code: authors write rules against `param.` and reads window.location.search itself, so campaign links work on statically generated pages. If your page renders per request, pass `searchParams` to BOTH fetchOneEntry and and the rules resolve server-side instead, with no swap after hydration. - SEO: render entry.meta.title / entry.meta.description into the document head yourself (generateMetadata or next/head) - the SDK only renders the body. - Editor preview requires a route at /api/contentbind-preview in YOUR app that stores the token in a contentbind_preview cookie and redirects - see https://contentbind.com/docs/preview for copy-paste handlers. Exact signatures and working samples: https://contentbind.com/docs/quickstart ## Docs - [Quickstart](https://contentbind.com/docs/quickstart): From an empty project to an editable page in about ten minutes. - [How it works](https://contentbind.com/docs/how-it-works): What the editor does, and why the canvas is your own site. - [Custom components](https://contentbind.com/docs/components): Registering your own components and declaring their inputs. - [Preview and drafts](https://contentbind.com/docs/preview): Seeing unpublished content, and sharing it with people outside. - [CLI](https://contentbind.com/docs/cli): Scaffolding an integration and diagnosing a broken one. - [Publishing](https://contentbind.com/docs/publishing): Environments, versions, approvals and scheduling. - [Experiments](https://contentbind.com/docs/experiments): Running A/B tests with the flag tool you already use. - [Personalization](https://contentbind.com/docs/personalization): Saying something different to a campaign, an audience, or one arm of an experiment. - [Delivery API](https://contentbind.com/docs/api): The HTTP surface behind the SDK. - [Security model](https://contentbind.com/docs/security): Keys, isolation, and what the bridge will and will not do. ## Optional - [Full text of every page](https://contentbind.com/llms-full.txt)