homepage: typography upgrade + ArticleFeed polish

- 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 <html>. 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.
This commit is contained in:
Ryan Salazar
2026-05-21 01:51:29 +00:00
parent 567a45079f
commit 78c2ee656e
4 changed files with 42 additions and 9 deletions

View File

@@ -1,6 +1,25 @@
import React, { Suspense } from 'react';
import type { Metadata, Viewport } from 'next';
import { Lora, Inter } from 'next/font/google';
import '../styles/tailwind.css';
// Self-hosted at build time by next/font — no runtime CDN fetch, no FOIT,
// no GDPR concern. The two variables are consumed by --font-heading and
// --font-body in src/styles/tailwind.css with Georgia/Arial fallbacks.
const lora = Lora({
subsets: ['latin'],
weight: ['400', '500', '600', '700'],
style: ['normal', 'italic'],
variable: '--font-serif',
display: 'swap',
});
const inter = Inter({
subsets: ['latin'],
weight: ['300', '400', '500', '600', '700', '800'],
variable: '--font-sans',
display: 'swap',
});
// SystemStatusBar removed — the "articles indexed / events tracked / [v2.0.0]"
// strip was eating vertical space without serving readers.
import AskBBAI from '@/components/AskBBAI';
@@ -81,7 +100,7 @@ export default function RootLayout({
}: Readonly<{children: React.ReactNode;}>) {
return (
<html lang="en">
<html lang="en" className={`${lora.variable} ${inter.variable}`}>
<head>
{/* hreflang entries removed pending real i18n routes (Phase D). */}