---
name: marva-blog-author
description: >-
  Use when user says "write a MARVA blog post", "marvahome blog", "publish MARVA blog", "generate Hungarian blog for marvahome", "MARVA Home cikk", or asks to draft, author, push, or publish an SEO blog post for marvahome.com. End-to-end: Hungarian SEO+GEO authoring → marva-blog MCP push → Higgsfield thumbnail.
---

# MARVA Home Blog Author

End-to-end runbook for authoring and publishing SEO + GEO-optimized Hungarian blog posts for **MARVA Home** (`https://marvahome.com`). The post is drafted directly into the `BlogPost` schema consumed by the `marva-blog` MCP, paired with a thumbnail generated by the `Higgsfield` MCP, pushed as draft, reviewed by the user, then published.

## About MARVA Home (anchor context — read first)

- Professional shared community space in **Győr, Hungary** (Győr-Moson-Sopron county, Northwest Hungary).
- Therapy / coaching / consulting rooms rentable by the hour or day. No long-term commitment.
- Audience: pszichológusok, terapeuták, coachok, mediátorok, csoportvezetők, tréningvezetők.
- Brand voice: **calm, professional, Hungarian-first, lightly poetic but practical**. No marketing fluff. No emoji.
- Site sections to internally link to: `/szobak`, `/foglalas`, `/arak`, `/berlet-vasarlas`, `/szakmai-kozossegunk`, `/esemenyeink`, `/rolunk`, `/blog`.
- Geo keywords: `terápiás szoba bérlés Győr`, `coaching iroda Győr`, `csoportos foglalkozás bérleti tér`, `pszichológus rendelő Győr`, `tréningterem Győr belváros`.
- Easy reach from Budapest / Bratislava / Vienna — name this when relevance allows.

## BlogPost schema (target shape)

```ts
type BlogSection = {
  id: string;            // kebab-case, unique within post
  title: string;         // renders as <h2>
  paragraphs: string[];  // 2-4 sentences each
  bullets?: string[];    // renders as <ul>
  code?: string;         // optional, skip for non-technical posts
};

type BlogPost = {
  slug: string;          // kebab-case, ASCII only (run slugify)
  title: string;         // <= 60 chars, primary keyword near front
  description: string;   // <= 160 chars, used as meta description + OG/Twitter + JSON-LD
  thumbnail_url: string; // 16:9 landscape, >= 1600px wide
  author_name: string;   // default "Marva Home"
  author_role: string;   // e.g. "Szakmai közösségi tér"
  tags: string[];        // 3-6, lowercase Hungarian
  sections: BlogSection[];
};
```

The first section's first paragraph **is the lead** — write it as a self-contained answer to the post's main query (snippet-quality for AI Overviews / featured snippets). JSON-LD `BlogPosting` is emitted automatically by the storefront.

## Slug algorithm (match the admin exactly)

Hungarian diacritics are stripped, then non-alphanumerics become hyphens. Source of truth: `slugify()` in `apps/backend/src/admin/routes/blog/page.tsx` lines 77-89.

```
lowercase
á à â ä → a
é è ê ë → e
í ì î ï → i
ó ò ô ö ő → o
ú ù û ü ű → u
ç → c
ñ → n
anything not [a-z0-9] → "-"
strip leading/trailing "-"
```

Examples:
- `"Terápiás szoba bérlés Győrben"` → `terapias-szoba-berles-gyorben`
- `"Csoportos foglalkozás: 5 tipp"` → `csoportos-foglalkozas-5-tipp`

## Reference tag vocabulary

**Existing tags from the admin UI** (`COMMON_TAGS` in `apps/backend/src/admin/routes/blog/page.tsx` lines 57-71) — reuse these first:

`design`, `nappali`, `wellbeing`, `munka`, `tervezés`, `akusztika`, `productivity`, `interior`, `fókusz`, `csapat`, `terápia`, `coaching`, `közösség`

**Additional Hungarian niche tags** (use when topically right):

`szobák`, `tippek`, `bérlet`

Pick **3-6 tags total**, lowercase, Hungarian. Reuse existing ones when possible to consolidate the tag cloud.

---

## Runbook

Follow these steps in order. Do not skip 1 or 7 — the user must confirm the angle before drafting and the draft before publishing.

### 1. Topic intake — propose 3 angles, get user pick

Given a topic seed from the user (or self-generated from current site gaps), output **three candidate angles**. For each:

- **Working title** (Hungarian, <= 60 chars)
- **Primary search intent** (`informational` / `commercial` / `navigational`)
- **Primary keyword** (Hungarian)
- **Secondary keywords** (3-5, Hungarian)
- **Győr-local angle** (one sentence — district, landmark, regional context, or persona)

