Atelier201 websiteJoin the waitlist
PlattformContent-Modell und Medien

Content-Modell und Medien

Wie eine Website Inhalte und Layout trennt, woran Editor, API und Agenten ihre Änderungen prüfen und wie Medien funktionieren.

Jede Website ist ein Astro-Projekt. Änderungen des Inhabers werden in typisierten Content-Dateien gespeichert, das Layout bleibt im Code. Eine Seite liest die Inhalte aus und setzt sie ins Layout. Den Firmennamen, einen Preis oder Öffnungszeiten enthält sie selbst nie.

Das Content-Modell ist die Liste der Content-Typen und ihrer Felder. Es wird an einer Stelle in src/content.config.ts des Projekts definiert (mit einem Zod-Schema pro Typ). Bei jedem Build wird es als JSON Schemas exportiert. Der Editor, die REST API, MCP und die CLI prüfen jede Änderung anhand dieses Modells. Ein Wert, der nicht zum Schema passt, wird mit Angabe des Feldnamens abgelehnt; geschrieben wird nichts.

Das Modell stammt aus dem letzten Build. Führe einmal einen neuen Build aus, bevor du das Content-Modell ausliest.

Collections und Singletons

Eine Collection enthält mehrere Einträge, jeweils in einer eigenen Datei. Der Dateiname ist der Slug des Eintrags: Kleinbuchstaben, Ziffern und Bindestriche. Ein Singleton ist ein einzelnes JSON-Dokument an einem festen Pfad.

Das Atelier201-Starterprojekt enthält folgende Beispiele:

NameTypInhalt
businessSingletonName, Claim, Beschreibung, Telefonnummer, E-Mail-Adresse, Adresse, Öffnungszeiten, Social-Media-Links, rechtliche Angaben, Buchungs- und Kartenlinks sowie die Sprache der Website
themeSingletonVier Markenfarben, Eckenradius, Schriftartenpaar und heller, dunkler oder automatischer Modus
navigationSingletonLinks im Header und Footer sowie der Call-to-Action-Button
integrationsSingletonGoogle-Analytics-ID, Plausible-Domain und Code, der im Head oder am Ende des Bodys eingefügt wird
servicesCollection, JSONLeistungen mit Name, Beschreibung, Preis, Reihenfolge und Bild
blogCollection, MarkdownBeiträge mit Titel, Beschreibung, Datum, Autor, Titelbild, Tags, den zugehörigen Leistungen (eine Relation zu services über den Slug) und einem Entwurfsstatus

Das Starterprojekt ist ein Grundgerüst: Es enthält diese beiden Collections als Beispiele und gibt nicht vor, wie ein Unternehmen aussehen soll. Eine Website kann nicht benötigte Collections löschen und eigene hinzufügen, etwa für ein Team, eine Speisekarte oder Veranstaltungen.

Eine Content-Collection besteht aus Markdown: Feldern im Frontmatter und einem Textkörper. Eine Daten-Collection besteht aus JSON ohne Textkörper.

Ein neuer Eintrag, der über die API oder MCP erstellt wird, ist zunächst ein Entwurf, wenn seine Collection ein Entwurfsfeld enthält. So kann eine Person entscheiden, ob sie ihn veröffentlichen möchte.

Inhalte ändern, ohne das Layout zu beschädigen

Für Texte, Einträge und Unternehmensangaben solltest du die Content-Aufrufe verwenden, nicht Dateien direkt bearbeiten:

AufgabeRESTMCPCLI
Modell auslesenContent-Modell auslesenget_content_modelatelier201 content model
Eintrag schreibenEintrag erstellen oder aktualisierensave_entryatelier201 content save
Einzelnen Text ändernEinzelnes Feld ändernset_fieldatelier201 content set

Verwende Datei-Aufrufe nur, um Code zu ändern: ein Layout, eine Komponente oder das Content-Modell selbst. Um ein Feld hinzuzufügen, ergänze es in src/content.config.ts mit .default() oder .optional(), damit bestehende Einträge gültig bleiben.

Inline-Bearbeitung: data-atelier201-field

