From 42bea4d9bacd65382d40f8591ae991881822fc99 Mon Sep 17 00:00:00 2001 From: Latte Date: Sat, 7 Mar 2026 12:52:05 +0100 Subject: [PATCH] Add blog post and support pubDate/tags Add new post "After the Silence". Update content schema to use pubDate and include tags (default empty). Update blog listing, post page and start page to use pubDate, render tag lists, and compute/show up to two related posts by tag overlap. Misc formatting and small display tweaks. --- src/content/blog/after-the-silence.md | 133 ++++++++++++++ src/content/blog/hello-world.md | 7 +- src/content/blog/love-without-access.md | 27 +-- src/content/config.ts | 17 +- src/pages/blog/[...slug].astro | 214 ++++++++++++++++++++-- src/pages/blog/index.astro | 102 ++++++++--- src/pages/start.astro | 230 +++++++++++++++--------- 7 files changed, 580 insertions(+), 150 deletions(-) create mode 100644 src/content/blog/after-the-silence.md diff --git a/src/content/blog/after-the-silence.md b/src/content/blog/after-the-silence.md new file mode 100644 index 0000000..4cd7bb8 --- /dev/null +++ b/src/content/blog/after-the-silence.md @@ -0,0 +1,133 @@ +--- +title: "After the Silence" +description: "Reflections on what remains after a meaningful relationship ends, and how love can transform without disappearing." +pubDate: 2026-03-04 +tags: ["love", "reflection", "healing", "relationships", "personal"] +--- + +When a relationship ends, the world does not become quiet immediately. + +At first there is noise. + +Questions that circle endlessly. +Memories that appear without warning. +Moments where the absence of someone feels louder than their presence ever was. + +But eventually something changes. + +The storm that once lived inside your mind slowly settles. + +And what remains is something different. + +A silence that is not empty - but reflective. + +--- + +## The Quiet After Love + +The silence that follows a meaningful relationship is unlike any other. + +It is not the silence of indifference. +Nor the silence of forgetting. + +It is the quiet that appears when two lives that once moved together begin to move separately. + +Routines shift. +Spaces feel different. +The future you once imagined slowly dissolves into something undefined. + +At first, that silence can feel unsettling. + +But over time it becomes something else. + +A place where reflection becomes possible. + +--- + +## Love Does Not Always Disappear + +One of the more confusing realizations after a relationship ends is that love does not always vanish with it. + +Even when distance becomes necessary, care can remain. + +This can feel contradictory at first. + +We often expect emotional closure to mean the disappearance of feeling. + +But meaningful connections rarely dissolve that neatly. + +Sometimes love simply changes form. + +It moves from something shared into something carried quietly. + +And that does not make it less real. + +--- + +## The Quiet Transformation + +Time has a way of reshaping emotional intensity. + +What once felt overwhelming slowly becomes more understandable. + +Moments that once caused pain begin to look different when viewed from a distance. + +Not because the past changes. + +But because you do. + +Perspective grows. + +The urgency fades. + +And what once felt like chaos becomes something you can hold with calm understanding. + +This transformation rarely happens suddenly. + +It arrives slowly, through reflection, distance, and the quiet work of healing. + +--- + +## Carrying Without Clinging + +There is a difference between remembering someone and remaining attached to them. + +Clinging keeps you in the past. + +Carrying allows you to move forward. + +When you carry something, you acknowledge its importance without letting it control your direction. + +You recognize the place it had in your life. + +You respect the impact it left. + +But you also accept that some chapters belong where they ended. + +In that sense, remembering can become an act of peace rather than longing. + +--- + +## What Remains + +When the emotional storm has passed, something meaningful remains. + +Not the loss. + +Not the confusion. + +But the understanding. + +You understand more about the kind of connection that matters to you. + +You understand more about your own capacity to care deeply. + +And perhaps most importantly, you understand that love itself was never the mistake. + +Even when relationships end, the love that existed still shapes who we become. + +It leaves behind lessons, perspective, and a deeper awareness of what it means to connect with another human being. + +And sometimes, what remains after the silence is not emptiness. + +But growth. diff --git a/src/content/blog/hello-world.md b/src/content/blog/hello-world.md index a0008d0..1cf92c2 100644 --- a/src/content/blog/hello-world.md +++ b/src/content/blog/hello-world.md @@ -1,7 +1,8 @@ ---- +--- title: "Welcome to the Den" -date: 2026-03-01 description: "First proper post. Why I built this site, what it runs on, and what to expect." +pubDate: 2026-03-01 +tags: ["self-hosting", "privacy", "personal-web", "infrastructure"] draft: false --- @@ -11,7 +12,7 @@ So I finally got around to setting up a proper blog. Welcome. I wanted a place to write that wasn't owned by a corporation. No Medium, no Substack, no algorithm deciding who sees what. Just markdown files on my own server, served by nginx from a Docker container I control. -That's the whole point of the den — owning your own space on the internet. +That's the whole point of the den - owning your own space on the internet. ## What It Runs On diff --git a/src/content/blog/love-without-access.md b/src/content/blog/love-without-access.md index c4c6572..6e8c234 100644 --- a/src/content/blog/love-without-access.md +++ b/src/content/blog/love-without-access.md @@ -1,7 +1,8 @@ ---- +--- title: "Love Without Access" -date: 2026-03-01 -description: "A reflection on a first love — what it meant, what it cost, and why distance was the most loving thing left." +description: "A reflection on a first love - what it meant, what it cost, and why distance was the most loving thing left." +pubDate: 2026-03-01 +tags: ["love", "reflection", "healing", "relationships", "personal"] --- *by LATTE* @@ -16,7 +17,7 @@ Power and surrender that were, underneath it all, just different shapes of trust This isn't a story about blame. And it's not a story about anger. -It's a story about something that stayed real… +It's a story about something that stayed real... even after it stopped being reachable. --- @@ -25,7 +26,7 @@ even after it stopped being reachable. We were friends first. -Maybe that's what made it so deep. It didn't explode into existence — it grew. Slowly. Safely. +Maybe that's what made it so deep. It didn't explode into existence - it grew. Slowly. Safely. From gaming together to talking for hours. From talking to tension. From tension to touch. @@ -75,7 +76,7 @@ Silence. "I don't feel it anymore." -And something in me went very quiet — and very loud — at the same time. +And something in me went very quiet - and very loud - at the same time. Because I could still feel myself holding on. And carrying someone who no longer carries back @@ -98,7 +99,7 @@ But no longer together. A body that says yes. Words that say no. -That contradiction doesn't just hurt emotionally — it destabilizes you. +That contradiction doesn't just hurt emotionally - it destabilizes you. Hope becomes a reflex. And every time hope collapses, you fracture a little with it. @@ -199,7 +200,7 @@ That's architecture. ## On Being Replaced -Yes — he found someone new quickly. +Yes - he found someone new quickly. That hurt. @@ -222,7 +223,7 @@ Something ending does not mean it was nothing. ## For You -If you ever read this — +If you ever read this - I want you to know that what we had was real to me. Not experimental. Not temporary. Not a placeholder. @@ -243,7 +244,7 @@ Trying. Failing. Adjusting. Discovering what intimacy meant. Discovering what we meant. -You weren't just someone who entered my life — +You weren't just someone who entered my life - you were part of my becoming. That matters. @@ -262,7 +263,7 @@ I was trying to hold something I didn't yet know how to let go of. But even then, I wasn't against you. -I saw you as someone struggling — not someone malicious. +I saw you as someone struggling - not someone malicious. There were moments when you softened completely with me. Moments where you rested your full weight without guarding yourself. @@ -295,7 +296,7 @@ It changes shape. It becomes quieter. It becomes something I carry instead of something I reach for. -And yes — I'm going to be a little playful about it: +And yes - I'm going to be a little playful about it: You're on my website. Do you get that? @@ -333,4 +334,4 @@ to be worthy of being held. The wolf in me was never meant to become smaller. Only to find the right pack. -— LATTE +- LATTE diff --git a/src/content/config.ts b/src/content/config.ts index a6a1b8e..8ab26a5 100644 --- a/src/content/config.ts +++ b/src/content/config.ts @@ -1,13 +1,14 @@ -import { z, defineCollection } from 'astro:content'; +import { z, defineCollection } from "astro:content"; const blog = defineCollection({ - type: 'content', - schema: z.object({ - title: z.string(), - date: z.coerce.date(), - description: z.string(), - draft: z.boolean().optional().default(false), - }), + type: "content", + schema: z.object({ + title: z.string(), + description: z.string(), + pubDate: z.coerce.date(), + tags: z.array(z.string()).default([]), + draft: z.boolean().optional().default(false), + }), }); export const collections = { blog }; diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro index 554d6a8..8ce849d 100644 --- a/src/pages/blog/[...slug].astro +++ b/src/pages/blog/[...slug].astro @@ -1,16 +1,43 @@ --- import BaseLayout from "../../layouts/BaseLayout.astro"; -import { getCollection } from "astro:content"; +import { getCollection, type CollectionEntry } from "astro:content"; + +type BlogPost = CollectionEntry<"blog">; export async function getStaticPaths() { const posts = await getCollection("blog", ({ data }) => !data.draft); + return posts.map((post) => ({ params: { slug: post.slug }, - props: { post }, + props: { + post, + relatedPosts: posts + .filter((candidate) => candidate.slug !== post.slug) + .map((candidate) => ({ + post: candidate, + score: candidate.data.tags.filter((tag) => + post.data.tags.includes(tag), + ).length, + })) + .sort((a, b) => { + if (b.score !== a.score) return b.score - a.score; + return ( + b.post.data.pubDate.valueOf() - + a.post.data.pubDate.valueOf() + ); + }) + .filter((candidate) => candidate.score > 0) + .slice(0, 2) + .map((candidate) => candidate.post), + }, })); } -const { post } = Astro.props; +const { post, relatedPosts = [] } = Astro.props as { + post: BlogPost; + relatedPosts: BlogPost[]; +}; + const { Content } = await post.render(); function formatDate(date: Date) { @@ -19,7 +46,7 @@ function formatDate(date: Date) { ---