-
Notifications
You must be signed in to change notification settings - Fork 6
Add news/highlights section #46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| --- | ||
| title: "All Things AI 2026" | ||
| date: "2026-05-03" | ||
| category: "Event" | ||
| excerpt: "Using Mellea to reliably get information from documents with a small model using Docling and Granite" | ||
| url: "https://2026.allthingsai.org/sessions/from-unstructured-documents-to-actionable-insights-a-workshop-on-docling-granite-and-mellea" | ||
| source: "All Things AI" | ||
| --- |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| --- | ||
| 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." | ||
| url: "https://github.com/generative-computing/mellea/releases/tag/v0.5.0" | ||
| source: "GitHub" | ||
| --- | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,8 @@ | ||||||
| --- | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Filename nit (no inline rename possible, flagging here): |
||||||
| 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" | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The excerpt has a raw URL appended, which renders as unclickable plain text in the card. The card already has its own
Suggested change
|
||||||
| url: "https://partiful.com/e/3WdKVdPlKG4V9vvsgNBa" | ||||||
| source: "NY Tech Week" | ||||||
| --- | ||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -850,31 +850,122 @@ a { | |||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| /* ── Stats / Feature strip ── */ | ||||||||||||||||||||||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Stale section header from the removed
Suggested change
(and delete the duplicate |
||||||||||||||||||||||||||||||
| .feature-strip { | ||||||||||||||||||||||||||||||
| /* ── News Highlights ── */ | ||||||||||||||||||||||||||||||
| .news-section { | ||||||||||||||||||||||||||||||
| margin: 3rem -2rem 0; | ||||||||||||||||||||||||||||||
| padding: 1.5rem 2rem 1.75rem; | ||||||||||||||||||||||||||||||
| background: var(--bg-secondary); | ||||||||||||||||||||||||||||||
| border-top: 1px solid var(--border); | ||||||||||||||||||||||||||||||
| border-bottom: 1px solid var(--border); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-section-label { | ||||||||||||||||||||||||||||||
| font-family: var(--font-mono); | ||||||||||||||||||||||||||||||
| font-size: 0.7rem; | ||||||||||||||||||||||||||||||
| font-weight: 600; | ||||||||||||||||||||||||||||||
| letter-spacing: 0.12em; | ||||||||||||||||||||||||||||||
| text-transform: uppercase; | ||||||||||||||||||||||||||||||
| color: var(--text-tertiary); | ||||||||||||||||||||||||||||||
| margin-bottom: 0.75rem; | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .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; | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
Comment on lines
+872
to
877
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The
Suggested change
Moot if we cap to 3-4 items on the homepage and never let an orphan happen. |
||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .feature-item { | ||||||||||||||||||||||||||||||
| .news-card { | ||||||||||||||||||||||||||||||
| display: flex; | ||||||||||||||||||||||||||||||
| flex-direction: column; | ||||||||||||||||||||||||||||||
| gap: 0.5rem; | ||||||||||||||||||||||||||||||
| padding: 1.25rem 1.5rem; | ||||||||||||||||||||||||||||||
| padding-left: calc(1.5rem + 2px); | ||||||||||||||||||||||||||||||
| background: var(--bg-card); | ||||||||||||||||||||||||||||||
| padding: 2rem; | ||||||||||||||||||||||||||||||
| border-left: 2px solid var(--accent-blue); | ||||||||||||||||||||||||||||||
| transition: background 0.15s, border-color 0.15s; | ||||||||||||||||||||||||||||||
| text-decoration: none; | ||||||||||||||||||||||||||||||
| color: inherit; | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card:hover { | ||||||||||||||||||||||||||||||
| background: var(--bg-card-hover); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card-top { | ||||||||||||||||||||||||||||||
| display: flex; | ||||||||||||||||||||||||||||||
| align-items: center; | ||||||||||||||||||||||||||||||
| justify-content: space-between; | ||||||||||||||||||||||||||||||
| gap: 0.75rem; | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .feature-number { | ||||||||||||||||||||||||||||||
| .news-card-category { | ||||||||||||||||||||||||||||||
| font-family: var(--font-mono); | ||||||||||||||||||||||||||||||
| font-size: 2rem; | ||||||||||||||||||||||||||||||
| font-size: 0.6rem; | ||||||||||||||||||||||||||||||
| font-weight: 600; | ||||||||||||||||||||||||||||||
| letter-spacing: 0.08em; | ||||||||||||||||||||||||||||||
| text-transform: uppercase; | ||||||||||||||||||||||||||||||
| color: var(--accent-blue); | ||||||||||||||||||||||||||||||
| display: block; | ||||||||||||||||||||||||||||||
| margin-bottom: 0.25rem; | ||||||||||||||||||||||||||||||
| background: rgba(69, 137, 255, 0.1); | ||||||||||||||||||||||||||||||
| padding: 0.2rem 0.5rem; | ||||||||||||||||||||||||||||||
| border-radius: 2px; | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .feature-label { | ||||||||||||||||||||||||||||||
| font-size: 0.85rem; | ||||||||||||||||||||||||||||||
| .news-card[data-category="event"] .news-card-category { | ||||||||||||||||||||||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. CSS themes |
||||||||||||||||||||||||||||||
| color: var(--accent-green); | ||||||||||||||||||||||||||||||
| background: rgba(66, 190, 101, 0.1); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card[data-category="integration"] .news-card-category { | ||||||||||||||||||||||||||||||
| color: var(--accent-purple); | ||||||||||||||||||||||||||||||
| background: rgba(165, 110, 255, 0.1); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card[data-category="community"] .news-card-category { | ||||||||||||||||||||||||||||||
| color: var(--accent-cyan); | ||||||||||||||||||||||||||||||
| background: rgba(51, 177, 255, 0.1); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card-date { | ||||||||||||||||||||||||||||||
| font-size: 0.7rem; | ||||||||||||||||||||||||||||||
| color: var(--text-tertiary); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card-title { | ||||||||||||||||||||||||||||||
| font-size: 0.875rem; | ||||||||||||||||||||||||||||||
| font-weight: 600; | ||||||||||||||||||||||||||||||
| color: var(--text-primary); | ||||||||||||||||||||||||||||||
| line-height: 1.4; | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card-excerpt { | ||||||||||||||||||||||||||||||
| font-size: 0.8rem; | ||||||||||||||||||||||||||||||
| color: var(--text-secondary); | ||||||||||||||||||||||||||||||
| line-height: 1.55; | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card-link { | ||||||||||||||||||||||||||||||
| font-family: var(--font-mono); | ||||||||||||||||||||||||||||||
| font-size: 0.7rem; | ||||||||||||||||||||||||||||||
| color: var(--accent-blue); | ||||||||||||||||||||||||||||||
| margin-top: auto; | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card:hover .news-card-link { | ||||||||||||||||||||||||||||||
| text-decoration: underline; | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card[data-category="event"] { | ||||||||||||||||||||||||||||||
| border-left-color: var(--accent-green); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card[data-category="integration"] { | ||||||||||||||||||||||||||||||
| border-left-color: var(--accent-purple); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| .news-card[data-category="community"] { | ||||||||||||||||||||||||||||||
| border-left-color: var(--accent-cyan); | ||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| /* ── How it works ── */ | ||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| import type { NewsItem } from '@/lib/news'; | ||
|
|
||
| function formatDate(dateStr: string) { | ||
| if (!dateStr) return ''; | ||
| const [year, month, day] = dateStr.split('-').map(Number); | ||
| const d = new Date(year, month - 1, day); | ||
| return d.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }); | ||
| } | ||
|
|
||
| export default function NewsHighlights({ items }: { items: NewsItem[] }) { | ||
| if (items.length === 0) return null; | ||
|
|
||
| return ( | ||
| <div className="news-strip"> | ||
| {items.map((item) => ( | ||
| <a | ||
| key={item.slug} | ||
| href={item.url} | ||
| target="_blank" | ||
| rel="noopener noreferrer" | ||
| className="news-card" | ||
| data-category={item.category.toLowerCase()} | ||
| > | ||
| <div className="news-card-top"> | ||
| <span className="news-card-category">{item.category}</span> | ||
| <span className="news-card-date">{formatDate(item.date)}</span> | ||
| </div> | ||
| <h3 className="news-card-title">{item.title}</h3> | ||
| <p className="news-card-excerpt">{item.excerpt}</p> | ||
| <span className="news-card-link"> | ||
| {item.source ? `${item.source} ↗` : 'Read more ↗'} | ||
| </span> | ||
| </a> | ||
| ))} | ||
| </div> | ||
| ); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| import fs from 'fs'; | ||
| import path from 'path'; | ||
| import matter from 'gray-matter'; | ||
|
|
||
| const NEWS_DIR = path.join(process.cwd(), 'content/news'); | ||
|
|
||
| export interface NewsItem { | ||
| slug: string; | ||
| title: string; | ||
| date: string; | ||
| category: string; | ||
| excerpt: string; | ||
| url: string; | ||
| source: string; | ||
| } | ||
|
|
||
| export function getAllNews(): NewsItem[] { | ||
| const files = fs.readdirSync(NEWS_DIR).filter((f) => f.endsWith('.md')); | ||
|
|
||
| const items = files.map((filename) => { | ||
| const slug = filename.replace(/\.md$/, ''); | ||
| const filePath = path.join(NEWS_DIR, filename); | ||
| const raw = fs.readFileSync(filePath, 'utf-8'); | ||
| const { data } = matter(raw); | ||
|
|
||
| return { | ||
| slug, | ||
| title: data.title ?? slug, | ||
| date: data.date ?? '', | ||
| category: data.category ?? 'News', | ||
| excerpt: data.excerpt ?? '', | ||
| url: data.url ?? '', | ||
| source: data.source ?? '', | ||
| } as NewsItem; | ||
| }); | ||
|
|
||
| return items.sort((a, b) => (a.date < b.date ? 1 : -1)); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo.