From 78c2ee656e870f0df580086b9fa64d9bbd1b7a95 Mon Sep 17 00:00:00 2001 From: Ryan Salazar Date: Thu, 21 May 2026 01:51:29 +0000 Subject: [PATCH] homepage: typography upgrade + ArticleFeed polish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - layout.tsx: load Lora (serif) + Inter (sans) via next/font/google, self-hosted at build time, exposed as --font-serif / --font-sans CSS variables on . No CDN fetch, no FOIT, no GDPR concern. - tailwind.css: --font-heading and --font-body now reference the next/font variables with Georgia / -apple-system fallbacks for the brief window before the self-hosted face is ready. --font-mono upgraded to IBM Plex Mono → ui-monospace → Courier New fallback (DoubleTicker chips already specify IBM Plex Mono directly). - ArticleFeed: drop the FEATURED filter chip (duplicates the Staff Editorial section above), add publish date alongside the byline on every card, lift the homepage feed cap from 200 → 5000. - api/public/posts: lift MAX_LIMIT to 10000 so client-side pagination + infinite-scroll see the full archive. --- src/app/api/public/posts/route.ts | 5 ++++- src/app/home-page/components/ArticleFeed.tsx | 16 +++++++++++---- src/app/layout.tsx | 21 +++++++++++++++++++- src/styles/tailwind.css | 9 ++++++--- 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/app/api/public/posts/route.ts b/src/app/api/public/posts/route.ts index e380f15..03237bb 100644 --- a/src/app/api/public/posts/route.ts +++ b/src/app/api/public/posts/route.ts @@ -3,7 +3,10 @@ import { getLatestImportedArticles } from "@/lib/articles/legacy-source"; export const revalidate = 300; -const MAX_LIMIT = 200; +// Homepage feed now renders every imported post; pagination + infinite- +// scroll happen client-side over the full set. Keep an absolute ceiling +// only as a safety valve, not a UX cap. +const MAX_LIMIT = 10000; const DEFAULT_LIMIT = 100; export async function GET(request: Request) { diff --git a/src/app/home-page/components/ArticleFeed.tsx b/src/app/home-page/components/ArticleFeed.tsx index 76f1fb6..b561736 100644 --- a/src/app/home-page/components/ArticleFeed.tsx +++ b/src/app/home-page/components/ArticleFeed.tsx @@ -26,7 +26,7 @@ interface ArticleItem { -const ALL_CATEGORIES = ["All", "BROADCAST", "FEATURED", "POST PRODUCTION", "ANIMATION"]; +const ALL_CATEGORIES = ["All", "BROADCAST", "POST PRODUCTION", "ANIMATION"]; const SOURCE_FILTERS = ["All", "Live", "Imported"] as const; type SourceFilter = typeof SOURCE_FILTERS[number]; type FeedMode = "pagination" | "infinite"; @@ -94,7 +94,7 @@ export default function ArticleFeed() { let cancelled = false; (async () => { try { - const res = await fetch("/api/public/posts?limit=200", { cache: "no-store" }); + const res = await fetch("/api/public/posts?limit=5000", { cache: "no-store" }); if (!res.ok) throw new Error(`HTTP ${res.status}`); const json = await res.json(); const items = Array.isArray(json?.items) ? (json.items as ArticleItem[]) : []; @@ -613,11 +613,19 @@ export default function ArticleFeed() { {article?.excerpt}

-
+
- + By {article?.author} + {article?.date && ( + <> + + + + )}
) { return ( - + {/* hreflang entries removed pending real i18n routes (Phase D). */} diff --git a/src/styles/tailwind.css b/src/styles/tailwind.css index 7d09c02..d5d00b2 100644 --- a/src/styles/tailwind.css +++ b/src/styles/tailwind.css @@ -17,9 +17,12 @@ --color-border: #2a2a2a; --color-top-bar: #1a2535; --color-sub-nav: #161c28; - --font-heading: Georgia, 'Times New Roman', serif; - --font-body: Arial, Helvetica, sans-serif; - --font-mono: 'Courier New', Courier, monospace; + /* --font-serif and --font-sans are injected on by next/font/google + (Lora + Inter) in src/app/layout.tsx. The system-font tails are real + fallbacks for the brief window before the self-hosted face is ready. */ + --font-heading: var(--font-serif), Georgia, 'Times New Roman', serif; + --font-body: var(--font-sans), -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif; + --font-mono: 'IBM Plex Mono', ui-monospace, 'SF Mono', Menlo, Consolas, 'Courier New', monospace; --transition-fast: 0.18s ease; --transition-base: 0.25s ease; --transition-slow: 0.4s ease;