4.0 KiB
Falah Cast Episode 19 — Published
Live: https://iqra.falahos.my/ibn-khaldun-and-the-muqaddimah-the-science-of-empires/
Published 2026-09-24 via manual end-to-end pipeline test (no cloud routine, run directly from this machine since the cloud environment egress block is still unresolved):
- Script written by Notion AI's Content Studio Custom Agent (see
falahcast-e19-muqaddimah.mdin this repo for the raw script). - Audio generated locally via
edge-tts(pip3 install edge-tts), voiceen-US-AriaNeural— matches the host voice used in all prior Falah Cast episodes (confirmed fromphilosophy_series.json's"voice": "en-US-AriaNeural"field). - Uploaded to Ghost via
POST /ghost/api/admin/media/upload/(multipart,purpose=media) → returned hosted URL. - Post created via
POST /ghost/api/admin/posts/with alexicalbody matching the exact structure of prior episodes (anaudionode + a short intro paragraph), tagged Falah Cast / Podcast / Ibn Khaldun / Islamic Philosophy.
Notable: no dedicated Odysseus or Hermes TTS tool was available in
this session's MCP connectors — checked both, neither exposed one.
edge-tts (free, local, matches established voice) was the practical
choice over Higgsfield's paid TTS engines, which would have introduced
a different, inconsistent host voice.
This proves the full content pipeline works end-to-end when not blocked by network policy. Once the "Falah" cloud environment's egress allow-list is actually fixed (see gumroad-file-hosting-gotcha.md and prior session notes), this flow is a candidate for a scheduled routine.
Episode 20 — Rumi's Masnavi
Live: https://iqra.falahos.my/rumis-masnavi-the-reeds-cry-and-the-logic-of-the-heart/
Same pipeline as episode 19. Note: first curl publish attempt appeared to
fail with a local JSON-parse error (caused by mixing -w status output into
the same stream as the response body) but had actually succeeded server-side
— retrying created a duplicate post (-2 slug). Caught by checking
filter=slug:~'masnavi' and deleted the duplicate via DELETE /ghost/api/admin/posts/{id}/ (204 confirmed). Lesson: always write API
response bodies to a separate file/variable from status-code output before
parsing, and check for existing posts before assuming a "failed" call didn't
actually go through.
Episode 21 — Sejarah Melayu (Malay Annals)
Live: https://iqra.falahos.my/sejarah-melayu-memory-daulat-and-how-a-people-tells-its-story/
Same pipeline. Also this session (2026-09-25): investigated the episode
numbering duplication flagged earlier — root cause found in the campaign
repo's commit history: episodes 11-18 exactly repeat the topics of
episodes 2-8, in order, offset by 9 (e11=e02's topic, e13=e03's, ...,
e18=e08's), with only e09/e10/e12 being genuinely new. This points to a
topic-cycling/wraparound bug in the old daily-cron.py/content-engine.py
pipeline. No fix needed/attempted — that pipeline is confirmed dormant
(not scheduled anywhere on this Mac, per earlier pi diagnostic), and the
current manual Notion-AI-driven episodes (19+) draw from never-used
book-repo topics, sidestepping the bug entirely.
Also: wired the researched 30-day topic calendar directly into the Iqra Times Daily Article routine (trig_01NjWBVBaDrtBbCU6mMq8xgf) — it now works through the fixed list in order (tracking position via the "Islamic Tech" Ghost tag) instead of self-picking topics each run.
And: archived two empty/stale Gitea repos found in the earlier infra
sweep (wmj/mautic-mcp-server, wmj/ihya-migration-test) via
PATCH /api/v1/repos/{owner}/{repo} with {"archived": true} —
reversible, non-destructive. falah-mobile's earlier "partial API
response" flag turned out to be a non-issue on re-check (69KB, healthy).
Episode 22 — Madinah / al-Farabi's Virtuous City
Live: https://iqra.falahos.my/madinah-twice-the-covenant-and-the-virtuous-city/
Same pipeline. Bridges to Ibn Ata'illah's Kitab al-Hikam (aphorisms) next.