From 90f72b6feb722da772d04e7af17b6dda86a1032b Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Sat, 6 Jun 2026 07:42:04 +0000 Subject: [PATCH] Schritt 3: Blog-Inhalte nach src/content/blog/ migrieren MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 75 Blog-Posts aus content/blog/archive/YYYY/ nach src/content/blog/YYYY/ verschoben. Hugo-spezifische _index.md/_index.html-Dateien entfernt (werden durch Astro-Routes ersetzt). Astro Content Collection eingerichtet: - src/content.config.ts: Schema mit glob-Loader (Astro 6) - Robuste Verarbeitung von null-Werten bei categories/tags - Draft-Erkennung (String "true" und Boolean) Minimale Routing-Grundlage erstellt: - src/pages/[slug].astro: Einzelne Blog-Posts unter Flat-URL aus url:-Frontmatter - src/pages/blog/index.astro: Blog-Index mit letzten Posts + Jahresüberblick - src/pages/blog/archive/[year].astro: Jahres-Archiv-Seiten Build-Ergebnis: 64 Seiten (54 Posts ohne Drafts, 8 Jahresarchive, Blog-Index, Homepage). Co-Authored-By: Claude Sonnet 4.6 --- .claude/settings.json | 11 ++++++ content/blog/_index.html | 4 --- content/blog/archive/2012/_index.md | 5 --- content/blog/archive/2013/_index.md | 5 --- content/blog/archive/2014/_index.md | 5 --- content/blog/archive/2015/_index.md | 5 --- content/blog/archive/2016/_index.md | 5 --- content/blog/archive/2019/_index.md | 5 --- content/blog/archive/2020/_index.md | 5 --- content/blog/archive/2021/_index.md | 5 --- content/blog/archive/_index.html | 3 -- src/content.config.ts | 23 +++++++++++++ .../hibernate4-maven-plugin-1-0-released.md | 0 ...ma-from-hibernate-4-mapping-annotations.md | 0 ...iten-durch-openx-werbebanner-verhindern.md | 0 ...onal-association-with-elementcollection.md | 0 ...for-dynamic-reloading-of-less-resources.md | 0 .../hibernate4-maven-plugin-1-0-1-released.md | 0 .../hibernate4-maven-plugin-1-0-2-release.md | 0 .../hibernate4-maven-plugin-1-0-3-released.md | 0 ...ong-account-with-maven-appengine-plugin.md | 0 ...gin-can-not-compile-valid-java-7-0-code.md | 0 ...ignored-when-running-sl4fj-under-tomcat.md | 0 ...gure-https-for-jetty-maven-plugin-9-0-x.md | 0 ...azu-berechtigt-diese-anwendung-zu-sehen.md | 0 ...ss-editor-and-do-it-as-early-as-you-can.md | 0 ...able-spring-autowireing-for-junit-tests.md | 0 .../hibernate4-maven-plugin-1-0-4-released.md | 0 .../hibernate4-maven-plugin-1-0-5-released.md | 0 .../blog}/2014/install-google-play-on-hama.md | 0 ...th-the-help-of-factory_update_param-aml.md | 0 ...th-the-current-version-1-8-1-of-aspectj.md | 0 ...time-updates-with-spring-security-oauth.md | 0 .../content/blog}/2015/a-perfect-outline.md | 0 ...t-a-entwicklung-eines-facebook-crawlers.md | 0 ...liciy-for-loal-files-during-development.md | 0 ...with-a-spring-security-based-form-login.md | 0 ...chine-fur-veranstaltungen-und-locations.md | 0 ...f-thymeleaf-templates-in-spring-bootrun.md | 0 .../hibernate4-maven-plugin-1-1-0-released.md | 0 ...erializing-a-zoneddatetime-with-jackson.md | 0 ...ckend-with-a-nodjsgrunt-fronted-project.md | 0 ...on-method-xzy-should-have-no-parameters.md | 0 ...-from-requets-made-through-resttemplate.md | 0 ...ce-text-by-graphic-without-extra-markup.md | 0 .../serve-static-html-with-nodjs-and-grunt.md | 0 ...facebook-app-with-spring-social-part-00.md | 0 ...spring-social-part-01-behind-the-scenes.md | 0 ...-social-part-02-how-spring-social-works.md | 0 ...l-part-03-implementing-a-user-id-source.md | 0 ...-spring-social-part-04-signing-in-users.md | 0 ...ial-part-05-refactor-the-redirect-logic.md | 0 ...6-sign-in-users-through-the-canvas-page.md | 0 ...al-part-07-what-is-going-on-on-the-wire.md | 0 .../hibernate-maven-plugin-2-0-0-released.md | 0 ...using-jackson-x-and-java-s-new-time-api.md | 0 ...lems-deploying-a-spring-boot-app-as-war.md | 0 ...ntral-fails-with-error-unknown-tag-goal.md | 0 ...rt-when-running-via-mvn-spring-boot-run.md | 0 ...ke-expected-the-problem-with-whitespace.md | 0 ...race-does-not-work-with-spring-boot-2-2.md | 0 ...e-a-simulated-network-as-docker-does-it.md | 0 ...lf-signed-multi-domain-san-certificates.md | 0 ...gging-the-oauth-flow-in-spring-security.md | 0 ...ogic-for-thymeleaf-in-a-spring-boot-app.md | 0 ...on-between-kafka-and-zookeeper-with-tls.md | 0 ...a-tag-with-thymeleaf-s-markup-selection.md | 0 ...etworking-with-linux-network-namespaces.md | 0 ...irtual-networking-with-linux-veth-pairs.md | 0 ...l-networking-with-linux-virtual-bridges.md | 0 .../cat-any-file-in-any-commit-with-git.md | 0 ...wo-files-in-different-branches-with-git.md | 0 ...ing-partitioned-data-with-kafka-streams.md | 0 ...-boot-based-on-configuration-properties.md | 0 ...way-proxy-part-debugging-the-oauth-flow.md | 0 ...-the-app-behind-a-reverse-proxy-gateway.md | 0 ...ateway-proxy-running-your-app-in-docker.md | 0 ...ombining-mockserver-with-testcontainers.md | 0 ...t-with-a-short-circuit-exchangefunction.md | 0 ...esting-exception-handling-in-spring-mvc.md | 0 ...ting-spring-webflux-with-springboottest.md | 0 ...st-or-integrationtest-a-practical-guide.md | 0 ...ly-add-logging-of-object-graphs-as-json.md | 0 ...x-pattern-with-kafka-part-0-the-example.md | 0 ...tern-with-kafka-part-1-the-outbox-table.md | 0 ...a-part-sending-messages-from-the-outbox.md | 0 ...-outbox-pattern-pro-contra-alternatives.md | 0 src/pages/[slug].astro | 29 ++++++++++++++++ src/pages/blog/archive/[year].astro | 34 +++++++++++++++++++ src/pages/blog/index.astro | 32 +++++++++++++++++ 90 files changed, 129 insertions(+), 47 deletions(-) create mode 100644 .claude/settings.json delete mode 100644 content/blog/_index.html delete mode 100644 content/blog/archive/2012/_index.md delete mode 100644 content/blog/archive/2013/_index.md delete mode 100644 content/blog/archive/2014/_index.md delete mode 100644 content/blog/archive/2015/_index.md delete mode 100644 content/blog/archive/2016/_index.md delete mode 100644 content/blog/archive/2019/_index.md delete mode 100644 content/blog/archive/2020/_index.md delete mode 100644 content/blog/archive/2021/_index.md delete mode 100644 content/blog/archive/_index.html create mode 100644 src/content.config.ts rename {content/blog/archive => src/content/blog}/2012/hibernate4-maven-plugin-1-0-released.md (100%) rename {content/blog/archive => src/content/blog}/2012/hibernate4-maven-plugin-a-simple-plugin-for-generating-a-database-schema-from-hibernate-4-mapping-annotations.md (100%) rename {content/blog/archive => src/content/blog}/2012/lange-ladezeiten-durch-openx-werbebanner-verhindern.md (100%) rename {content/blog/archive => src/content/blog}/2013/bidirectional-association-with-elementcollection.md (100%) rename {content/blog/archive => src/content/blog}/2013/combining-jetty-maven-plugin-and-wro4j-maven-plugin-for-dynamic-reloading-of-less-resources.md (100%) rename {content/blog/archive => src/content/blog}/2013/hibernate4-maven-plugin-1-0-1-released.md (100%) rename {content/blog/archive => src/content/blog}/2013/hibernate4-maven-plugin-1-0-2-release.md (100%) rename {content/blog/archive => src/content/blog}/2013/hibernate4-maven-plugin-1-0-3-released.md (100%) rename {content/blog/archive => src/content/blog}/2013/log-out-from-wrong-account-with-maven-appengine-plugin.md (100%) rename {content/blog/archive => src/content/blog}/2014/aspectj-maven-plugin-can-not-compile-valid-java-7-0-code.md (100%) rename {content/blog/archive => src/content/blog}/2014/changes-in-log4j-properties-are-ignored-when-running-sl4fj-under-tomcat.md (100%) rename {content/blog/archive => src/content/blog}/2014/configure-https-for-jetty-maven-plugin-9-0-x.md (100%) rename {content/blog/archive => src/content/blog}/2014/der-benutzer-ist-nicht-dazu-berechtigt-diese-anwendung-zu-sehen.md (100%) rename {content/blog/archive => src/content/blog}/2014/disable-automatic-p-and-br-tags-in-the-wordpress-editor-and-do-it-as-early-as-you-can.md (100%) rename {content/blog/archive => src/content/blog}/2014/disable-spring-autowireing-for-junit-tests.md (100%) rename {content/blog/archive => src/content/blog}/2014/hibernate4-maven-plugin-1-0-4-released.md (100%) rename {content/blog/archive => src/content/blog}/2014/hibernate4-maven-plugin-1-0-5-released.md (100%) rename {content/blog/archive => src/content/blog}/2014/install-google-play-on-hama.md (100%) rename {content/blog/archive => src/content/blog}/2014/rooting-the-hama-00054807-internet-tv-stick-with-the-help-of-factory_update_param-aml.md (100%) rename {content/blog/archive => src/content/blog}/2014/running-aspectj-maven-plugin-with-the-current-version-1-8-1-of-aspectj.md (100%) rename {content/blog/archive => src/content/blog}/2014/subscribe-to-facebook-s-real-time-updates-with-spring-security-oauth.md (100%) rename {content/blog/archive => src/content/blog}/2015/a-perfect-outline.md (100%) rename {content/blog/archive => src/content/blog}/2015/arbeitspaket-a-entwicklung-eines-facebook-crawlers.md (100%) rename {content/blog/archive => src/content/blog}/2015/bypassing-the-same-origin-policiy-for-loal-files-during-development.md (100%) rename {content/blog/archive => src/content/blog}/2015/configure-pac4j-for-a-social-login-along-with-a-spring-security-based-form-login.md (100%) rename {content/blog/archive => src/content/blog}/2015/entwicklung-einer-crowdgestutzten-vertikalen-suchmaschine-fur-veranstaltungen-und-locations.md (100%) rename {content/blog/archive => src/content/blog}/2015/fix-hot-reload-of-thymeleaf-templates-in-spring-bootrun.md (100%) rename {content/blog/archive => src/content/blog}/2015/hibernate4-maven-plugin-1-1-0-released.md (100%) rename {content/blog/archive => src/content/blog}/2015/how-to-keep-the-time-zone-when-deserializing-a-zoneddatetime-with-jackson.md (100%) rename {content/blog/archive => src/content/blog}/2015/integrating-a-maven-backend-with-a-nodjsgrunt-fronted-project.md (100%) rename {content/blog/archive => src/content/blog}/2015/java-lang-exception-method-xzy-should-have-no-parameters.md (100%) rename {content/blog/archive => src/content/blog}/2015/logging-request-and-response-data-from-requets-made-through-resttemplate.md (100%) rename {content/blog/archive => src/content/blog}/2015/replace-text-by-graphic-without-extra-markup.md (100%) rename {content/blog/archive => src/content/blog}/2015/serve-static-html-with-nodjs-and-grunt.md (100%) rename {content/blog/archive => src/content/blog}/2016/develop-a-facebook-app-with-spring-social-part-00.md (100%) rename {content/blog/archive => src/content/blog}/2016/develop-a-facebook-app-with-spring-social-part-01-behind-the-scenes.md (100%) rename {content/blog/archive => src/content/blog}/2016/develop-a-facebook-app-with-spring-social-part-02-how-spring-social-works.md (100%) rename {content/blog/archive => src/content/blog}/2016/develop-a-facebook-app-with-spring-social-part-03-implementing-a-user-id-source.md (100%) rename {content/blog/archive => src/content/blog}/2016/develop-a-facebook-app-with-spring-social-part-04-signing-in-users.md (100%) rename {content/blog/archive => src/content/blog}/2016/develop-a-facebook-app-with-spring-social-part-05-refactor-the-redirect-logic.md (100%) rename {content/blog/archive => src/content/blog}/2016/develop-a-facebook-app-with-spring-social-part-06-sign-in-users-through-the-canvas-page.md (100%) rename {content/blog/archive => src/content/blog}/2016/develop-a-facebook-app-with-spring-social-part-07-what-is-going-on-on-the-wire.md (100%) rename {content/blog/archive => src/content/blog}/2016/hibernate-maven-plugin-2-0-0-released.md (100%) rename {content/blog/archive => src/content/blog}/2016/parsing-json-from-facebooks-graph-api-using-jackson-x-and-java-s-new-time-api.md (100%) rename {content/blog/archive => src/content/blog}/2016/problems-deploying-a-spring-boot-app-as-war.md (100%) rename {content/blog/archive => src/content/blog}/2016/release-of-a-maven-plugin-to-maven-central-fails-with-error-unknown-tag-goal.md (100%) rename {content/blog/archive => src/content/blog}/2016/show-spring-boot-auto-configuration-report-when-running-via-mvn-spring-boot-run.md (100%) rename {content/blog/archive => src/content/blog}/2016/xpath-2-0-deep-equal-does-not-match-like-expected-the-problem-with-whitespace.md (100%) rename {content/blog/archive => src/content/blog}/2019/actuator-httptrace-does-not-work-with-spring-boot-2-2.md (100%) rename {content/blog/archive => src/content/blog}/2019/create-a-simulated-network-as-docker-does-it.md (100%) rename {content/blog/archive => src/content/blog}/2019/create-self-signed-multi-domain-san-certificates.md (100%) rename {content/blog/archive => src/content/blog}/2019/debugging-the-oauth-flow-in-spring-security.md (100%) rename {content/blog/archive => src/content/blog}/2019/enabling-decoupled-template-logic-for-thymeleaf-in-a-spring-boot-app.md (100%) rename {content/blog/archive => src/content/blog}/2019/encrypt-communication-between-kafka-and-zookeeper-with-tls.md (100%) rename {content/blog/archive => src/content/blog}/2019/select-text-content-of-a-tag-with-thymeleaf-s-markup-selection.md (100%) rename {content/blog/archive => src/content/blog}/2019/virtual-networking-with-linux-network-namespaces.md (100%) rename {content/blog/archive => src/content/blog}/2019/virtual-networking-with-linux-veth-pairs.md (100%) rename {content/blog/archive => src/content/blog}/2019/virtual-networking-with-linux-virtual-bridges.md (100%) rename {content/blog/archive => src/content/blog}/2020/cat-any-file-in-any-commit-with-git.md (100%) rename {content/blog/archive => src/content/blog}/2020/compare-two-files-in-different-branches-with-git.md (100%) rename {content/blog/archive => src/content/blog}/2020/deduplicating-partitioned-data-with-kafka-streams.md (100%) rename {content/blog/archive => src/content/blog}/2020/how-to-instantiatiate-multiple-beans-dinamically-in-spring-boot-based-on-configuration-properties.md (100%) rename {content/blog/archive => src/content/blog}/2020/how-to-redirect-to-spring-security-oauth-behind-a-gateway-proxy-part-debugging-the-oauth-flow.md (100%) rename {content/blog/archive => src/content/blog}/2020/how-to-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-hiding-the-app-behind-a-reverse-proxy-gateway.md (100%) rename {content/blog/archive => src/content/blog}/2020/howto-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-running-your-app-in-docker.md (100%) rename {content/blog/archive => src/content/blog}/2020/implementing-narrow-integrationtests-by-combining-mockserver-with-testcontainers.md (100%) rename {content/blog/archive => src/content/blog}/2020/in-need-of-a-mockwebclient-mock-webclient-with-a-short-circuit-exchangefunction.md (100%) rename {content/blog/archive => src/content/blog}/2020/testing-exception-handling-in-spring-mvc.md (100%) rename {content/blog/archive => src/content/blog}/2020/testing-spring-webflux-with-springboottest.md (100%) rename {content/blog/archive => src/content/blog}/2020/unittest-or-integrationtest-a-practical-guide.md (100%) rename {content/blog/archive => src/content/blog}/2020/using-jackson-without-annotations-to-quickly-add-logging-of-object-graphs-as-json.md (100%) rename {content/blog/archive => src/content/blog}/2021/implementing-the-outbox-pattern-with-kafka-part-0-the-example.md (100%) rename {content/blog/archive => src/content/blog}/2021/implementing-the-outbox-pattern-with-kafka-part-1-the-outbox-table.md (100%) rename {content/blog/archive => src/content/blog}/2021/implementing-the-outbox-pattern-with-kafka-part-sending-messages-from-the-outbox.md (100%) rename {content/blog/archive => src/content/blog}/2021/the-outbox-pattern-pro-contra-alternatives.md (100%) create mode 100644 src/pages/[slug].astro create mode 100644 src/pages/blog/archive/[year].astro create mode 100644 src/pages/blog/index.astro diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 00000000..57360350 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,11 @@ +{ + "permissions": { + "allow": [ + "Bash(git add *)", + "Bash(git commit *)", + "Bash(git checkout *)", + "Bash(git reset *)", + "Bash(mkdir *)" + ] + } +} diff --git a/content/blog/_index.html b/content/blog/_index.html deleted file mode 100644 index c7a65349..00000000 --- a/content/blog/_index.html +++ /dev/null @@ -1,4 +0,0 @@ ---- -title: "Blog" -weight: 10 ---- diff --git a/content/blog/archive/2012/_index.md b/content/blog/archive/2012/_index.md deleted file mode 100644 index 75748a63..00000000 --- a/content/blog/archive/2012/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Archiv - 2012 -linkTitle: 2012 -layout: year ---- diff --git a/content/blog/archive/2013/_index.md b/content/blog/archive/2013/_index.md deleted file mode 100644 index a3a29e67..00000000 --- a/content/blog/archive/2013/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Archiv - 2013 -linkTitle: 2013 -layout: year ---- diff --git a/content/blog/archive/2014/_index.md b/content/blog/archive/2014/_index.md deleted file mode 100644 index 872d36f6..00000000 --- a/content/blog/archive/2014/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Archiv - 2014 -linkTitle: 2014 -layout: year ---- diff --git a/content/blog/archive/2015/_index.md b/content/blog/archive/2015/_index.md deleted file mode 100644 index 86a6d4aa..00000000 --- a/content/blog/archive/2015/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Archiv - 2015 -linkTitle: 2015 -layout: year ---- diff --git a/content/blog/archive/2016/_index.md b/content/blog/archive/2016/_index.md deleted file mode 100644 index d5464a42..00000000 --- a/content/blog/archive/2016/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Archiv - 2016 -linkTitle: 2016 -layout: year ---- diff --git a/content/blog/archive/2019/_index.md b/content/blog/archive/2019/_index.md deleted file mode 100644 index 39db3780..00000000 --- a/content/blog/archive/2019/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Archiv - 2019 -linkTitle: 2019 -layout: year ---- diff --git a/content/blog/archive/2020/_index.md b/content/blog/archive/2020/_index.md deleted file mode 100644 index 22c0e2c4..00000000 --- a/content/blog/archive/2020/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Archiv - 2020 -linkTitle: 2020 -layout: year ---- diff --git a/content/blog/archive/2021/_index.md b/content/blog/archive/2021/_index.md deleted file mode 100644 index 579088c9..00000000 --- a/content/blog/archive/2021/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Archiv - 2021 -linkTitle: 2021 -layout: year ---- diff --git a/content/blog/archive/_index.html b/content/blog/archive/_index.html deleted file mode 100644 index 10db07b5..00000000 --- a/content/blog/archive/_index.html +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: "Archive" ---- diff --git a/src/content.config.ts b/src/content.config.ts new file mode 100644 index 00000000..8f780751 --- /dev/null +++ b/src/content.config.ts @@ -0,0 +1,23 @@ +import { defineCollection, z } from 'astro:content'; +import { glob } from 'astro/loaders'; + +const blog = defineCollection({ + loader: glob({ pattern: '**/*.md', base: './src/content/blog' }), + schema: z.object({ + title: z.string(), + date: z.coerce.date(), + url: z.string().optional(), + categories: z.preprocess(v => v ?? [], z.array(z.string())), + tags: z.preprocess(v => v ?? [], z.array(z.string())), + draft: z.union([z.boolean(), z.string()]).optional().transform(v => + v === true || v === 'true' + ), + // Legacy WordPress fields — kept but ignored + post_id: z.string().optional(), + guid: z.string().optional(), + _edit_last: z.string().optional(), + parent_post_id: z.null().optional(), + }), +}); + +export const collections = { blog }; diff --git a/content/blog/archive/2012/hibernate4-maven-plugin-1-0-released.md b/src/content/blog/2012/hibernate4-maven-plugin-1-0-released.md similarity index 100% rename from content/blog/archive/2012/hibernate4-maven-plugin-1-0-released.md rename to src/content/blog/2012/hibernate4-maven-plugin-1-0-released.md diff --git a/content/blog/archive/2012/hibernate4-maven-plugin-a-simple-plugin-for-generating-a-database-schema-from-hibernate-4-mapping-annotations.md b/src/content/blog/2012/hibernate4-maven-plugin-a-simple-plugin-for-generating-a-database-schema-from-hibernate-4-mapping-annotations.md similarity index 100% rename from content/blog/archive/2012/hibernate4-maven-plugin-a-simple-plugin-for-generating-a-database-schema-from-hibernate-4-mapping-annotations.md rename to src/content/blog/2012/hibernate4-maven-plugin-a-simple-plugin-for-generating-a-database-schema-from-hibernate-4-mapping-annotations.md diff --git a/content/blog/archive/2012/lange-ladezeiten-durch-openx-werbebanner-verhindern.md b/src/content/blog/2012/lange-ladezeiten-durch-openx-werbebanner-verhindern.md similarity index 100% rename from content/blog/archive/2012/lange-ladezeiten-durch-openx-werbebanner-verhindern.md rename to src/content/blog/2012/lange-ladezeiten-durch-openx-werbebanner-verhindern.md diff --git a/content/blog/archive/2013/bidirectional-association-with-elementcollection.md b/src/content/blog/2013/bidirectional-association-with-elementcollection.md similarity index 100% rename from content/blog/archive/2013/bidirectional-association-with-elementcollection.md rename to src/content/blog/2013/bidirectional-association-with-elementcollection.md diff --git a/content/blog/archive/2013/combining-jetty-maven-plugin-and-wro4j-maven-plugin-for-dynamic-reloading-of-less-resources.md b/src/content/blog/2013/combining-jetty-maven-plugin-and-wro4j-maven-plugin-for-dynamic-reloading-of-less-resources.md similarity index 100% rename from content/blog/archive/2013/combining-jetty-maven-plugin-and-wro4j-maven-plugin-for-dynamic-reloading-of-less-resources.md rename to src/content/blog/2013/combining-jetty-maven-plugin-and-wro4j-maven-plugin-for-dynamic-reloading-of-less-resources.md diff --git a/content/blog/archive/2013/hibernate4-maven-plugin-1-0-1-released.md b/src/content/blog/2013/hibernate4-maven-plugin-1-0-1-released.md similarity index 100% rename from content/blog/archive/2013/hibernate4-maven-plugin-1-0-1-released.md rename to src/content/blog/2013/hibernate4-maven-plugin-1-0-1-released.md diff --git a/content/blog/archive/2013/hibernate4-maven-plugin-1-0-2-release.md b/src/content/blog/2013/hibernate4-maven-plugin-1-0-2-release.md similarity index 100% rename from content/blog/archive/2013/hibernate4-maven-plugin-1-0-2-release.md rename to src/content/blog/2013/hibernate4-maven-plugin-1-0-2-release.md diff --git a/content/blog/archive/2013/hibernate4-maven-plugin-1-0-3-released.md b/src/content/blog/2013/hibernate4-maven-plugin-1-0-3-released.md similarity index 100% rename from content/blog/archive/2013/hibernate4-maven-plugin-1-0-3-released.md rename to src/content/blog/2013/hibernate4-maven-plugin-1-0-3-released.md diff --git a/content/blog/archive/2013/log-out-from-wrong-account-with-maven-appengine-plugin.md b/src/content/blog/2013/log-out-from-wrong-account-with-maven-appengine-plugin.md similarity index 100% rename from content/blog/archive/2013/log-out-from-wrong-account-with-maven-appengine-plugin.md rename to src/content/blog/2013/log-out-from-wrong-account-with-maven-appengine-plugin.md diff --git a/content/blog/archive/2014/aspectj-maven-plugin-can-not-compile-valid-java-7-0-code.md b/src/content/blog/2014/aspectj-maven-plugin-can-not-compile-valid-java-7-0-code.md similarity index 100% rename from content/blog/archive/2014/aspectj-maven-plugin-can-not-compile-valid-java-7-0-code.md rename to src/content/blog/2014/aspectj-maven-plugin-can-not-compile-valid-java-7-0-code.md diff --git a/content/blog/archive/2014/changes-in-log4j-properties-are-ignored-when-running-sl4fj-under-tomcat.md b/src/content/blog/2014/changes-in-log4j-properties-are-ignored-when-running-sl4fj-under-tomcat.md similarity index 100% rename from content/blog/archive/2014/changes-in-log4j-properties-are-ignored-when-running-sl4fj-under-tomcat.md rename to src/content/blog/2014/changes-in-log4j-properties-are-ignored-when-running-sl4fj-under-tomcat.md diff --git a/content/blog/archive/2014/configure-https-for-jetty-maven-plugin-9-0-x.md b/src/content/blog/2014/configure-https-for-jetty-maven-plugin-9-0-x.md similarity index 100% rename from content/blog/archive/2014/configure-https-for-jetty-maven-plugin-9-0-x.md rename to src/content/blog/2014/configure-https-for-jetty-maven-plugin-9-0-x.md diff --git a/content/blog/archive/2014/der-benutzer-ist-nicht-dazu-berechtigt-diese-anwendung-zu-sehen.md b/src/content/blog/2014/der-benutzer-ist-nicht-dazu-berechtigt-diese-anwendung-zu-sehen.md similarity index 100% rename from content/blog/archive/2014/der-benutzer-ist-nicht-dazu-berechtigt-diese-anwendung-zu-sehen.md rename to src/content/blog/2014/der-benutzer-ist-nicht-dazu-berechtigt-diese-anwendung-zu-sehen.md diff --git a/content/blog/archive/2014/disable-automatic-p-and-br-tags-in-the-wordpress-editor-and-do-it-as-early-as-you-can.md b/src/content/blog/2014/disable-automatic-p-and-br-tags-in-the-wordpress-editor-and-do-it-as-early-as-you-can.md similarity index 100% rename from content/blog/archive/2014/disable-automatic-p-and-br-tags-in-the-wordpress-editor-and-do-it-as-early-as-you-can.md rename to src/content/blog/2014/disable-automatic-p-and-br-tags-in-the-wordpress-editor-and-do-it-as-early-as-you-can.md diff --git a/content/blog/archive/2014/disable-spring-autowireing-for-junit-tests.md b/src/content/blog/2014/disable-spring-autowireing-for-junit-tests.md similarity index 100% rename from content/blog/archive/2014/disable-spring-autowireing-for-junit-tests.md rename to src/content/blog/2014/disable-spring-autowireing-for-junit-tests.md diff --git a/content/blog/archive/2014/hibernate4-maven-plugin-1-0-4-released.md b/src/content/blog/2014/hibernate4-maven-plugin-1-0-4-released.md similarity index 100% rename from content/blog/archive/2014/hibernate4-maven-plugin-1-0-4-released.md rename to src/content/blog/2014/hibernate4-maven-plugin-1-0-4-released.md diff --git a/content/blog/archive/2014/hibernate4-maven-plugin-1-0-5-released.md b/src/content/blog/2014/hibernate4-maven-plugin-1-0-5-released.md similarity index 100% rename from content/blog/archive/2014/hibernate4-maven-plugin-1-0-5-released.md rename to src/content/blog/2014/hibernate4-maven-plugin-1-0-5-released.md diff --git a/content/blog/archive/2014/install-google-play-on-hama.md b/src/content/blog/2014/install-google-play-on-hama.md similarity index 100% rename from content/blog/archive/2014/install-google-play-on-hama.md rename to src/content/blog/2014/install-google-play-on-hama.md diff --git a/content/blog/archive/2014/rooting-the-hama-00054807-internet-tv-stick-with-the-help-of-factory_update_param-aml.md b/src/content/blog/2014/rooting-the-hama-00054807-internet-tv-stick-with-the-help-of-factory_update_param-aml.md similarity index 100% rename from content/blog/archive/2014/rooting-the-hama-00054807-internet-tv-stick-with-the-help-of-factory_update_param-aml.md rename to src/content/blog/2014/rooting-the-hama-00054807-internet-tv-stick-with-the-help-of-factory_update_param-aml.md diff --git a/content/blog/archive/2014/running-aspectj-maven-plugin-with-the-current-version-1-8-1-of-aspectj.md b/src/content/blog/2014/running-aspectj-maven-plugin-with-the-current-version-1-8-1-of-aspectj.md similarity index 100% rename from content/blog/archive/2014/running-aspectj-maven-plugin-with-the-current-version-1-8-1-of-aspectj.md rename to src/content/blog/2014/running-aspectj-maven-plugin-with-the-current-version-1-8-1-of-aspectj.md diff --git a/content/blog/archive/2014/subscribe-to-facebook-s-real-time-updates-with-spring-security-oauth.md b/src/content/blog/2014/subscribe-to-facebook-s-real-time-updates-with-spring-security-oauth.md similarity index 100% rename from content/blog/archive/2014/subscribe-to-facebook-s-real-time-updates-with-spring-security-oauth.md rename to src/content/blog/2014/subscribe-to-facebook-s-real-time-updates-with-spring-security-oauth.md diff --git a/content/blog/archive/2015/a-perfect-outline.md b/src/content/blog/2015/a-perfect-outline.md similarity index 100% rename from content/blog/archive/2015/a-perfect-outline.md rename to src/content/blog/2015/a-perfect-outline.md diff --git a/content/blog/archive/2015/arbeitspaket-a-entwicklung-eines-facebook-crawlers.md b/src/content/blog/2015/arbeitspaket-a-entwicklung-eines-facebook-crawlers.md similarity index 100% rename from content/blog/archive/2015/arbeitspaket-a-entwicklung-eines-facebook-crawlers.md rename to src/content/blog/2015/arbeitspaket-a-entwicklung-eines-facebook-crawlers.md diff --git a/content/blog/archive/2015/bypassing-the-same-origin-policiy-for-loal-files-during-development.md b/src/content/blog/2015/bypassing-the-same-origin-policiy-for-loal-files-during-development.md similarity index 100% rename from content/blog/archive/2015/bypassing-the-same-origin-policiy-for-loal-files-during-development.md rename to src/content/blog/2015/bypassing-the-same-origin-policiy-for-loal-files-during-development.md diff --git a/content/blog/archive/2015/configure-pac4j-for-a-social-login-along-with-a-spring-security-based-form-login.md b/src/content/blog/2015/configure-pac4j-for-a-social-login-along-with-a-spring-security-based-form-login.md similarity index 100% rename from content/blog/archive/2015/configure-pac4j-for-a-social-login-along-with-a-spring-security-based-form-login.md rename to src/content/blog/2015/configure-pac4j-for-a-social-login-along-with-a-spring-security-based-form-login.md diff --git a/content/blog/archive/2015/entwicklung-einer-crowdgestutzten-vertikalen-suchmaschine-fur-veranstaltungen-und-locations.md b/src/content/blog/2015/entwicklung-einer-crowdgestutzten-vertikalen-suchmaschine-fur-veranstaltungen-und-locations.md similarity index 100% rename from content/blog/archive/2015/entwicklung-einer-crowdgestutzten-vertikalen-suchmaschine-fur-veranstaltungen-und-locations.md rename to src/content/blog/2015/entwicklung-einer-crowdgestutzten-vertikalen-suchmaschine-fur-veranstaltungen-und-locations.md diff --git a/content/blog/archive/2015/fix-hot-reload-of-thymeleaf-templates-in-spring-bootrun.md b/src/content/blog/2015/fix-hot-reload-of-thymeleaf-templates-in-spring-bootrun.md similarity index 100% rename from content/blog/archive/2015/fix-hot-reload-of-thymeleaf-templates-in-spring-bootrun.md rename to src/content/blog/2015/fix-hot-reload-of-thymeleaf-templates-in-spring-bootrun.md diff --git a/content/blog/archive/2015/hibernate4-maven-plugin-1-1-0-released.md b/src/content/blog/2015/hibernate4-maven-plugin-1-1-0-released.md similarity index 100% rename from content/blog/archive/2015/hibernate4-maven-plugin-1-1-0-released.md rename to src/content/blog/2015/hibernate4-maven-plugin-1-1-0-released.md diff --git a/content/blog/archive/2015/how-to-keep-the-time-zone-when-deserializing-a-zoneddatetime-with-jackson.md b/src/content/blog/2015/how-to-keep-the-time-zone-when-deserializing-a-zoneddatetime-with-jackson.md similarity index 100% rename from content/blog/archive/2015/how-to-keep-the-time-zone-when-deserializing-a-zoneddatetime-with-jackson.md rename to src/content/blog/2015/how-to-keep-the-time-zone-when-deserializing-a-zoneddatetime-with-jackson.md diff --git a/content/blog/archive/2015/integrating-a-maven-backend-with-a-nodjsgrunt-fronted-project.md b/src/content/blog/2015/integrating-a-maven-backend-with-a-nodjsgrunt-fronted-project.md similarity index 100% rename from content/blog/archive/2015/integrating-a-maven-backend-with-a-nodjsgrunt-fronted-project.md rename to src/content/blog/2015/integrating-a-maven-backend-with-a-nodjsgrunt-fronted-project.md diff --git a/content/blog/archive/2015/java-lang-exception-method-xzy-should-have-no-parameters.md b/src/content/blog/2015/java-lang-exception-method-xzy-should-have-no-parameters.md similarity index 100% rename from content/blog/archive/2015/java-lang-exception-method-xzy-should-have-no-parameters.md rename to src/content/blog/2015/java-lang-exception-method-xzy-should-have-no-parameters.md diff --git a/content/blog/archive/2015/logging-request-and-response-data-from-requets-made-through-resttemplate.md b/src/content/blog/2015/logging-request-and-response-data-from-requets-made-through-resttemplate.md similarity index 100% rename from content/blog/archive/2015/logging-request-and-response-data-from-requets-made-through-resttemplate.md rename to src/content/blog/2015/logging-request-and-response-data-from-requets-made-through-resttemplate.md diff --git a/content/blog/archive/2015/replace-text-by-graphic-without-extra-markup.md b/src/content/blog/2015/replace-text-by-graphic-without-extra-markup.md similarity index 100% rename from content/blog/archive/2015/replace-text-by-graphic-without-extra-markup.md rename to src/content/blog/2015/replace-text-by-graphic-without-extra-markup.md diff --git a/content/blog/archive/2015/serve-static-html-with-nodjs-and-grunt.md b/src/content/blog/2015/serve-static-html-with-nodjs-and-grunt.md similarity index 100% rename from content/blog/archive/2015/serve-static-html-with-nodjs-and-grunt.md rename to src/content/blog/2015/serve-static-html-with-nodjs-and-grunt.md diff --git a/content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-00.md b/src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-00.md similarity index 100% rename from content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-00.md rename to src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-00.md diff --git a/content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-01-behind-the-scenes.md b/src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-01-behind-the-scenes.md similarity index 100% rename from content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-01-behind-the-scenes.md rename to src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-01-behind-the-scenes.md diff --git a/content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-02-how-spring-social-works.md b/src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-02-how-spring-social-works.md similarity index 100% rename from content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-02-how-spring-social-works.md rename to src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-02-how-spring-social-works.md diff --git a/content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-03-implementing-a-user-id-source.md b/src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-03-implementing-a-user-id-source.md similarity index 100% rename from content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-03-implementing-a-user-id-source.md rename to src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-03-implementing-a-user-id-source.md diff --git a/content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-04-signing-in-users.md b/src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-04-signing-in-users.md similarity index 100% rename from content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-04-signing-in-users.md rename to src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-04-signing-in-users.md diff --git a/content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-05-refactor-the-redirect-logic.md b/src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-05-refactor-the-redirect-logic.md similarity index 100% rename from content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-05-refactor-the-redirect-logic.md rename to src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-05-refactor-the-redirect-logic.md diff --git a/content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-06-sign-in-users-through-the-canvas-page.md b/src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-06-sign-in-users-through-the-canvas-page.md similarity index 100% rename from content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-06-sign-in-users-through-the-canvas-page.md rename to src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-06-sign-in-users-through-the-canvas-page.md diff --git a/content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-07-what-is-going-on-on-the-wire.md b/src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-07-what-is-going-on-on-the-wire.md similarity index 100% rename from content/blog/archive/2016/develop-a-facebook-app-with-spring-social-part-07-what-is-going-on-on-the-wire.md rename to src/content/blog/2016/develop-a-facebook-app-with-spring-social-part-07-what-is-going-on-on-the-wire.md diff --git a/content/blog/archive/2016/hibernate-maven-plugin-2-0-0-released.md b/src/content/blog/2016/hibernate-maven-plugin-2-0-0-released.md similarity index 100% rename from content/blog/archive/2016/hibernate-maven-plugin-2-0-0-released.md rename to src/content/blog/2016/hibernate-maven-plugin-2-0-0-released.md diff --git a/content/blog/archive/2016/parsing-json-from-facebooks-graph-api-using-jackson-x-and-java-s-new-time-api.md b/src/content/blog/2016/parsing-json-from-facebooks-graph-api-using-jackson-x-and-java-s-new-time-api.md similarity index 100% rename from content/blog/archive/2016/parsing-json-from-facebooks-graph-api-using-jackson-x-and-java-s-new-time-api.md rename to src/content/blog/2016/parsing-json-from-facebooks-graph-api-using-jackson-x-and-java-s-new-time-api.md diff --git a/content/blog/archive/2016/problems-deploying-a-spring-boot-app-as-war.md b/src/content/blog/2016/problems-deploying-a-spring-boot-app-as-war.md similarity index 100% rename from content/blog/archive/2016/problems-deploying-a-spring-boot-app-as-war.md rename to src/content/blog/2016/problems-deploying-a-spring-boot-app-as-war.md diff --git a/content/blog/archive/2016/release-of-a-maven-plugin-to-maven-central-fails-with-error-unknown-tag-goal.md b/src/content/blog/2016/release-of-a-maven-plugin-to-maven-central-fails-with-error-unknown-tag-goal.md similarity index 100% rename from content/blog/archive/2016/release-of-a-maven-plugin-to-maven-central-fails-with-error-unknown-tag-goal.md rename to src/content/blog/2016/release-of-a-maven-plugin-to-maven-central-fails-with-error-unknown-tag-goal.md diff --git a/content/blog/archive/2016/show-spring-boot-auto-configuration-report-when-running-via-mvn-spring-boot-run.md b/src/content/blog/2016/show-spring-boot-auto-configuration-report-when-running-via-mvn-spring-boot-run.md similarity index 100% rename from content/blog/archive/2016/show-spring-boot-auto-configuration-report-when-running-via-mvn-spring-boot-run.md rename to src/content/blog/2016/show-spring-boot-auto-configuration-report-when-running-via-mvn-spring-boot-run.md diff --git a/content/blog/archive/2016/xpath-2-0-deep-equal-does-not-match-like-expected-the-problem-with-whitespace.md b/src/content/blog/2016/xpath-2-0-deep-equal-does-not-match-like-expected-the-problem-with-whitespace.md similarity index 100% rename from content/blog/archive/2016/xpath-2-0-deep-equal-does-not-match-like-expected-the-problem-with-whitespace.md rename to src/content/blog/2016/xpath-2-0-deep-equal-does-not-match-like-expected-the-problem-with-whitespace.md diff --git a/content/blog/archive/2019/actuator-httptrace-does-not-work-with-spring-boot-2-2.md b/src/content/blog/2019/actuator-httptrace-does-not-work-with-spring-boot-2-2.md similarity index 100% rename from content/blog/archive/2019/actuator-httptrace-does-not-work-with-spring-boot-2-2.md rename to src/content/blog/2019/actuator-httptrace-does-not-work-with-spring-boot-2-2.md diff --git a/content/blog/archive/2019/create-a-simulated-network-as-docker-does-it.md b/src/content/blog/2019/create-a-simulated-network-as-docker-does-it.md similarity index 100% rename from content/blog/archive/2019/create-a-simulated-network-as-docker-does-it.md rename to src/content/blog/2019/create-a-simulated-network-as-docker-does-it.md diff --git a/content/blog/archive/2019/create-self-signed-multi-domain-san-certificates.md b/src/content/blog/2019/create-self-signed-multi-domain-san-certificates.md similarity index 100% rename from content/blog/archive/2019/create-self-signed-multi-domain-san-certificates.md rename to src/content/blog/2019/create-self-signed-multi-domain-san-certificates.md diff --git a/content/blog/archive/2019/debugging-the-oauth-flow-in-spring-security.md b/src/content/blog/2019/debugging-the-oauth-flow-in-spring-security.md similarity index 100% rename from content/blog/archive/2019/debugging-the-oauth-flow-in-spring-security.md rename to src/content/blog/2019/debugging-the-oauth-flow-in-spring-security.md diff --git a/content/blog/archive/2019/enabling-decoupled-template-logic-for-thymeleaf-in-a-spring-boot-app.md b/src/content/blog/2019/enabling-decoupled-template-logic-for-thymeleaf-in-a-spring-boot-app.md similarity index 100% rename from content/blog/archive/2019/enabling-decoupled-template-logic-for-thymeleaf-in-a-spring-boot-app.md rename to src/content/blog/2019/enabling-decoupled-template-logic-for-thymeleaf-in-a-spring-boot-app.md diff --git a/content/blog/archive/2019/encrypt-communication-between-kafka-and-zookeeper-with-tls.md b/src/content/blog/2019/encrypt-communication-between-kafka-and-zookeeper-with-tls.md similarity index 100% rename from content/blog/archive/2019/encrypt-communication-between-kafka-and-zookeeper-with-tls.md rename to src/content/blog/2019/encrypt-communication-between-kafka-and-zookeeper-with-tls.md diff --git a/content/blog/archive/2019/select-text-content-of-a-tag-with-thymeleaf-s-markup-selection.md b/src/content/blog/2019/select-text-content-of-a-tag-with-thymeleaf-s-markup-selection.md similarity index 100% rename from content/blog/archive/2019/select-text-content-of-a-tag-with-thymeleaf-s-markup-selection.md rename to src/content/blog/2019/select-text-content-of-a-tag-with-thymeleaf-s-markup-selection.md diff --git a/content/blog/archive/2019/virtual-networking-with-linux-network-namespaces.md b/src/content/blog/2019/virtual-networking-with-linux-network-namespaces.md similarity index 100% rename from content/blog/archive/2019/virtual-networking-with-linux-network-namespaces.md rename to src/content/blog/2019/virtual-networking-with-linux-network-namespaces.md diff --git a/content/blog/archive/2019/virtual-networking-with-linux-veth-pairs.md b/src/content/blog/2019/virtual-networking-with-linux-veth-pairs.md similarity index 100% rename from content/blog/archive/2019/virtual-networking-with-linux-veth-pairs.md rename to src/content/blog/2019/virtual-networking-with-linux-veth-pairs.md diff --git a/content/blog/archive/2019/virtual-networking-with-linux-virtual-bridges.md b/src/content/blog/2019/virtual-networking-with-linux-virtual-bridges.md similarity index 100% rename from content/blog/archive/2019/virtual-networking-with-linux-virtual-bridges.md rename to src/content/blog/2019/virtual-networking-with-linux-virtual-bridges.md diff --git a/content/blog/archive/2020/cat-any-file-in-any-commit-with-git.md b/src/content/blog/2020/cat-any-file-in-any-commit-with-git.md similarity index 100% rename from content/blog/archive/2020/cat-any-file-in-any-commit-with-git.md rename to src/content/blog/2020/cat-any-file-in-any-commit-with-git.md diff --git a/content/blog/archive/2020/compare-two-files-in-different-branches-with-git.md b/src/content/blog/2020/compare-two-files-in-different-branches-with-git.md similarity index 100% rename from content/blog/archive/2020/compare-two-files-in-different-branches-with-git.md rename to src/content/blog/2020/compare-two-files-in-different-branches-with-git.md diff --git a/content/blog/archive/2020/deduplicating-partitioned-data-with-kafka-streams.md b/src/content/blog/2020/deduplicating-partitioned-data-with-kafka-streams.md similarity index 100% rename from content/blog/archive/2020/deduplicating-partitioned-data-with-kafka-streams.md rename to src/content/blog/2020/deduplicating-partitioned-data-with-kafka-streams.md diff --git a/content/blog/archive/2020/how-to-instantiatiate-multiple-beans-dinamically-in-spring-boot-based-on-configuration-properties.md b/src/content/blog/2020/how-to-instantiatiate-multiple-beans-dinamically-in-spring-boot-based-on-configuration-properties.md similarity index 100% rename from content/blog/archive/2020/how-to-instantiatiate-multiple-beans-dinamically-in-spring-boot-based-on-configuration-properties.md rename to src/content/blog/2020/how-to-instantiatiate-multiple-beans-dinamically-in-spring-boot-based-on-configuration-properties.md diff --git a/content/blog/archive/2020/how-to-redirect-to-spring-security-oauth-behind-a-gateway-proxy-part-debugging-the-oauth-flow.md b/src/content/blog/2020/how-to-redirect-to-spring-security-oauth-behind-a-gateway-proxy-part-debugging-the-oauth-flow.md similarity index 100% rename from content/blog/archive/2020/how-to-redirect-to-spring-security-oauth-behind-a-gateway-proxy-part-debugging-the-oauth-flow.md rename to src/content/blog/2020/how-to-redirect-to-spring-security-oauth-behind-a-gateway-proxy-part-debugging-the-oauth-flow.md diff --git a/content/blog/archive/2020/how-to-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-hiding-the-app-behind-a-reverse-proxy-gateway.md b/src/content/blog/2020/how-to-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-hiding-the-app-behind-a-reverse-proxy-gateway.md similarity index 100% rename from content/blog/archive/2020/how-to-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-hiding-the-app-behind-a-reverse-proxy-gateway.md rename to src/content/blog/2020/how-to-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-hiding-the-app-behind-a-reverse-proxy-gateway.md diff --git a/content/blog/archive/2020/howto-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-running-your-app-in-docker.md b/src/content/blog/2020/howto-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-running-your-app-in-docker.md similarity index 100% rename from content/blog/archive/2020/howto-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-running-your-app-in-docker.md rename to src/content/blog/2020/howto-redirect-to-spring-security-oauth2-behind-a-gateway-proxy-running-your-app-in-docker.md diff --git a/content/blog/archive/2020/implementing-narrow-integrationtests-by-combining-mockserver-with-testcontainers.md b/src/content/blog/2020/implementing-narrow-integrationtests-by-combining-mockserver-with-testcontainers.md similarity index 100% rename from content/blog/archive/2020/implementing-narrow-integrationtests-by-combining-mockserver-with-testcontainers.md rename to src/content/blog/2020/implementing-narrow-integrationtests-by-combining-mockserver-with-testcontainers.md diff --git a/content/blog/archive/2020/in-need-of-a-mockwebclient-mock-webclient-with-a-short-circuit-exchangefunction.md b/src/content/blog/2020/in-need-of-a-mockwebclient-mock-webclient-with-a-short-circuit-exchangefunction.md similarity index 100% rename from content/blog/archive/2020/in-need-of-a-mockwebclient-mock-webclient-with-a-short-circuit-exchangefunction.md rename to src/content/blog/2020/in-need-of-a-mockwebclient-mock-webclient-with-a-short-circuit-exchangefunction.md diff --git a/content/blog/archive/2020/testing-exception-handling-in-spring-mvc.md b/src/content/blog/2020/testing-exception-handling-in-spring-mvc.md similarity index 100% rename from content/blog/archive/2020/testing-exception-handling-in-spring-mvc.md rename to src/content/blog/2020/testing-exception-handling-in-spring-mvc.md diff --git a/content/blog/archive/2020/testing-spring-webflux-with-springboottest.md b/src/content/blog/2020/testing-spring-webflux-with-springboottest.md similarity index 100% rename from content/blog/archive/2020/testing-spring-webflux-with-springboottest.md rename to src/content/blog/2020/testing-spring-webflux-with-springboottest.md diff --git a/content/blog/archive/2020/unittest-or-integrationtest-a-practical-guide.md b/src/content/blog/2020/unittest-or-integrationtest-a-practical-guide.md similarity index 100% rename from content/blog/archive/2020/unittest-or-integrationtest-a-practical-guide.md rename to src/content/blog/2020/unittest-or-integrationtest-a-practical-guide.md diff --git a/content/blog/archive/2020/using-jackson-without-annotations-to-quickly-add-logging-of-object-graphs-as-json.md b/src/content/blog/2020/using-jackson-without-annotations-to-quickly-add-logging-of-object-graphs-as-json.md similarity index 100% rename from content/blog/archive/2020/using-jackson-without-annotations-to-quickly-add-logging-of-object-graphs-as-json.md rename to src/content/blog/2020/using-jackson-without-annotations-to-quickly-add-logging-of-object-graphs-as-json.md diff --git a/content/blog/archive/2021/implementing-the-outbox-pattern-with-kafka-part-0-the-example.md b/src/content/blog/2021/implementing-the-outbox-pattern-with-kafka-part-0-the-example.md similarity index 100% rename from content/blog/archive/2021/implementing-the-outbox-pattern-with-kafka-part-0-the-example.md rename to src/content/blog/2021/implementing-the-outbox-pattern-with-kafka-part-0-the-example.md diff --git a/content/blog/archive/2021/implementing-the-outbox-pattern-with-kafka-part-1-the-outbox-table.md b/src/content/blog/2021/implementing-the-outbox-pattern-with-kafka-part-1-the-outbox-table.md similarity index 100% rename from content/blog/archive/2021/implementing-the-outbox-pattern-with-kafka-part-1-the-outbox-table.md rename to src/content/blog/2021/implementing-the-outbox-pattern-with-kafka-part-1-the-outbox-table.md diff --git a/content/blog/archive/2021/implementing-the-outbox-pattern-with-kafka-part-sending-messages-from-the-outbox.md b/src/content/blog/2021/implementing-the-outbox-pattern-with-kafka-part-sending-messages-from-the-outbox.md similarity index 100% rename from content/blog/archive/2021/implementing-the-outbox-pattern-with-kafka-part-sending-messages-from-the-outbox.md rename to src/content/blog/2021/implementing-the-outbox-pattern-with-kafka-part-sending-messages-from-the-outbox.md diff --git a/content/blog/archive/2021/the-outbox-pattern-pro-contra-alternatives.md b/src/content/blog/2021/the-outbox-pattern-pro-contra-alternatives.md similarity index 100% rename from content/blog/archive/2021/the-outbox-pattern-pro-contra-alternatives.md rename to src/content/blog/2021/the-outbox-pattern-pro-contra-alternatives.md diff --git a/src/pages/[slug].astro b/src/pages/[slug].astro new file mode 100644 index 00000000..1a2c4f89 --- /dev/null +++ b/src/pages/[slug].astro @@ -0,0 +1,29 @@ +--- +import { getCollection, render } from 'astro:content'; + +export async function getStaticPaths() { + const posts = await getCollection('blog', ({ data }) => !data.draft); + return posts.map(post => { + // url field is like "/my-post/" — strip slashes to get slug + const slug = (post.data.url ?? `/${post.id}/`).replace(/^\/|\/$/g, ''); + return { params: { slug }, props: { post } }; + }); +} + +const { post } = Astro.props; +const { Content } = await render(post); +const dateStr = post.data.date.toLocaleDateString('de-DE', { + day: '2-digit', month: '2-digit', year: 'numeric' +}); +--- + +{post.data.title} | juplo + +
+

{post.data.title}

+

Veröffentlicht: {dateStr}

+ +
+

← Blog

+ + diff --git a/src/pages/blog/archive/[year].astro b/src/pages/blog/archive/[year].astro new file mode 100644 index 00000000..ecdde543 --- /dev/null +++ b/src/pages/blog/archive/[year].astro @@ -0,0 +1,34 @@ +--- +import { getCollection } from 'astro:content'; + +export async function getStaticPaths() { + const posts = await getCollection('blog', ({ data }) => !data.draft); + const years = [...new Set(posts.map(p => p.data.date.getFullYear().toString()))]; + return years.map(year => ({ + params: { year }, + props: { + posts: posts + .filter(p => p.data.date.getFullYear().toString() === year) + .sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf()), + }, + })); +} + +const { year } = Astro.params; +const { posts } = Astro.props; +--- + +Archiv {year} | juplo + +

Archiv {year}

+ +

← Alle Jahre

+ + diff --git a/src/pages/blog/index.astro b/src/pages/blog/index.astro new file mode 100644 index 00000000..5b727ba7 --- /dev/null +++ b/src/pages/blog/index.astro @@ -0,0 +1,32 @@ +--- +import { getCollection } from 'astro:content'; + +const posts = (await getCollection('blog', ({ data }) => !data.draft)) + .sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf()); + +const byYear: Record = {}; +for (const post of posts) { + const year = post.data.date.getFullYear().toString(); + if (!byYear[year]) byYear[year] = []; + byYear[year].push(post); +} +const years = Object.keys(byYear).sort((a, b) => Number(b) - Number(a)); +--- + +Blog | juplo + +

Blog

+

Recent Posts

+ +

Browse By Year

+ + + -- 2.39.5