Add news/highlights section#46
Conversation
|
I like this refactor more than the one in #20 but I have questions on the content that would block merging as is:
|
|
I'll take a technical look at the code before EOD (to many ongoing threads at the moment) |
Thanks @ajbozarth no rush. It can wait till Monday. The MCP comment was quite critical. |
ajbozarth
left a comment
There was a problem hiding this comment.
Code is structurally sound: lib/news.ts mirrors lib/blogs.ts, NewsHighlights stays a Server Component, CSS variables resolve, types are clean. The blockers are around content lifecycle and a few content/code-level fixes (inline).
Cap and lifecycle. The grid is repeat(auto-fit, minmax(260px, 1fr)) against a ~1136px-wide strip, fitting up to 4 cards per row at desktop. 3 items renders as a clean single row. 5 items renders as one row of 4 + one orphan card stretched across the full width on a second row, which looks broken — the same orphan-row issue .blog-grid (globals.css L530-535) avoided by using real borders rather than the gap: 1px; background: var(--border) trick. getAllNews() returns everything in content/news/ with no slice, so the strip will visibly break the moment a fifth news item lands.
Strawman: trim to 3-4 in page.tsx (mirrors recent = blogs.slice(0, 3)), no /news archive page. News is transient — releases live on GitHub releases, events go stale after their date — so an archive of old news is lower value than a blog archive of evergreen writing. If volume ever justifies a discoverable list, /news can reuse .blog-grid later.
If we instead want unbounded news on the homepage, the strip needs the orphan-row fix before merge (inline comment below).
Sort behavior. Pure descending by date means a future-dated Event leads ahead of a more recent Release. Probably right for an events-first framing, but worth confirming intent rather than inheriting it from the sort.
Doc gap. AGENTS.md documents content/blogs/ schema but not content/news/. Adding the front-matter shape (title, date, category, excerpt, url, source) will save the next contributor a source read.
| title: "Mellea v0.5 Released" | ||
| date: "2026-04-07" | ||
| category: "Release" | ||
| excerpt: "This release contains maintainence and new capabilities for streaming and telemetry, and more." |
There was a problem hiding this comment.
Typo.
| excerpt: "This release contains maintainence and new capabilities for streaming and telemetry, and more." | |
| excerpt: "This release contains maintenance and new capabilities for streaming and telemetry, and more." |
| title: "NY Tech Week: Generative Computing Masterclass" | ||
| date: "2026-06-01" | ||
| category: "Event" | ||
| excerpt: "Generative Computing Masterclass: Building Predictable, Auditable AI with Mellea. https://www.tech-week.com/calendar/nyc/tracks/ai-infra" |
There was a problem hiding this comment.
The excerpt has a raw URL appended, which renders as unclickable plain text in the card. The card already has its own url field; the excerpt should be prose only.
| excerpt: "Generative Computing Masterclass: Building Predictable, Auditable AI with Mellea. https://www.tech-week.com/calendar/nyc/tracks/ai-infra" | |
| excerpt: "Generative Computing Masterclass: Building Predictable, Auditable AI with Mellea." |
| @@ -0,0 +1,8 @@ | |||
| --- | |||
There was a problem hiding this comment.
Filename nit (no inline rename possible, flagging here): nyt- reads as "New York Times". The event is "NY Tech Week"; ny-tech-week-2026-june.md is clearer.
| @@ -850,31 +850,122 @@ a { | |||
| } | |||
|
|
|||
| /* ── Stats / Feature strip ── */ | |||
There was a problem hiding this comment.
Stale section header from the removed feature-strip code, sitting directly above the new News Highlights block.
| /* ── Stats / Feature strip ── */ | |
| /* ── News Highlights ── */ |
(and delete the duplicate /* ── News Highlights ── */ on the next line)
| .news-strip { | ||
| display: grid; | ||
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); | ||
| grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); | ||
| gap: 1px; | ||
| background: var(--border); | ||
| margin: 3rem 0; | ||
| } |
There was a problem hiding this comment.
The gap: 1px; background: var(--border) trick produces an unbordered, full-width orphan card whenever item count isn't a multiple of the column count (visible at 5 items today). .blog-grid (L530-535) solved the same problem with real borders. Cheapest mitigation here is auto-fill instead of auto-fit — keeps empty tracks reserved so the orphan stays its minmax size:
| .news-strip { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); | |
| grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); | |
| gap: 1px; | |
| background: var(--border); | |
| margin: 3rem 0; | |
| } | |
| .news-strip { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); | |
| gap: 1px; | |
| background: var(--border); | |
| } |
Moot if we cap to 3-4 items on the homepage and never let an orphan happen.
|
|
||
| .feature-label { | ||
| font-size: 0.85rem; | ||
| .news-card[data-category="event"] .news-card-category { |
There was a problem hiding this comment.
CSS themes event, integration, and community chips, but Release (used in mellea-v0.5-release.md) falls back to default blue with no themed treatment. Intentional (releases own the brand color), or should Release get its own chip color?
|
I've not quite content with how Claude summarized my thoughts above so here's a better attempt manually: Though this is pretty good technically I think we need to establish a lifecycle for news. As part of this lifecycle we should need to establish the following:
No matter what we choose we should document this just like I did with the blog process |

fixes #19
This is a simple take, reusing the existing blogs markdown approach to replace the feature strip with a new section that has some subtle coloring to call out attention to events, integration in docs and releases.
This is a simpler take to get the content out there for now in a simpler and known way.
Draft PR 20 has another take. We should just pick one and merge to not miss the opportunity to call out new content, and make the site somewhat dynamic with new content.
Before the change
After the change