← Back to docs index

| Time | Task | Details |

Editorial Process — Manneken Newsletter & Press Review 🌟

Daily Schedule (Brussels time, Mon–Fri)

Time Task Details
7:00 Cache press sources Runs scripts/fetch-press.sh via lightpanda: BX1 🇫🇷, BRUZZ 🇳🇱, RTBF 🇫🇷, Brussels Times 🇬🇧, IRCEL air quality
7:10 Write trilingual press review AI writes EN/FR/NL versions from cached sources → docs/press-reviews/ + site/src/content/blog/
7:25 Post to channels Twitter (thread), Nostr (one long-form + one note linking to it), Discord #📰press-review
7:30 Send daily newsletter Email to weekday subscribers in their language (EN/FR/NL/AR/ZH)
7:35 Generate podcast EN audio (Xavier + Leen voices) + FR audio (Raymond Devos + Annie Cordy voices) via ElevenLabs

Weekend Schedule

Day Time Task
Saturday 7:00–7:25 Same as weekday (press review + post)
Saturday 7:30 Weekly newsletter with week summary + "What to do in Brussels this weekend?"
Saturday 7:35 Podcast generation
Sunday 7:00–7:35 Press review + podcast (no newsletter)

Press Sources

Source Language Method URL
BX1 French Lightpanda markdown https://bx1.be/news/
BRUZZ Dutch RSS XML, homepage fallback https://www.bruzz.be/rss.xml
RTBF French Lightpanda markdown https://www.rtbf.be/en-continu
Brussels Times English Google News sitemap XML https://www.brusselstimes.com/google-news-sitemap.xml
IRCEL-CELINE Multi Lightpanda markdown https://www.irceline.be/en/air-quality/measurements/information-and-alarm-thresholds

Newsletter

Editions

Languages

English, Français, Nederlands, العربية, 中文

Arabic and Chinese currently receive English content with localized subject lines, labels, and UI.

Email Structure

  1. ☁️ Weather forecast (always first — current temp, min/max, feels-like, wind, humidity)
  2. 🟡 Air quality alert (only if AQI > 100)
  3. 📰 Press review content (grouped by topic, sources cited)
  4. 🎉 Weekend events (weekly edition only)
  5. 🔗 Footer with manage preferences + one-click unsubscribe

Infrastructure

Subscriber Management

Podcast

Voices (ElevenLabs)

Language Host 1 Host 2
English Xavier (Manneken) Leen (co-host)
French Raymond Devos (Manneken) Annie Cordy (co-host)

Rules

Tools

Stats

Tracked in docs/private/chat-stats.json:

Press Review Writing Rules

"Saved You a Click" — Always Include Specifics

Every summary, teaser, tweet, and Discord post must contain enough detail that readers don't need to click through to understand the story. Name people, places, initiatives, and numbers.

Bad: "A square in Brussels was redone." Good: "The Tootschmarket square in Molenbeek reopened after 18 months of works."

Apply to: Discord summaries, Twitter thread text, Nostr teasers, LinkedIn posts, newsletter intro lines.


Costume of the Day Image

Every press review now starts with an illustrated Manneken Pis costume that matches the day’s news or calendar moment.

  1. Run the generator after the trilingual posts are saved (EN/FR/NL files in docs/press-reviews/ and site/src/content/blog/).
    cd /root/.openclaw/workspace
    node scripts/generate-costume-image.mjs --date YYYY-MM-DD
    
    • Add --force to regenerate even if the PNG already exists.
  2. What the script does automatically:
    • Scans the English review for keywords (Ramadan/iftar, XR, EU summit, mobility crackdowns, weather extremes, football, etc.) to pick a costume theme.
    • If no obvious topic is found, checks hard-coded calendar moments (Saint-Patrick, 22 mars commemoration, Fête nationale, etc.).
    • If nothing matches, falls back to the official dressing calendar (cached under docs/cache/manneken-costumes/ via lightpanda scraping of the monthly schedule). If that page is blocked, a basic seasonal theme is used so the image still appears.
    • Generates a 1024×1024 PNG via OpenAI (skills/openai-image-gen) and stores it at site/public/news/costumes/YYYY/MM/YYYY-MM-DD-costume.png.
    • Inserts a localized snippet (EN/FR/NL) immediately under the frontmatter of each press-review Markdown file:
      <!-- COSTUME-IMAGE:2026-03-19 -->
      ![Manneken Pis — Ramadan lanterns](/news/costumes/2026/03/2026-03-19-costume.png)
      
      <small>Costume du jour : …</small>
      <!-- /COSTUME-IMAGE -->
      
  3. Image sourcing:
    • Source: site/public/news/costumes/YYYY/MM/
    • Cached schedule: docs/cache/manneken-costumes/<year>-<month>.md
    • Temporary OpenAI output: tmp/costume-image/
  4. When to rerun: anytime the review content changes meaningfully (new topics or reordering). Use --force to update the PNG + snippets.

ℹ️ Note: the official garde-robe site sits behind Cloudflare, so the monthly schedule is temporarily sourced from https://bruxelles-city-news.be/ until we can ingest the PDF directly via opendataloader-pdf.

Newsbrief Structure (since 2026-07-05)

Daily (LLM-edited, since 2026-07-05)

Generated by scripts/generate-press-reviews.py in three phases:

  1. Deterministic collectionfetch-press.sh + extract_articles() gather all stories (title, summary, url, source, language) from BX1, BRUZZ, Brussels Times, RTBF into the LLM context.
  2. One editorial LLM pass (llm_select_stories, OpenClaw press-review agent) — normalizes everything to English, merges duplicate coverage across languages, selects the 5–8 most important Brussels stories ranked by civic importance (first = the lead), and writes one "saved you a click" paragraph per story using only facts from the sources.
  3. Deterministic assembly — the EN edition is rendered from the selection (weather strip, one ## <headline> section per story with its paragraph and Sources: list keeping original-language titles, optional ## Agenda from the council ICS calendars). FR and NL are pure LLM translations of the final EN document (placeholders frozen). The frontmatter summary is the lead headline.

Weekly ("Rewind / Fast-forward", Saturday)

Built by scripts/newsletter/send-weekly.mjs from the ranked weekend-summary topics:

  1. What happened this week — top 4 topics in full (summary + sources)
  2. Also this week — remaining topics as one-liners
  3. What's coming next week — council meetings/public sessions from the ICS calendars (omitted if no data)
  4. Your weekend — link to the Brussels Weekend Brief

The weekend-summary engine still generates and validates 10 topics; only the presentation changed.