From 89eea526b17798f4d7691a4a5b7df44af2d5e6db Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 3 Nov 2026 20:01:56 +0000 Subject: [PATCH 1/5] Build the redesigned home Implements #31, part of #35. - The intro: the shared Intro block with the home's text (HOME_INTRO), the "About me" button and the profiles, beside the topic map. - Projects: a tile per project from src/data/projects.ts, newest first. - Writing: the articles only, newest first, with their date, project and reading time; the section is #writing, where "All writing" goes. The activity logs keep their pages but leave the home. - Picking a dot on the map shows only the articles about its topic. An article's topics come from a `topics` frontmatter field, or else from src/data/topics.ts, which holds the prototype's reading of the 18 articles. The script also works when a ClientRouter swaps pages. - The page has its own title and meta description. - The temporary /map-preview/ page (#30) is gone, with its sitemap filter. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013MdjUerTCBDeF5DG9puDd2 --- astro.config.mjs | 3 +- src/components/ArticlesList.astro | 72 ------ src/components/Footer.astro | 8 +- src/content.config.ts | 4 + src/data/profiles.ts | 6 + src/data/topics.ts | 43 ++++ src/pages/index.astro | 414 ++++++++++++++++++++++++++++-- src/pages/map-preview.astro | 34 --- 8 files changed, 442 insertions(+), 142 deletions(-) delete mode 100644 src/components/ArticlesList.astro create mode 100644 src/data/profiles.ts create mode 100644 src/data/topics.ts delete mode 100644 src/pages/map-preview.astro diff --git a/astro.config.mjs b/astro.config.mjs index 3182e6d..45fb002 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -34,8 +34,7 @@ export default defineConfig({ shikiConfig: { theme: 'github-light' }, // code blocks sit on the white page, in a light frame (prose.css) }, integrations: [sitemap({ - // TEMPORARY (#30): /map-preview/ shows the intro and the map until the home uses them; #31 deletes it. - filter: (page) => !/^\/(documents|map-preview)\/?$/.test(new URL(page).pathname), + filter: (page) => !/^\/documents\/?$/.test(new URL(page).pathname), serialize: (item) => ({ ...item, lastmod: lastModified.get(new URL(item.url).pathname) }), }), trailingSlashRedirects()], site: 'https://meaningfool.net', diff --git a/src/components/ArticlesList.astro b/src/components/ArticlesList.astro deleted file mode 100644 index dae2449..0000000 --- a/src/components/ArticlesList.astro +++ /dev/null @@ -1,72 +0,0 @@ ---- -import type { CollectionEntry } from 'astro:content'; - -export interface Props { - articles: CollectionEntry<'writing'>[]; -} - -const { articles } = Astro.props; ---- - - - - \ No newline at end of file diff --git a/src/components/Footer.astro b/src/components/Footer.astro index d98f260..a57720d 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -1,13 +1,9 @@ --- // The site footer: the wordmark, then About and the profiles elsewhere. On phones the links go under the wordmark. import Wordmark from './Wordmark.astro'; +import { profiles } from '../data/profiles'; -const links = [ - { href: '/about/', label: 'About' }, - { href: 'https://www.linkedin.com/in/josselinperrus/', label: 'LinkedIn' }, - { href: 'https://github.com/meaningfool', label: 'GitHub' }, - { href: 'https://x.com/nonils', label: 'X' }, -]; +const links = [{ href: '/about/', label: 'About' }, ...profiles]; ---