LearnNewsExamplesServices
Frontmatter
id10056
titlePortal App: Add Pull Requests and Discussions to the News Section
stateClosed
labels
enhancementaibuildneeds-re-triage
assignees[]
createdAtApr 18, 2026, 12:47 AM
updatedAtJun 6, 2026, 7:18 PM
githubUrlhttps://github.com/neomjs/neo/issues/10056
authortobiu
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 6, 2026, 7:18 PM

Portal App: Add Pull Requests and Discussions to the News Section

Closed v13.0.0/archive-v13-0-0-chunk-4 enhancementaibuildneeds-re-triage
tobiu
tobiu commented on Apr 18, 2026, 12:47 AM

Intent / The Why

The Neo Portal's News section currently surfaces four content types: Medium articles, Blog posts, Tickets, and Release Notes. However, two major content sources — Pull Requests and GitHub Discussions — are synced to local markdown (resources/content/pulls/, resources/content/discussions/) but never displayed in the portal. This means:

  1. PR conversations — which under the new PR-first workflow carry the richest architectural context (diff summaries, review scores, Fat Ticket metadata) — are invisible to human visitors and SEO crawlers.
  2. Discussions — which serve as the Ideation Sandbox for brainstorming — are similarly hidden despite being synced.

The old workflow committed directly to dev with context dumped into ticket comments. Under the new Swarm workflow, the PR body is where the signal lives. The portal must reflect this shift.

SEO Value

Each merged PR is a self-contained problem→solution document. Googlebot can index these as Q&A-style technical resources, extending the portal's organic reach. The same applies to discussions, which often capture architectural reasoning before it becomes a ticket.

LLM Value

PRs and discussions follow a natural Q&A reward signal pattern. PR body = problem statement + plan. PR comments = review signal + corrections. This structure is inherently useful for LLM RAG consumption.

Scope of Work

1. New JSON Index Generators (buildScripts/docs/index/)

Create two new scripts mirroring the existing tickets.mjs pattern:

  • pulls.mjs — Scans resources/content/pulls/*.md, parses frontmatter (number, title, author, state, mergedAt, base, head), generates apps/portal/resources/data/pulls.json as a flat-tree structure grouped by state (Merged / Open).
  • discussions.mjs — Scans resources/content/discussions/*.md, parses frontmatter, generates apps/portal/resources/data/discussions.json grouped by category.

Reference: buildScripts/docs/index/tickets.mjs is the canonical pattern to follow (frontmatter parsing, filtering, flat-tree output).

2. New Portal Tabs (apps/portal/view/news/)

Add two new tab items to TabContainer.mjs:

{
    module: () => import('./pulls/MainContainer.mjs'),
    header: {
        iconCls: 'fa fa-code-pull-request',
        route  : '/news/pulls',
        text   : 'Pull Requests'
    }
}, {
    module: () => import('./discussions/MainContainer.mjs'),
    header: {
        iconCls: 'fa fa-comments',
        route  : '/news/discussions',
        text   : 'Discussions'
    }
}

Create pulls/MainContainer.mjs and discussions/MainContainer.mjs following the existing tickets/MainContainer.mjs pattern (TreeList + markdown article viewer).

3. SEO Routes (buildScripts/docs/seo/generate.mjs)

Add collectPRRoutes() and collectDiscussionRoutes() functions mirroring collectReleaseRoutes() and collectIssueRoutes(). Wire them into collectAllRoutes(). Add priority entries in getPriority():

  • /news/pulls/* → 0.6 priority
  • /news/discussions/* → 0.4 priority

Update getLlmsTxt() to include PR and Discussion sections.

Key Files

File Action
buildScripts/docs/index/pulls.mjs [NEW] JSON index generator
buildScripts/docs/index/discussions.mjs [NEW] JSON index generator
apps/portal/view/news/TabContainer.mjs [MODIFY] Add 2 new tab items
apps/portal/view/news/pulls/MainContainer.mjs [NEW] PR viewer
apps/portal/view/news/discussions/MainContainer.mjs [NEW] Discussion viewer
buildScripts/docs/seo/generate.mjs [MODIFY] Add PR/Discussion route collectors

Acceptance Criteria

  • node buildScripts/docs/index/pulls.mjs generates valid pulls.json
  • node buildScripts/docs/index/discussions.mjs generates valid discussions.json
  • Portal news section shows 6 tabs (Medium, Blog, Tickets, Releases, Pull Requests, Discussions)
  • PR and Discussion routes appear in sitemap.xml and llms.txt
  • SSR/SEO pages render for individual PR and Discussion routes

Origin Session ID: 144326a4-c1e8-4eee-80e4-b984f3c79ddc

tobiu added the enhancement label on Apr 18, 2026, 12:47 AM
tobiu added the ai label on Apr 18, 2026, 12:47 AM
tobiu added the build label on Apr 18, 2026, 12:47 AM