--- import type { CollectionEntry } from "astro:content"; import { config } from "../../config"; import { getCollection } from "astro:content"; import blogSchema from "../../utils/schemas/blogSchema"; import Layout from "../../layouts/BaseLayout.astro"; import PostElement from "../../components/PostElement.astro"; import RSSIcon from "../../components/Icons/RSS.astro"; const posts = await getCollection("blog", ({ data }) => { return data.draft !== true; }); posts.sort((a, b) => b.data.datePublished.getTime() - a.data.datePublished.getTime()); const postsByYear = posts.reduce[]>>((acc, post) => { const year = post.data.datePublished.getFullYear().toString(); if (!acc[year]) { acc[year] = []; } acc[year].push(post); return acc; }, {}); const years = Object.keys(postsByYear).sort((a, b) => Number(b) - Number(a)); const title = "Valentin Popov's Blog | Software Development, Leadership & Open-Source"; const description = "Explore Valentin Popov's blog on software development, tech leadership, and open-source experiments. Stay updated with in-depth tutorials and expert insights."; const preview = config.og.defaultPreview; const lang = "en"; const schema = blogSchema({ siteUrl: new URL("/", Astro.site).toString(), title, posts, }); ---

Blog posts

{ years.map((year) => (

{year}

    {postsByYear[year].map((post) => ( ))}
)) }