diff --git a/content/web/data/projects.yaml b/content/web/data/projects.yaml
new file mode 100644
index 0000000..3f9c93f
--- /dev/null
+++ b/content/web/data/projects.yaml
@@ -0,0 +1,44 @@
+- ezcache:
+ name: "ezcache"
+ url: "https://pkg.go.dev/codeberg.org/danjones000/ezcache"
+ desc: "Dead simple in-memory caching library for Go, designed to improve application performance by reducing database load and API calls."
+
+- nomino:
+ name: "nomino"
+ url: "https://pkg.go.dev/codeberg.org/danjones000/nomino"
+ desc: "Go library for random filename generation, useful for creating unique identifiers and preventing naming conflicts."
+
+- gin-error-middleware:
+ name: "gin error middleware"
+ url: "https://pkg.go.dev/codeberg.org/danjones000/gin-error-handler"
+ desc: "A middleware for Go Gin framework and wrapper functions to make handling errors easier and more idiomatic, improving API robustness."
+
+- responsable:
+ name: "Responsable Errors"
+ url: "https://pkg.go.dev/codeberg.org/danjones000/responsable-errors"
+ desc: "A small Go library that provides errors that can be more useful in the context of a web app. The heart of gin error middleware, it enables structured and user-friendly error responses."
+
+- droplogger:
+ name: "droplogger"
+ url: "https://gitlab.com/danjones000/droplogger"
+ desc: "Python logging application especially suited for life-logging with IFTTT and Dropbox, providing automated personal data collection."
+
+- my-log:
+ name: "my-log"
+ url: "https://codeberg.org/danjones000/my-log/"
+ desc: "A work-in-progress complete rewrite of droplogger in Go, aiming for improved performance and maintainability."
+
+- strip-beats:
+ name: "strip-beats"
+ url: "https://codeberg.org/danjones000/strip-beats"
+ desc: "Go CLI app for transforming a folder of music videos and music files, with semi-automatic tagging and a user-friendly TUI, streamlining media organization. *This is a work in progress. Not yet fully functional.*"
+
+- object-spy:
+ name: "Object Spy"
+ url: "https://packagist.org/packages/danjones000/object-spy"
+ desc: "PHP debugging library that makes it easy to inspect private properties and methods without using reflection, simplifying complex debugging tasks."
+
+- go-status:
+ name: "http go status"
+ url: "https://codeberg.org/danjones000/http-go-status"
+ desc: "Super simple web server that just returns the HTTP status you ask for, useful for testing and debugging HTTP client behavior."
diff --git a/content/web/sections/050-projects.md b/content/web/sections/050-projects.md
index 0977cab..f23c647 100644
--- a/content/web/sections/050-projects.md
+++ b/content/web/sections/050-projects.md
@@ -2,84 +2,3 @@
id: projects
---
## Open Source Projects
-
-
-
-
-
-### ezcache
-
-🔗
-Dead simple in-memory caching library for Go, designed to improve application performance by reducing database load and API calls.
-
-
-
-
-
-### nomino
-
-🔗
-Go library for random filename generation, useful for creating unique identifiers and preventing naming conflicts.
-
-
-
-
-
-### gin error middleware
-
-🔗
-A middleware for Go Gin framework and wrapper functions to make handling errors easier and more idiomatic, improving API robustness.
-
-
-
-
-
-### Responsable Errors
-
-🔗
-A small Go library that provides errors that can be more useful in the context of a web app. The heart of gin error middleware, it enables structured and user-friendly error responses.
-
-
-
-
-
-### droplogger
-
-🔗
-Python logging application especially suited for life-logging with IFTTT and Dropbox, providing automated personal data collection.
-
-#### my-log
-
-🔗
-A work-in-progress complete rewrite of droplogger in Go, aiming for improved performance and maintainability.
-
-
-
-
-
-### strip-beats
-
-🔗
-Go CLI app for transforming a folder of music videos and music files, with semi-automatic tagging and a user-friendly TUI, streamlining media organization. *This is a work in progress. Not yet fully functional.*
-
-
-
-
-
-### Object Spy
-
-🔗
-PHP debugging library that makes it easy to inspect private properties and methods without using reflection, simplifying complex debugging tasks.
-
-
-
-
-
-### http go status
-
-🔗
-Super simple web server that just returns the HTTP status you ask for, useful for testing and debugging HTTP client behavior.
-
-
-
-
diff --git a/layouts/_default/web-resume.html b/layouts/_default/web-resume.html
index 05bcff0..7b1d4b4 100644
--- a/layouts/_default/web-resume.html
+++ b/layouts/_default/web-resume.html
@@ -57,6 +57,14 @@
{{ range .Resources.Match "sections/*.md" }}
{{ end }}
diff --git a/layouts/_partials/projects.html b/layouts/_partials/projects.html
new file mode 100644
index 0000000..13c11f4
--- /dev/null
+++ b/layouts/_partials/projects.html
@@ -0,0 +1,18 @@
+
+
+ {{ with . | transform.Unmarshal -}}
+ {{- range $project := . -}}
+ {{- range $slug, $proj := $project -}}
+
+
+