Present the three. Recommend one. Wait for user confirmation before drafting.

Example for seed "csoportos foglalkozás":

> **A) Csoportos foglalkozás Győrben — terem méretezés és akusztika**
> Intent: informational · Primary kw: "csoportos foglalkozás terem Győr" · Secondary: "csoport szoba bérlés", "tréningterem akusztika", "kör alakú ülésrend", "10 fős csoport szoba" · Local angle: a Belváros sétálótávolságában lévő, magas belmagasságú szoba 8-12 fős csoportokra.
>
> **B) Hogyan válassz tréningtermet Győrben? Ellenőrzőlista bérlés előtt**
> Intent: commercial · Primary kw: "tréningterem Győr bérlés" · Secondary: "óradíjas terembérlés", "csoportos coaching tér", "rugalmas terembérlés", "tréningterem felszereltség" · Local angle: A Győr-belvárosi elhelyezkedés előnyei budapesti és bécsi résztvevőknek.
>
> **C) Csoportdinamika és tér: mit üzen a szoba elrendezése?**
> Intent: informational · Primary kw: "csoportdinamika tér elrendezés" · Secondary: "kör alakú ülésrend", "facilitátor pozíció", "csoport biztonsága", "csoport szoba berendezés", "akusztikai komfort" · Local angle: Egy Győr-Belvárosi tér leírása természetes fénnyel és lágy akusztikával.

### 2. SEO blueprint (for the picked angle)

Output, in this order:

```yaml
slug: <kebab-case ASCII via slugify>
title: <= 60 chars, primary kw near the front
description: <= 160 chars, includes Győr/Győr-Moson-Sopron, ends with a soft CTA like "Foglalj időpontot." or "Nézd meg a szobákat."
tags: [3-6 lowercase Hungarian — prefer COMMON_TAGS]
outline:
  - H2 #1 (lead — direct answer to primary query)
  - H2 #2
  - H2 #3
  - H2 #4
  - (optional) H2 #5-7
```

Rules:
- 4-7 H2 sections only. **No H3** — current schema is flat.
- The first H2's first paragraph must answer the main query in 2-3 sentences (snippet candidate).
- Title format: `<Primary keyword> — <benefit/qualifier>` or `<Question-style hook>` (no clickbait).

### 3. GEO / E-E-A-T moves (mandatory in every post)

Every published post must include all of:

- **At least one Győr-specific reference** — district name (Belváros, Sziget, Révfalu, Adyváros), a distance from a landmark (e.g. "öt perc sétára a Széchenyi tértől"), or a regional context (Győr-Moson-Sopron megye, M1-ről 5 perc).
- **At least one "kinek szól" paragraph** — name the target professional persona explicitly (pszichológus, coach, mediátor, csoportvezető, tréner, párkapcsolati tanácsadó stb.).
- **A practical takeaway list** rendered via `bullets` on one section — usable as a checklist ("ellenőrzőlista bérlés előtt", "amit hozz magaddal", "amit nálunk találsz").
- **Author voice note**: `author_role` set to a credible label, e.g. `"Szakmai közösségi tér"`, `"MARVA Home szerkesztőség"`, `"Győri közösségi tér csapata"`. Use first-person plural ("nálunk", "úgy gondoljuk") sparingly and naturally.
- **Internal links inside paragraphs** as plain markdown — current renderer shows them as text, future MD upgrade will pick them up. Always include `/foglalas` and `/szobak`; add one topical post link when relevant. Example: `... időpontot a [foglalási oldalon](/foglalas) tudsz választani.`

### 4. Section drafting rules

- Paragraphs: **2-4 sentences max**, plain language, Hungarian native phrasing.
- No AI tells: **avoid** "Ebben a cikkben…", "Összefoglalva…", "Mint tudjuk…", "A mai világban…", "Egyre népszerűbb…".
- No marketing fluff: no "forradalmi", "egyedülálló", "prémium élmény" without substance.
- Each section's **first paragraph stands alone** as a snippet-quality answer to the H2 question.
- Concrete numbers and details over adjectives ("8-12 fős kör", "3,1 m belmagasság", "12 perc sétára").
- Bullets: short imperative or noun phrases, max ~10 words each.

### 5. Schema / metadata hooks

Populate a `metadata` JSON object alongside the post — used for downstream SEO tracking and AI Overview tuning:

```json
{
  "seo_keyword": "<primary keyword>",
  "geo_target": "Győr, HU",
  "reading_minutes": 4,
  "intent": "informational",
  "internal_links": ["/foglalas", "/szobak/..."],
  "language": "hu-HU"
}
```

Estimate `reading_minutes` from total word count / 220.

### 6. Thumbnail brief (Higgsfield MCP)