Der Inhaber klickt auf der Seite auf einen kurzen Text und bearbeitet ihn direkt an Ort und Stelle. Das funktioniert, weil der Text die Adresse des Feldes enthält, aus dem er stammt:

HTML
<h1 data-atelier201-field="business:/name">Morning Crumb Bakery</h1>
<time data-atelier201-field="business:/hours/2/close">15:00</time>

Die Adresse hat das Format <singleton>:<JSON pointer>: business, theme oder navigation, gefolgt von einem Doppelpunkt und einem RFC 6901-Pointer in die Datei dieses Singletons. Dieselbe Adresse funktioniert mit set_field und atelier201 content set.

Beachte beim Bearbeiten einer Komponente folgende Regeln:

  • Setze das Attribut auf ein Element, dessen gesamter Text genau diesem Feld entspricht und das sonst nichts enthält. Atelier201 ersetzt den Text des Elements. Bei „Ruf uns an: 555 0100“ sollte nur die Nummer in einem span stehen.
  • Verschiebe das Attribut mit dem Element, wenn du dessen Stil änderst, und füge es überall dort hinzu, wo du ein Singleton-Feld an einer neuen Stelle anzeigst.
  • Verwende es nicht für Text, der aus mehreren Feldern zusammengesetzt ist, umgewandelten Text (etwa ein formatiertes Datum), Markdown-Textkörper oder Collection-Einträge. Ein Eintrag auf einer Seite erhält stattdessen auf seinem Container data-atelier201-entry="<collection>/<slug>".

Die Website bleibt statisch

Eine für Atelier201 erstellte Website ist eine statische Astro-Website: ohne Serveradapter, serverseitiges Rendering, clientseitiges Framework oder Anfragen an andere Origins zur Laufzeit (einschließlich Schriftarten, Analytics-Tags und eingebetteter Karten). Sie verwendet eine Sprache, die in business.locale festgelegt ist. Ihre Abhängigkeiten sind astro und @astrojs/mdx (standardmäßig deaktiviert, bis mdx() zur Konfiguration hinzugefügt wird), da der Build ohne Netzwerkzugriff ausgeführt wird. Die AGENTS.md des Starterprojekts führt diese Regeln für Agenten auf, die den Code bearbeiten.

Medien

Lade ein Bild, ein PDF oder ein kurzes Video auf die Website hoch und verweise anschließend im Content darauf mit /media/<filename>, zum Beispiel im Feld coverImage eines Blogbeitrags.

  • Jede Datei darf 20 MB groß sein. Bei Uploads über MCP werden Dateien in Base64 codiert und sind auf 5 MB begrenzt.
  • Gib Bildern einen alt-Text für Menschen, die sie nicht sehen können.
  • Medien werden auf den Speicherplatz des Plans angerechnet: 100 MB bei einem Entwurf und 5 GB bei einer Site.
  • Hochgeladene Dateien werden ab dem nächsten Build eingebunden. Beim Löschen werden sie aus späteren Builds entfernt. Bereits veröffentlichte Builds enthalten weiterhin ihre Kopie, bis eine neuere Veröffentlichung sie ersetzt.

Use these docs with your AI tools

An AI agent can read this documentation directly. You do not need an account or an API key. Everything here is public and read-only.

Query these docs via MCP

Recommended

Add this server to Claude, Claude Code, Cursor, Mistral, or any tool that supports MCP. Your agent can then search Atelier201 Docs documentation and read it in full, instead of answering from memory.

https://atelier201.com/docs/mcp
  • searchFind the passages that answer a question.
  • fetchRead one page in full, as Markdown.
  • list_pagesSee every page in this documentation.

Query these docs over HTTP

The same tools also work as plain web requests. Use this for scripts, or for any tool that does not support MCP. There is one endpoint per tool. Arguments go in the query string, and the answer comes back as JSON.

https://atelier201.com/docs/api/docs/search?query=custom+domain

Read the OpenAPI description. It is built from the same definitions as the tools, so it always matches what the endpoints do.

Read these docs as Markdown

Add .md to any page URL to get its Markdown source. You can also send the headerAccept: text/markdown to the page URL itself.

To read the whole documentation in one file, open llms-full.txt. For a short index of every page, open llms.txt.