Marcel's Portfolio & Knowledge Hub
October 7, 2025 · View on GitHub
A content‑driven personal portfolio showcasing software projects, deep–dive blog series, multi-part project documentation, and tagged knowledge collections. Built with Astro MDX content collections, a typed content pipeline, and ergonomic utilities for navigation, taxonomy, and reading experience.
Core Features
- Unified listing & RSS of both blog posts and long‑form projects (
GET) - Multi-part (parent / subpost) support for blog series & project chapters via hierarchical
id(e.g.road-to-save-editing/data-structure) - Automatic previous / next / parent navigation (see
getAdjacentPosts&getAdjacentProjects) - TOC generation for standalone MDX and nested sections (
getTOCSections,getTOCSectionsProjects) - Author & tag taxonomy pages (
[...id].astroauthors,[...id].astrotags) - Year grouping for archive views (
groupPostsByYear,groupProjectsByYear) - Reading time + combined reading duration for series (
getPostReadingTime,getCombinedReadingTime)
Content Model (MDX Frontmatter Conventions)
Blog (src/content/blog/...):
title,description,date,tags[],authors[],draft?,image?
Projects (src/content/projects/...):
title,description,startDate,endDate?,contributors[],tags[],link?,image?,order?(for ordered subprojects / chapters)
Hierarchical entries use slash‑separated IDs:
- Parent:
dl2-save-editor - Child:
dl2-save-editor/getting-startedDetection utilities:isSubpost,isSubProject,getParentId
Navigation & Structure
| View | Source |
|---|---|
| Blog index (paginated) | blog/[...page].astro |
| Projects index (paginated) | projects/[...page].astro |
| Project / chapter detail | projects/[...id].astro |
| Tag landing | tags/[...id].astro |
| Author profile | authors/[...id].astro |
| About | about.astro |
| RSS | rss.xml.ts |
🔧 Data Utilities (Selected)
From src/lib/data-utils.ts:
| Purpose | Symbol |
|---|---|
| Fetch published posts | getAllPosts |
| Fetch published projects | getAllProjects |
| Include sub-items | getAllPostsAndSubposts, getAllProjectsAndSubProjects |
| Taxonomy counts | getAllTags, getSortedTags |
| Series navigation | getAdjacentPosts, getAdjacentProjects |
| Subcontent helpers | getSubpostsForParent, getSubProjectsForParent |
| TOC extraction | render + getTOCSections |
| Reading time | readingTime & wrappers in data utils |
🗂 License
See LICENSE.
🙌 Credits
The foundation is built on top of astro-erudite. The structure, sub-posts and Callouts are aweseome and inspired me to build this portfolio.