# Entrydeck – Dokumentation > Das Master-CMS von Kreativ Wolke: ein Inhalt, viele Websites. Produktseite: https://entrydeck.app/ · Übersicht: https://entrydeck.app/docs --- # Erste Schritte > Vom leeren Mandanten zur ersten ausgespielten Seite: Anmeldung, Website anlegen, KI-Onboarding oder Handarbeit, API-Key ins Frontend. Quelle: https://entrydeck.app/docs/erste-schritte · Stand: 2026-09-23 Entrydeck ist ein Master-CMS: Inhalte werden einmal gepflegt und an beliebig viele Websites ausgespielt. Diese Seite führt in der Reihenfolge durch die ersten Schritte, in der sie sich in der Praxis bewährt hat — vom ersten Login bis zur ersten Seite, die ein Frontend über die Delivery-API abruft. ## Was Sie brauchen - Einen Zugang zum Admin unter `https://entrydeck.app/login`. Den ersten Benutzer legen wir nach der Demo an; weitere Benutzer legen Sie selbst unter **Benutzer** an. - Eine Vorstellung, welche Inhalte es gibt. Für eine Firmenwebsite reichen meist drei bis fünf Inhaltstypen (etwa Leistungen, Team, Referenzen, Beiträge). - Optional ein Frontend, das die Inhalte rendert. Entrydeck bringt einen eigenen Renderer mit; wer lieber Nuxt, Next, Astro oder PHP verwendet, nutzt die [Delivery API](https://entrydeck.app/docs/delivery-api). ## Schritt 1: Website anlegen Unter **Websites → Neu** entsteht der erste Auftritt. Ein Name und die Sprache genügen; Domains lassen sich später ergänzen. Jede Website erhält zwei Kennungen: | Kennung | Sichtbarkeit | Zweck | | --- | --- | --- | | Site-ID | öffentlich | benennt die Website in Skript-Einbindungen und in Anfragen | | API-Key | geheim | autorisiert das Frontend an der Delivery API | Der API-Key gehört in die Server-Umgebung des Frontends, nie in Browser-Code. Er lässt sich jederzeit neu erzeugen; der alte verliert dann sofort seine Gültigkeit. ## Schritt 2: Inhalte anlegen — zwei Wege **Weg A: KI-Onboarding.** Unter **Onboarding** beantworten Sie ein paar Fragen zu Branche, Zielgruppe, Leistungen und Tonalität. Der Assistent baut daraus eine komplette Website: Seiten mit Blöcken und Texten, Inhaltstypen mit Beispieleinträgen, Navigation, Formulare, Platzhalterbilder sowie Impressum und Datenschutzerklärung aus festen Bausteinen. Im letzten Schritt zeigt er den Plan; jede Überschrift und jeder Absatz lässt sich vor dem Anwenden überschreiben oder neu formulieren. Alles landet als ganz normaler Inhalt im System. **Weg B: Handarbeit.** Zuerst die Inhaltstypen unter **Inhaltstypen** modellieren (Felder, Gruppen, Relationen), dann Einträge unter **Inhalte** anlegen, dann Seiten unter **Seiten** aus Blöcken zusammensetzen. Wer bestehende Inhalte aus WordPress, TYPO3 oder einer beliebigen JSON-, REST- oder GraphQL-Quelle hat, zieht sie über den [Content-Mapper](https://entrydeck.app/docs/content-mapper) herüber. > Der Assistent überschreibt nie bestehende Seiten. Ein zweiter Durchlauf legt eine neue Sitzung und eine neue Website an. ## Schritt 3: Veröffentlichen Einträge und Seiten durchlaufen Arbeitszustände: **Entwurf → In Prüfung → Freigegeben → Veröffentlicht**. Erst „Veröffentlicht" ist über die Delivery API abrufbar — unabhängig davon, ob eine Seite den Eintrag bereits anzeigt. Wer welchen Schritt gehen darf, steuern Rollen und Rechte unter **Einstellungen → Rollen**. ## Schritt 4: Das Frontend anschließen Ein erster Aufruf zeigt, ob alles verbunden ist: ```bash curl https://entrydeck.app/api/v1/delivery/site \ -H "x-api-key: $ENTRYDECK_API_KEY" ``` Die Antwort enthält Site-ID, Name, Sprachen, Domains, SEO-Einstellungen und das Theme der Website. Danach holt das Frontend Seiten über `GET /delivery/page?route=/&locale=de` und Einträge über `GET /delivery/content/{typ}` — alle Details stehen in der [Delivery API](https://entrydeck.app/docs/delivery-api). ## Schritt 5: Consentdeck und Barrierefreiheit einschalten Beides ist in jedem Paket enthalten und je Website konfigurierbar: - **Consentdeck** unter **Consentdeck → Website**: Kategorien und Dienste pflegen, Banner einschalten. Websites, die Entrydeck rendert, binden das Skript automatisch ein; fremde Websites bekommen ein ` ``` Die **Site-ID** ist öffentlich und benennt nur die Website; ein Schlüssel wird nicht benötigt. Websites, die Entrydeck selbst rendert, binden das Skript automatisch ein, sobald das Banner eingeschaltet ist. | Umgebung | Einbindung | | --- | --- | | WordPress ab 6.0 | Plugin `consentdeck.zip` mit Einstellungsseite, Shortcode `[consentdeck_declaration]`, Gutenberg-Block | | TYPO3 v12/v13 | Extension `consentdeck` mit TypoScript-Einbindung und Inhaltselement für die Erklärung | | Shopware 6 ab 6.5 | Plugin `KwConsentdeck` für Storefront und Checkout | | Joomla 5 | System-Plugin `plg_system_consentdeck` | | Nuxt | `app.head.script` in der `nuxt.config` | | Next.js | ` ``` Für Karten und Videos erscheint statt der Einbettung ein Platzhalter mit dem Text aus den Einstellungen und einem Schalter, der genau diesen Dienst freigibt. ## Google Consent Mode v2 und dataLayer Vor dem ersten Google-Tag stehen alle Signale (`ad_storage`, `ad_user_data`, `ad_personalization`, `analytics_storage`, …) auf `denied` und werden nach der Entscheidung aktualisiert (`wait_for_update: 500`). Zusätzlich schreibt Consentdeck zwei Ereignisse in `window.dataLayer`: `consent_initialized` einmal je Seitenaufruf und `consent_update` nach jeder Entscheidung — mit Kategorien, Diensten, Einwilligungs-ID und Version. ## GTM-Export Unter **Tag Manager & Doku** erzeugt Consentdeck einen fertigen Container: dataLayer-Variablen `Consent - …` je Kategorie, Trigger `Consent Initialized`, `Consent Update` und `Consent Granted - …` je optionaler Kategorie sowie Tags der eingerichteten Dienste. Im Tag Manager unter *Verwaltung → Container importieren* einspielen (Zusammenführen, Konflikte umbenennen), prüfen, veröffentlichen. Eigene Tags hängen an den Trigger der passenden Kategorie, nicht an *All Pages*. Der Tag Manager gehört nicht ohne Weiteres in die notwendigen Dienste: Er darf nur dann vorab laden, wenn jedes Tag im Container den Consent Mode beachtet. ## Steuerung aus eigenem Code ```js Consentdeck.open() // Einstellungen erneut öffnen Consentdeck.acceptAll() // alles zulassen Consentdeck.accept('analytics') // eine Kategorie zulassen Consentdeck.reject() // nur notwendige Consentdeck.withdraw() // Einwilligung widerrufen Consentdeck.has('analytics') // true, wenn zugestimmt wurde Consentdeck.get() // { id, version, ts, action, categories, services } Consentdeck.on('change', fn) // bei jeder Änderung ``` Für den Link „Cookie-Einstellungen" im Fußbereich genügt `