The react-pdf comparison argued the "why switch" — the new migration converter is the "how switch". Paste react-pdf JSX, get back builder DSL (doc(page(col(...))) with your styles carried across as kebab-case properties and dynamic values as {{mustache}} bindings), then render a live preview through /api/v1/preview without leaving the page.
Every conversion is executed and catalog-validated before it is shown: output with zero catalog errors is returned as usable DSL, anything else gets exactly one automatic correction pass, and a snippet that still fails is reported as an error rather than displayed. The 50KB-per-paste cap and 20-conversions-per-hour per-IP limit are in the response contract, and the full DSL reference lives in pdf-template-author.md.
Programmatic callers can hit POST /api/v1/ai/migrate directly with { from: "react-pdf", source } — it needs the same session or API key as every other /api/v1/* endpoint and returns { dsl, sampleData, warnings, retried, signupUrl }. The ?from= parameter is ready for future sources; react-pdf is the only converter today.