How This Module Was Made

October 23, 2025 ยท View on GitHub

Consolidation of markdown utilities from blog_writer and article_illustrator


The Problem

Both scenario tools processed markdown but implemented their own utilities:

  • blog_writer: Title extraction, slugification
  • article_illustrator: Structure parsing, image insertion, content analysis

This duplication meant:

  • Other apps couldn't reuse these utilities
  • No consistency across tools
  • Missed opportunity for shared module

The Solution: Consolidate as Reusable Module

What We Extracted:

  • From blog_writer: extract_title_from_markdown(), slugify()
  • From article_illustrator: MarkdownParser, MarkdownImageUpdater, structure analysis

Total: ~400 LOC consolidated from two sources


Design Decisions

Decision 1: Functions vs Classes

Chose: Functions for simple ops (extract, slugify), classes for complex (parse, update) Why: Simpler interface, no unnecessary classes

Decision 2: No Async

Chose: Synchronous interface Why: Markdown processing is CPU-bound, not I/O

Decision 3: Flexible Placement

Chose: Support multiple placement strategies (before/after section, at line) Why: Different use cases need different insertion logic


Reusability

Use cases:

  • Blog post formatters
  • Documentation generators
  • README creators
  • Wiki page builders
  • Any markdown manipulation

Created: 2025-10-22 Consolidated From: scenarios/blog_writer + article_illustrator Status: Active development