Jak publikujemy wpisy na EmDashu: od pliku JSON do produkcji

Obsługa EmDash
Jak publikujemy nasze posty

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.

§01 — Workflow

Cztery kroki od pomysłu do publikacji

Każdy krok to jedno polecenie w terminalu albo jedno spojrzenie w panel.

  1. 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.

  2. 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.

  3. Krok 03

    Przegląd

    Podgląd w panelu: kategorie, tagi, SEO, zdjęcie. Tu łapiesz literówki i rozjechane sekcje.

  4. Krok 04

    Publikacja

    npx emdash content publish posts <id> albo przycisk Publikuj w panelu.

§02 — Model

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.

§03 — Pola wpisu

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.

§04 — Przeplatanie

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.

§05 — Terminal

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.dev

3. 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 --draft

4. 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.

§06 — Wpadki

Sześć błędów, które już popełniliśmy

Każdy kosztował nas kilka minut szukania. Tobie nie musi.

objaw:

Tekst na stronie głównej zniknął

przyczyna:

Wpisany w pole Treść strony home, a ta renderuje tylko Sekcje. Trzeba go przenieść do bloku Tekst.

objaw:

Get pokazuje markdown, nie bloki

przyczyna:

content get bez --raw zamienia Portable Text z powrotem na markdown. Gdy chcesz zobaczyć, co naprawdę leży w bazie, dodaj --raw.

objaw:

Wpis wyszedł za wcześnie

przyczyna:

Brak flagi --draft. CLI domyślnie publikuje od razu, bo tak jest wygodniej dla automatów.

objaw:

Update odrzucony: „requires keys”

przyczyna:

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".

objaw:

409 Conflict przy update

przyczyna:

Nieaktualny _rev. Ktoś (albo Ty w panelu) zmienił wpis po Twoim odczycie. Zrób get jeszcze raz.

objaw:

Karty z napisem on:/then:

przyczyna:

Puste tag_title i tag_body dają domyślne angielskie znaczniki. W polskich tekstach zawsze je ustawiaj.

§07 — FAQ

Pytania, które padają zawsze

7.1Czy redaktor musi znać JSON i terminal?
→ SHIFT64

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ę?
→ SHIFT64

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?
→ SHIFT64

Do 50 sekcji. W praktyce 5–10: więcej oznacza zwykle, że temat warto podzielić na dwa wpisy.

7.4Jak dodać kategorię i tagi?
→ SHIFT64

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ę.