Jak publikujemy wpisy na EmDashu: od pliku JSON do produkcji

Nasz workflow od kuchni: gdzie trafia treść, jak przeplatać tekst z komponentami, jak zbudować wpis w JSON-ie i opublikować go z terminala, bez klikania w panelu.
Cztery kroki od pomysłu do publikacji
Każdy krok to jedno polecenie w terminalu albo jedno spojrzenie w panel.
- Krok 01
Wpis w JSON-ie
Tytuł, excerpt, content i tablica sections. Każdy tekst, także w środku bloków, piszesz zwykłym markdownem.
- Krok 02
Szkic
npx emdash content create posts --draft. Wpis ląduje w bazie, ale nikt go jeszcze nie widzi. EmDash sam zamienia markdown na Portable Text i uzupełnia klucze bloków.
- Krok 03
Przegląd
Podgląd w panelu: kategorie, tagi, SEO, zdjęcie. Tu łapiesz literówki i rozjechane sekcje.
- Krok 04
Publikacja
npx emdash content publish posts <id> albo przycisk Publikuj w panelu.
Dwa pojemniki: Treść i Sekcje
Każda strona i każdy wpis mają dwa osobne pola na zawartość. To nie jest jeden edytor, tylko dwa pojemniki renderowane jeden pod drugim:
- Treść (
content): zwykły edytor tekstu. Akapity, śródtytuły, listy, linki, kod. - Sekcje (
sections): lista gotowych bloków (hero, metryki, karty, FAQ, tabela, proces, formularz) ułożonych w dowolnej kolejności.
Treść zawsze idzie pierwsza, sekcje pod nią. Taka kolejność to ustawienie szablonu, a nie ograniczenie EmDasha. Jeśli na Twojej stronie tekst ma stać pod komponentami, zamieniamy to w szablonie, raz dla całej strony albo z przełącznikiem dla każdego wpisu. Na stronie głównej pole Treść w ogóle się nie wyświetla, bo strona główna składa się wyłącznie z sekcji.
Co wpisać gdzie
Wszystkie pola kolekcji posts, w kolejności, w jakiej pojawiają się na stronie.
- title
Tytuł w nagłówku wpisu, na liście wpisów i w <title>.
- featured_image
Zdjęcie na pełną szerokość nad treścią i na karcie w /posts. Obiekt { src, alt }, nie sam adres.
- content
Wstęp albo cały tekst. Markdown z CLI zamienia się automatycznie na Portable Text.
- sections
Bloki pod treścią. Tu przeplatasz tekst (blok Tekst) z komponentami.
- excerpt
Jedno-dwa zdania na karcie w /posts. Gdy pole SEO jest puste, trafia też do meta description.
Kategorie, tagi i pola SEO ustawiasz w panelu bocznym edytora. CLI ich nie obsługuje.
Tekst: komponent: tekst
Komponentu nie wstawisz w środek pola Treść. Całą narrację z komponentami budujesz więc w Sekcjach, a fragmenty tekstu to bloki Tekst (rich_text). Ten wpis tak właśnie wygląda: blok Tekst, tabela, blok Tekst, proces, i tak dalej.
W JSON-ie to po prostu kolejne elementy tablicy:
"sections": [
{ "_type": "rich_text", "heading": "Wstęp", "content": "Akapit z [linkiem](/)." },
{ "_type": "metrics", "items": [{ "label": "Bloki", "value": "9" }] },
{ "_type": "rich_text", "content": "Wracamy do tekstu.", "background": "żółte" }
]Gwiazdki w nagłówku (*tak*) dają kolor akcentu. Pole label daje etykietę „§03 — Nazwa”, a anchor zamienia sekcję w cel dla linku /#kotwica.
Krok po kroku w terminalu
1. Wpis w JSON-ie. Wszystkie pola tekstowe, także te w środku bloków, piszesz jako markdown. Każdy blok dostaje _type i czytelny _key. Wersje i wartości domyślne EmDash uzupełni sam:
{
"title": "Mój wpis",
"excerpt": "Jedno zdanie na listę wpisów.",
"content": "Wstęp z **pogrubieniem** i [linkiem](/).",
"sections": [
{ "_type": "rich_text", "_key": "wstep", "heading": "Część *pierwsza*",
"content": "## Śródtytuł\n\n- punkt\n- punkt" }
]
}2. Szkic. Bez flagi --draft CLI od razu publikuje:
npx emdash content create posts --file wpis.json --slug moj-wpis --draft \
--url https://emdash-pl.mpress.workers.dev3. Poprawki. Edytujesz ten sam plik i wysyłasz go ponownie. EmDash dopasowuje bloki po _key: ten sam klucz to aktualizacja bloku, nowy klucz to nowy blok, brakujący klucz usuwa blok. Do tego token _rev z ostatniego odczytu, który chroni przed nadpisaniem cudzych zmian:
REV=$(npx emdash content get posts <id> --json | jq -r ._rev)
npx emdash content update posts <id> --rev "$REV" --file wpis.json --draft4. Publikacja, dopiero po przeglądzie:
npx emdash content publish posts <id>Na produkcji najpierw jednorazowe npx emdash login --url …. Lokalnie logowanie nie jest potrzebne, bo serwer dev wpuszcza CLI bez tokenu.
Sześć błędów, które już popełniliśmy
Każdy kosztował nas kilka minut szukania. Tobie nie musi.
Tekst na stronie głównej zniknął
Wpisany w pole Treść strony home, a ta renderuje tylko Sekcje. Trzeba go przenieść do bloku Tekst.
Get pokazuje markdown, nie bloki
content get bez --raw zamienia Portable Text z powrotem na markdown. Gdy chcesz zobaczyć, co naprawdę leży w bazie, dodaj --raw.
Wpis wyszedł za wcześnie
Brak flagi --draft. CLI domyślnie publikuje od razu, bo tak jest wygodniej dla automatów.
Update odrzucony: „requires keys”
Sekcje bez _key. Przy aktualizacji EmDash musi wiedzieć, który blok jest którym, więc w pliku każdy blok ma stały klucz, np. "faq".
409 Conflict przy update
Nieaktualny _rev. Ktoś (albo Ty w panelu) zmienił wpis po Twoim odczycie. Zrób get jeszcze raz.
Karty z napisem on:/then:
Puste tag_title i tag_body dają domyślne angielskie znaczniki. W polskich tekstach zawsze je ustawiaj.
Pytania, które padają zawsze
7.1Czy redaktor musi znać JSON i terminal?
Nie. Wszystko, co tu robimy z CLI, da się wyklikać w panelu: Wpisy → Nowy, Treść u góry, bloki w polu Sekcje dodawane plusem i układane przeciąganiem. CLI przydaje się, gdy wpisy pisze agent, gdy przenosimy treści hurtem albo gdy chcemy mieć wpis w repozytorium.
7.2Czy lokalny wpis trafi na produkcję?
Nie. Lokalna baza i produkcja to dwie osobne bazy. Na produkcję wysyłasz ten sam plik JSON z flagą --url wskazującą produkcyjny adres.
7.3Ile bloków może mieć jeden wpis?
Do 50 sekcji. W praktyce 5–10: więcej oznacza zwykle, że temat warto podzielić na dwa wpisy.
7.4Jak dodać kategorię i tagi?
W panelu bocznym edytora wpisu. Nowe terminy możesz też utworzyć z CLI (emdash taxonomy add-term), ale przypisanie ich do wpisu robisz w panelu.
Dalej: Twoje wpisy
Nie musisz robić tego ręcznie. Razem ze stroną dostajesz od nas gotowe bloki i instrukcję dla asystenta AI: opis każdego bloku, przykładowe wpisy i zasady publikacji. Dodajesz ją do Claude albo ChatGPT, mówisz, o czym ma być wpis, a asystent składa go z bloków i wysyła do panelu jako szkic. Ty czytasz, poprawiasz i klikasz Publikuj.
Chcesz tak pracować na swojej stronie? Umów darmową konsultację.