+ {affiliation} +
+ ) : null}), }, - { - href: "https://open.spotify.com/user/31xktcnl7hl34lu4windhu5uwji4?si=46cd7158fc2a4ab0", - label: "Spotify", - ariaLabel: "Spotify profile", - brand: "spotify", - external: true, - icon: ( - - ), - }, ]; export default function HomeSocialLinks() { diff --git a/app/components/listening-track-row.tsx b/app/components/listening-track-row.tsx index 87ee4f0..910a6d0 100644 --- a/app/components/listening-track-row.tsx +++ b/app/components/listening-track-row.tsx @@ -3,9 +3,9 @@ import { HoverLinkArrow, HoverLinkDestinationHint } from "./hover-link-hint"; const HOVER_RING = "ring-0 group-hover/track:ring-[1.5px] " + - "group-hover/track:ring-black/45 group-hover/track:ring-offset-[2px] " + + "group-hover/track:ring-[var(--link-hover-color)] group-hover/track:ring-offset-[2px] " + "group-hover/track:ring-offset-white " + - "dark:group-hover/track:ring-white/40 dark:group-hover/track:ring-offset-[#1F1F23]"; + "dark:group-hover/track:ring-offset-[#1F1F23]"; type ListeningTrackRowProps = { title: string; diff --git a/app/globals.css b/app/globals.css index 54d7b8c..371a5c3 100644 --- a/app/globals.css +++ b/app/globals.css @@ -503,13 +503,11 @@ button.mag-chip:disabled { .home-social-link--email:hover, .home-social-link--github:hover, .home-social-link--x:hover, -.home-social-link--linkedin:hover, -.home-social-link--spotify:hover { color: var(--link-hover-color); } +.home-social-link--linkedin:hover { color: var(--link-hover-color); } .dark .home-social-link--email:hover, .dark .home-social-link--github:hover, .dark .home-social-link--x:hover, -.dark .home-social-link--linkedin:hover, -.dark .home-social-link--spotify:hover { color: var(--link-hover-color); } +.dark .home-social-link--linkedin:hover { color: var(--link-hover-color); } .home-social-link svg { width: 1.75rem; height: 1.75rem; diff --git a/app/lib/course-projects.ts b/app/lib/course-projects.ts index 58870a1..d5c8100 100644 --- a/app/lib/course-projects.ts +++ b/app/lib/course-projects.ts @@ -17,7 +17,7 @@ export type CourseProjectEntry = { }; /** - * Course projects shown on / and /projects. For GitHub-backed entries the + * Course projects shown on /projects. For GitHub-backed entries the * summary, tags, and stars mirror the repo's About, Topics, and star count — * fetched live; the values below are fallbacks kept in sync by hand. */ diff --git a/app/lib/personal-projects.ts b/app/lib/personal-projects.ts index e625aba..92955e5 100644 --- a/app/lib/personal-projects.ts +++ b/app/lib/personal-projects.ts @@ -12,7 +12,7 @@ export type PersonalProject = { }; /** - * Personal projects shown on / and /projects. Each entry mirrors its GitHub + * Personal projects shown on /projects. Each entry mirrors its GitHub * repo: desc = About, stack = Topics, stars = live count — all fetched live; * the values below are fallbacks kept in sync by hand. */ diff --git a/app/misc/page.tsx b/app/misc/page.tsx index 9f29d98..6baa424 100644 --- a/app/misc/page.tsx +++ b/app/misc/page.tsx @@ -138,26 +138,38 @@ const THING_LAYOUT = [ : ["Developer Tools", "Travel Tools", "TV Shows", "Content Creators"], ]; +type AttentionUpdate = { + title: string; + href: string; + source: string; + /** ISO date (YYYY-MM-DD) */ + date: string; +}; + type AttentionItem = { title: string; href: string; source: string; - /** ISO date (YYYY-MM-DD) — shown as metadata; list renders alphabetically */ + /** ISO date (YYYY-MM-DD) — shown as metadata; list renders most recent first */ date: string; + /** Follow-ups threaded under the original item, oldest first */ + updates?: AttentionUpdate[]; }; const CALL_FOR_ATTENTION: AttentionItem[] = [ - { - title: "AI 2027", - href: "https://ai-2027.com/", - source: "AI Futures Project", - date: "2025-04-03", - }, { title: "Trump Says Xi Will \u201cStrongly Consider\u201d Releasing Pastor Ezra Jin", href: "https://www.youtube.com/watch?v=l1AqE1nigEE", source: "EWTN News In Depth", date: "2026-05-15", + updates: [ + { + title: "Pastor freed from prison in China weeks after Trump requested his release", + href: "https://www.npr.org/2026/07/05/nx-s1-5882784/pastor-freed-prison-china-trump-request", + source: "NPR", + date: "2026-07-05", + }, + ], }, { title: "UC Berkeley suspends lecturer for sharing pro-Palestinian views in his classroom", @@ -165,7 +177,7 @@ const CALL_FOR_ATTENTION: AttentionItem[] = [ source: "Berkeleyside", date: "2025-12-09", }, -].sort((a, b) => a.title.localeCompare(b.title, "en", { sensitivity: "base" })); +].sort((a, b) => b.date.localeCompare(a.date)); function formatAttentionDate(isoDate: string): string { return new Date(`${isoDate}T00:00:00Z`).toLocaleDateString("en-US", { @@ -177,6 +189,7 @@ function formatAttentionDate(isoDate: string): string { } const RESOURCES = [ + { name: "AI 2027", href: "https://ai-2027.com/", hintLabel: "AI Futures Project" }, { name: "Anthropic Academy", href: "https://www.anthropic.com/learn" }, { name: "Apple Developer Learn", @@ -359,28 +372,56 @@ export default function Misc() {
- {title} -
+ {CALL_FOR_ATTENTION.map(({ title, href, source, date, updates }) => ( + -- {source} · {formatAttentionDate(date)} -
- ++ {source} · {formatAttentionDate(date)} +
+ + {updates?.map((update) => ( + + ))} +