Theme
Von Storyblok zu Peacock migrieren
Peacock spricht denselben Geist wie Storyblok — Stories, ComponentBlueprints, Multi-Locale, Visual-Editor. Migration ist deshalb ein Mapping, kein Rewrite.
CLI-Importer
bash
npx @peacock/cli import storyblok \
--space-id <storyblok-space-id> \
--token <storyblok-management-token> \
--target https://peacock-cms.webhoch.com \
--target-token <peacock-management-token> \
--target-space <peacock-space-slug>Der Importer macht in drei Phasen:
1. Components → ComponentBlueprints
Jeder Storyblok-Component wird in eine ComponentBlueprint (JSON Schema) übersetzt. Field-Types werden 1:1 gemappt:
| Storyblok-Type | Peacock-Schema |
|---|---|
text / textarea | string |
richtext | string mit format: "richtext-html" |
markdown | string mit format: "markdown" |
number | integer / number |
boolean | boolean |
datetime | string mit format: "date-time" |
asset | object mit $ref: "asset" |
link | object mit url + target |
option / options | enum |
bloks (nested) | array von oneOf |
2. Stories → Stories
Jede Storyblok-Story wird mit allen Versionen importiert. Der Importer schreibt:
slug+full_path(Tree-Struktur)lang(pro Locale eine Story-Row in Peacock — Storyblok hat Übersetzungen am selben Story-Objekt, Peacock pro Locale eigene Story-Records)content(kompatibles JSON-Shape —_componentstatt Storyblok'scomponent, sonst identisch)published_version_idzeigt auf die aktuell-publishte Version
3. Assets → Assets
Storyblok-CDN-URLs werden zu Peacock-Assets:
- Original-Datei wird heruntergeladen + zu Peacock hochgeladen (S3-kompatibler MinIO bzw. Hetzner Object Storage).
- Alt-Texte + Focal-Point + Crop-Hints werden mitgenommen.
- Content-Felder mit Asset-Referenzen werden umgeschrieben (alte URL → neue Peacock-Asset-UUID).
Was NICHT migriert wird
- Storyblok Datasources → Peacock-Datasources haben eine andere Konfiguration. Du legst sie nach dem Import manuell neu an.
- Storyblok Workflows + Approval-Stages → Peacock-Workflows sind pro-Space individuell.
- Storyblok Visual-Editor Bridge → Peacock nutzt eine eigene Postmessage-Bridge (
@peacock/sdk-astroenthält sie).
Frontend-Code anpassen
Wenn dein Frontend storyblok-js-client verwendet:
diff
- import StoryblokClient from 'storyblok-js-client';
- const sb = new StoryblokClient({ accessToken: '...' });
- const { data } = await sb.get('cdn/stories/about');
+ import { createClient } from '@peacock/sdk-js';
+ const peacock = createClient({
+ baseUrl: 'https://peacock-cms.webhoch.com',
+ spaceSlug: 'mein-space',
+ });
+ const result = await peacock.getStory('/about');
+ if (result.status === 'ok') {
+ const story = result.story;
+ }Re-Run / Idempotenz
Der Importer ist idempotent: wenn du ihn ein zweites Mal startest, werden vorhandene Stories/Blueprints aktualisiert (nicht dupliziert). Praktisch für "Storyblok ist noch live, ich migriere schrittweise" — du synchronisierst regelmäßig, bis du Peacock verlassen-fertig hast und Storyblok abdrehst.
Siehe auch
- Quickstart — Setup vor dem Import
- Concepts — wie Peacock-Datenmodelle aufgebaut sind
- Integration in bestehende Seite — wie du das Frontend mit Peacock verbindest