Contentful CMS-Implementierung mit Claude Code
Erfahren Sie, wie Sie Contentful CMS mit Claude Code implementieren. Mit praktischen Tipps und Codebeispielen.
Contentful CMS-Integration mit Claude Code optimieren
Contentful ist ein führendes Headless CMS, das API-first Content-Management ermöglicht. Durch strukturierte Content-Modelle und eine leistungsfähige Delivery API können Inhalte von jedem Frontend abgerufen werden. Mit Claude Code können Sie vom Content-Modell-Design bis zur Frontend-Integration effizient vorankommen.
Content-Modell-Design
> Entwerfe ein Content-Modell für eine Blog-Website in Contentful.
> Mit drei Content-Typen: Artikel, Kategorie und Autor.
// scripts/setup-content-model.ts
import contentful from 'contentful-management';
const client = contentful.createClient({
accessToken: process.env.CONTENTFUL_MANAGEMENT_TOKEN!,
});
async function setupContentModel() {
const space = await client.getSpace(process.env.CONTENTFUL_SPACE_ID!);
const env = await space.getEnvironment('master');
// Autor-Content-Typ
const author = await env.createContentTypeWithId('author', {
name: 'Author',
fields: [
{ id: 'name', name: 'Name', type: 'Symbol', required: true },
{ id: 'slug', name: 'Slug', type: 'Symbol', required: true },
{ id: 'bio', name: 'Bio', type: 'Text' },
{ id: 'avatar', name: 'Avatar', type: 'Link', linkType: 'Asset' },
],
});
await author.publish();
// Kategorie
const category = await env.createContentTypeWithId('category', {
name: 'Category',
fields: [
{ id: 'name', name: 'Name', type: 'Symbol', required: true },
{ id: 'slug', name: 'Slug', type: 'Symbol', required: true },
{ id: 'description', name: 'Description', type: 'Text' },
],
});
await category.publish();
// Blog-Artikel
const blogPost = await env.createContentTypeWithId('blogPost', {
name: 'Blog Post',
fields: [
{ id: 'title', name: 'Title', type: 'Symbol', required: true },
{ id: 'slug', name: 'Slug', type: 'Symbol', required: true },
{ id: 'excerpt', name: 'Excerpt', type: 'Text' },
{ id: 'body', name: 'Body', type: 'RichText' },
{ id: 'featuredImage', name: 'Featured Image', type: 'Link', linkType: 'Asset' },
{ id: 'author', name: 'Author', type: 'Link', linkType: 'Entry' },
{ id: 'category', name: 'Category', type: 'Link', linkType: 'Entry' },
{ id: 'tags', name: 'Tags', type: 'Array', items: { type: 'Symbol' } },
{ id: 'publishedAt', name: 'Published At', type: 'Date' },
],
});
await blogPost.publish();
}
Inhalte abrufen
> Erstelle einen Client zum Abrufen von Blog-Artikeln über die
> Contentful Content Delivery API. Generiere auch TypeScript-Typen.
// src/lib/contentful.ts
import { createClient, type Entry, type Asset } from 'contentful';
const client = createClient({
space: process.env.CONTENTFUL_SPACE_ID!,
accessToken: process.env.CONTENTFUL_ACCESS_TOKEN!,
});
// Vorschau-Client
const previewClient = createClient({
space: process.env.CONTENTFUL_SPACE_ID!,
accessToken: process.env.CONTENTFUL_PREVIEW_TOKEN!,
host: 'preview.contentful.com',
});
function getClient(preview = false) {
return preview ? previewClient : client;
}
// Typdefinitionen
interface BlogPostFields {
title: string;
slug: string;
excerpt: string;
body: any; // Rich Text Document
featuredImage: Asset;
author: Entry<AuthorFields>;
category: Entry<CategoryFields>;
tags: string[];
publishedAt: string;
}
interface AuthorFields {
name: string;
slug: string;
bio: string;
avatar: Asset;
}
interface CategoryFields {
name: string;
slug: string;
description: string;
}
// Artikelliste abrufen
export async function getBlogPosts(options?: {
limit?: number;
skip?: number;
category?: string;
preview?: boolean;
}) {
const { limit = 10, skip = 0, category, preview = false } = options || {};
const query: any = {
content_type: 'blogPost',
order: ['-fields.publishedAt'],
limit,
skip,
include: 2,
};
if (category) {
query['fields.category.sys.contentType.sys.id'] = 'category';
query['fields.category.fields.slug'] = category;
}
const entries = await getClient(preview).getEntries<BlogPostFields>(query);
return {
posts: entries.items,
total: entries.total,
};
}
// Einzelnen Artikel abrufen
export async function getBlogPost(slug: string, preview = false) {
const entries = await getClient(preview).getEntries<BlogPostFields>({
content_type: 'blogPost',
'fields.slug': slug,
include: 2,
limit: 1,
});
return entries.items[0] || null;
}
ISR-Implementierung mit Next.js
// app/blog/[slug]/page.tsx
import { getBlogPost, getBlogPosts } from '@/lib/contentful';
import { documentToReactComponents } from '@contentful/rich-text-react-renderer';
import { notFound } from 'next/navigation';
export const revalidate = 60; // Alle 60 Sekunden revalidieren
export async function generateStaticParams() {
const { posts } = await getBlogPosts({ limit: 100 });
return posts.map((post) => ({ slug: post.fields.slug }));
}
export default async function BlogPostPage({
params,
}: {
params: { slug: string };
}) {
const post = await getBlogPost(params.slug);
if (!post) notFound();
return (
<article className="max-w-3xl mx-auto p-6">
<h1 className="text-4xl font-bold">{post.fields.title}</h1>
<p className="text-gray-500 mt-2">
{new Date(post.fields.publishedAt).toLocaleDateString('de-DE')}
</p>
<div className="prose mt-8">
{documentToReactComponents(post.fields.body)}
</div>
</article>
);
}
Zusammenfassung
Die Kombination des API-first-Ansatzes von Contentful mit Claude Code ermöglicht den effizienten Aufbau eines flexiblen Content-Management-Systems. Siehe auch den Blog-CMS-Aufbau-Leitfaden und den SSR/SSG-Vergleich.
Details zu Contentful finden Sie in der offiziellen Contentful-Dokumentation.
Kostenloses PDF: Claude-Code-Spickzettel in 5 Minuten
Trag einfach deine E-Mail-Adresse ein – wir senden dir den A4-Spickzettel als PDF sofort zu.
Wir behandeln deine Daten sorgfältig und senden niemals Spam.
Über den Autor
Masa
Ingenieur, der Claude Code intensiv nutzt. Betreibt claudecode-lab.com, ein Tech-Medium in 10 Sprachen mit über 2.000 Seiten.
Ähnliche Artikel
7 Prüfungen, bevor du täglich einen mehrsprachigen Claude-Code-Artikel veröffentlichst
Eine praktische Checkliste, damit tägliche mehrsprachige Claude-Code-Artikel nicht an fehlenden Sprachen, kaputten CTAs oder veralteten Live-Seiten scheitern.
Was sind Codex Automations? Content Ops mit KI planen und ausfuehren
Praktischer Leitfaden fuer Codex Automations: Analytics, Themenwahl, Artikel, CTA, Deployment und Monetarisierung.
Claude Code × GCP Cloud Functions Komplettanleitung | Serverlose Funktionen blitzschnell entwickeln
GCP Cloud Functions mit Claude Code optimieren. HTTP/Pub/Sub/Firestore-Trigger implementieren, lokal testen und Deployments automatisieren — mit echten Codebeispielen aus Masas Praxiserfahrung.