Before publishing, generate **one** landscape 16:9 image using the **`Higgsfield`** MCP (tools prefixed `mcp__Higgsfield__*`).

**Base prompt template** (adapt per topic):

> Editorial photo of a calm, sunlit therapy / consulting room in a renovated Győr townhouse. Warm wood, soft ochre accents, soft natural daylight from a tall window, plants, neutral palette. Wide angle, 16:9, photorealistic, no text overlay, no people unless the topic requires it.

Per-topic adaptations:

- Group session post → append "a small circle of 8 empty chairs facing each other, warm pendant light"
- Solo therapy post → append "two armchairs at an angle near a window, a small side table with a glass of water"
- Coaching / consulting post → append "a small round table with two notebooks and a fountain pen, soft blurred background"
- Memberships / pricing post → append "a wide view of a quiet hallway with several wooden doors, soft ambient light"

**Output constraints**: landscape, **≥ 1600 px wide**, no on-image text, no logos.

**Two upload flows** — both supported:

**Flow A (preferred, durable)** — upload to the shop's S3 public bucket:
1. Save the Higgsfield-returned image locally.
2. Upload to S3 (mirror the pattern in the `higgsfield-to-medusa-products` skill — public-read `<prefix>blog/<slug>.jpg`).
3. Pass the resulting `https://<bucket>/.../blog/<slug>.jpg` URL to `marva_blog_set_thumbnail`.

**Flow B (interim, fast)** — pass the Higgsfield-hosted URL directly:
1. Take the URL returned by the Higgsfield MCP.
2. Pass it straight to `marva_blog_set_thumbnail`.
3. Note: Higgsfield-hosted URLs may expire — Flow A is preferred for production. Use Flow B for quick drafts or when S3 is unavailable.

### 7. Push flow (marva-blog MCP)

Use the **`marva-blog`** MCP. Exact tool sequence (never publish before user confirms):

```text
marva_blog_validate_sections(sections)
  → returns ok or a list of structural problems; fix and re-run until ok.

marva_blog_create_draft(
  slug,
  title,
  description,
  sections,
  tags,
  author_name = "Marva Home",
  author_role = "Szakmai közösségi tér"
)
  → creates the post in "draft" status.

marva_blog_set_thumbnail(slug, thumbnail_url)
  → attaches the 16:9 image.

# Show the draft URL to the user for review:
#   https://admin.marvahome.com/app/blog
# Wait for explicit "publish" / "mehet" confirmation.

marva_blog_publish(slug)
  → flips status to "published" and sets published_at.
```

If the MCP exposes additional tools (`marva_blog_update`, `marva_blog_unpublish`, `marva_blog_delete`, `marva_blog_list`), use them only when the user explicitly asks for edit / rollback / inventory.

### 8. Post-publish checks

After publishing:

1. Open `https://marvahome.com/blog/<slug>` (via `WebFetch`) and confirm 200.
2. Extract the inline `<script type="application/ld+json">` block via `WebFetch` (ask for "dump the script[type='application/ld+json'] content") and verify:
   - `@type: BlogPosting`
   - `headline` matches `title`
   - `description` matches the post description
   - `image` matches the thumbnail URL
   - `inLanguage: hu-HU`
3. Report back to the user with a **3-bullet summary**:
   - Live URL
   - Primary keyword + intent
   - One sentence on the Győr-local hook used

---

## Reference worked example (use as your pattern)

A complete post Claude should be able to reproduce in shape and tone.

**Metadata**

```yaml
slug: terapias-szoba-berles-gyorben-amire-figyelj
title: "Terápiás szoba bérlés Győrben — amire figyelj"
description: "Hogyan válassz terápiás szobát Győrben? Praktikus szempontok akusztikához, fényhez, megközelítéshez. Foglalj időpontot."
tags: ["terápia", "szobák", "akusztika", "tippek"]
author_name: "Marva Home"
author_role: "Szakmai közösségi tér"
metadata:
  seo_keyword: "terápiás szoba bérlés Győr"
  geo_target: "Győr, HU"
  reading_minutes: 4
  intent: "commercial"
  internal_links: ["/foglalas", "/szobak", "/arak"]
  language: "hu-HU"
```

**Sections**

