Skip to content

feat(articles): publish marketing drafts at /articles - #100

Merged
sarthakagrawal927 merged 1 commit into
mainfrom
publish/articles
Sep 20, 2026
Merged

sarthakagrawal927 merged 1 commit into
mainfrom
publish/articles

Conversation

@sarthakagrawal927

Copy link
Copy Markdown
Member

Summary

  • landing-astro/scripts/sync-articles.mjs converts marketing/articles/karte/ drafts into landing-astro/src/pages/articles/ pages and content-pages/articles.mjs (metadata + bodies); strips working sections.
  • New layouts/Article.astro + /articles index + nav links (header/footer); article styling matches the changelog idiom.
  • Contract: /articles joins STATIC_PUBLIC_ROUTES; parsePublicHtmlPath gains an article kind so .md alternates and markdown negotiation serve through handlePublicRouteMarkdown/api/ai/markdownrenderPublicRouteMarkdown.
  • worker.mjs serves /articles* from the ASSETS binding (catch-all no longer treats them as profile slugs); wrangler.jsonc run_worker_first covers /articles + /articles/*; articles is reserved in both segment sets.
  • Sitemap enumerates the generated articles module.

Test plan

  • pnpm --filter ./landing-astro exec astro build/articles, article page emitted; @astrojs/sitemap picks them up
  • pnpm test — 256 pass (contract tests extended for the article kind + asset routing)
  • pnpm typecheck, biome check ., pnpm docs:check — clean
  • pnpm cf:build overlay verified in CI

Generated with Devin

Adds landing-astro/scripts/sync-articles.mjs, which converts
marketing/articles/karte drafts into Article-layout pages plus a
generated content-pages/articles.mjs runtime module (metadata + bodies).

The articles section plugs into existing contracts: /articles is a
static public route, /articles/<slug> is a new 'article' parse kind so
`.md` alternates and Accept: text/markdown negotiation flow through
handlePublicRouteMarkdown -> /api/ai/markdown like every other public
route, the edge serves Astro HTML from assets for /articles/*, and the
sitemap enumerates the generated module. 'articles' joins both reserved
first-segment sets so no profile can claim it.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@sarthakagrawal927
sarthakagrawal927 merged commit 05b846b into main Sep 20, 2026
1 check passed
sarthakagrawal927 added a commit that referenced this pull request Sep 20, 2026
JSON.stringify output is never biome-clean, so every sync left the lint
lane red until a manual format pass. Run `biome format --write` on the
emitted module inside the sync script.

Also regenerates articles.mjs — picks up the missing metadata entry for
the accessibility-requirements article published via #100.

Generated with [Devin](https://devin.ai)

Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant