spatie/laravel-markdown-response
Serve clean markdown versions of your Laravel HTML pages for AI agents and bots. Detects requests via Accept: text/markdown, known user agents, or .md URLs. Driver-based conversion (local PHP or Cloudflare Workers AI), caching, and HTML preprocessing included.
Markdown::convert() enables programmatic use (e.g., background jobs, CLI tools)..md) and user-agent detection may conflict with existing routing logic (e.g., legacy .md file routes)..md suffixes or AI user-agent patterns?file, redis, database) or custom stores./docs, /blog) to validate conversion quality.app/Http/Kernel.php for broad coverage./dashboard, /api) via DoNotProvideMarkdownResponse.Markdown::convert()..md suffixes, so /about.md → /about. Ensure no conflicts with:
Route::get('/assets/{path}', ...))..md file routes (use DoNotProvideMarkdownResponse middleware).'ai_user_agents' => [
'GPTBot', 'ClaudeBot', 'Bingbot', 'CustomBot/1.0',
],
Illuminate\Http\Response outputs (e.g., streams).MARKDOWN_RESPONSE_DRIVER (local/cloudflare) and cache settings.ignored_query_parameters for cache key consistency.league/html-to-markdown (minor updates via Composer).league/html-to-markdown for breaking changes.config/markdown-response.php to avoid environment variable sprawl.ai_user_agents list).Markdown::fake() for test assertions.php artisan markdown-response:clear for cache invalidation.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Local driver crashes on malformed HTML | 500 errors for markdown requests | Fallback to HTML response or custom error page. |
| Cloudflare API rate limits | Conversion failures for AI agents | Implement retry logic with exponential backoff. |
| Cache store outage | Stale markdown responses | Short-circuit to HTML if cache fails. |
| User-agent misclassification | Non-AI users get markdown | Audit ai_user_agents list regularly. |
.md suffix conflicts |
Route resolution failures | Explicitly exclude routes via middleware. |
.md suffix, AI user agents).Markdown::convert()) and testing tools./docs.md endpoints.How can I help you explore Laravel packages today?