```json
[
  {
    "id": "mi-szamit",
    "title": "Mi számít egy terápiás szobánál Győrben?",
    "paragraphs": [
      "Egy terápiás szoba akkor működik jól Győrben, ha az ügyfél már a belépés pillanatában nyugalmat érez: csendes utca, természetes fény, lágy akusztika és egyértelmű mosdóhasználat. Ez a négy alap fontosabb, mint a bútorok stílusa.",
      "A MARVA Home szobái a [Belvárosban](/szobak), sétatávolságra a Széchenyi tértől, egy felújított polgárházban kaptak helyet. A vastag falak és a textil burkolatok miatt a szomszéd helyiségből nem szűrődik át beszéd."
    ]
  },
  {
    "id": "kinek-szol",
    "title": "Kinek ajánljuk?",
    "paragraphs": [
      "Pszichológusoknak, pár- és családterapeutáknak, mediátoroknak és coachoknak, akik óradíjas vagy napidíjas konstrukcióban dolgoznak, és nem szeretnének egész éves bérleti díjat fizetni egy saját rendelőért.",
      "Különösen hasznos azoknak, akik Budapestről vagy Bécsből járnak Győrbe heti egy-két alkalomra: a vonatállomástól tíz perc séta, parkolás a környező utcákban."
    ]
  },
  {
    "id": "ellenorzolista",
    "title": "Ellenőrzőlista bérlés előtt",
    "paragraphs": [
      "Mielőtt lefoglalsz egy szobát, érdemes végigmenni ezen a rövid listán. A legtöbb panasz nem a térrel, hanem a hozzá tartozó apróságokkal kapcsolatos."
    ],
    "bullets": [
      "Természetes fény és sötétíthetőség",
      "Hangszigetelés a szomszéd helyiség felé",
      "Külön mosdó vagy diszkrét útvonal a mosdóig",
      "Vízforraló, pohár, papír zsebkendő",
      "Egyértelmű érkezési és távozási rend",
      "Rugalmas időpontmódosítás 24 órán belül"
    ]
  },
  {
    "id": "foglalas",
    "title": "Hogyan foglalhatsz időpontot?",
    "paragraphs": [
      "Az időpontokat a [foglalási oldalon](/foglalas) tudod kiválasztani órás vagy napos bontásban. Ha rendszeresen használnád a teret, a [bérletes konstrukció](/berlet-vasarlas) kedvezőbb óradíjat ad.",
      "Ha bizonytalan vagy, melyik szoba illik a munkádhoz, írj nekünk egy rövid leírást a foglalkozás típusáról és a létszámról — ajánlunk egy szobát, és ha kell, körbevezetünk személyesen."
    ]
  }
]
```

**Thumbnail brief**

> Editorial photo of a calm, sunlit therapy room in a renovated Győr townhouse. Two armchairs at a soft angle near a tall window, a small side table with a glass of water, warm wood floor, soft ochre textile accents, plants on the windowsill, soft natural daylight, neutral palette. Wide angle, 16:9, photorealistic, no text overlay, no people.

**Push sequence**

```text
marva_blog_validate_sections(<sections>)
marva_blog_create_draft(
  slug="terapias-szoba-berles-gyorben-amire-figyelj",
  title="Terápiás szoba bérlés Győrben — amire figyelj",
  description="Hogyan válassz terápiás szobát Győrben? Praktikus szempontok akusztikához, fényhez, megközelítéshez. Foglalj időpontot.",
  sections=<above>,
  tags=["terápia","szobák","akusztika","tippek"],
  author_name="Marva Home",
  author_role="Szakmai közösségi tér"
)
marva_blog_set_thumbnail("terapias-szoba-berles-gyorben-amire-figyelj", "<higgsfield_or_s3_url>")
# user reviews at https://admin.marvahome.com/app/blog
marva_blog_publish("terapias-szoba-berles-gyorben-amire-figyelj")
```

**Post-publish report (to user)**

- Live: `https://marvahome.com/blog/terapias-szoba-berles-gyorben-amire-figyelj`
- Keyword + intent: `terápiás szoba bérlés Győr` — commercial
- Győri horgony: Belvárosi felújított polgárház, 10 perc séta a vonatállomástól

---

## Quick checklist (run before push)

- [ ] Title <= 60 chars, primary keyword near the front
- [ ] Description <= 160 chars, contains Győr or Győr-Moson-Sopron, ends with soft CTA
- [ ] Slug is ASCII kebab-case via the slugify algorithm
- [ ] 3-6 tags, lowercase Hungarian, prefer `COMMON_TAGS`
- [ ] 4-7 H2 sections, no H3
- [ ] First section, first paragraph is a self-contained answer
- [ ] At least one Győr-specific reference (district / landmark / distance)
- [ ] At least one "kinek szól" paragraph naming the persona
- [ ] At least one `bullets` checklist
- [ ] At least two internal links (`/foglalas`, `/szobak`)
- [ ] No AI tells, no marketing fluff, no emoji
- [ ] Thumbnail 16:9, >= 1600 px wide
- [ ] `marva_blog_validate_sections` returns ok
- [ ] User has confirmed before `marva_blog_publish`
