* feat(route): add /humanlayer/blog route
Add RSS feed for HumanLayer blog (www.humanlayer.dev/blog), scraping
blog listing and full article content with cheerio.
via [HAPI](https://hapi.run)
Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(route): use CSS :not() selector instead of JS filter for humanlayer blog
Address PR review feedback: move /blog/tags/ exclusion into the CSS selector
instead of using a separate .filter() call.
via [HAPI](https://hapi.run)
Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(route): extract tags into category field for humanlayer blog
Parse #-prefixed tags from the meta line and populate the category field.
via [HAPI](https://hapi.run)
Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(route): address review feedback for humanlayer blog
- Remove redundant :not() selector (tag links use different class)
- Simplify tag extraction from parts.slice(3).join() to parts[3]
- Fix tag regex to match hyphenated tags like best-practices
via [HAPI](https://hapi.run)
Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(route): remove custom limit for humanlayer blog, use built-in
via [HAPI](https://hapi.run)
Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: HAPI <noreply@hapi.run>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: zj1123581321 <zj1123581321@users.noreply.github.com>