diff --git a/static/images/posts/2020-wrapup/buddy-auto.gif b/src/assets/blog/2020-wrapup/buddy-auto.gif
similarity index 100%
rename from static/images/posts/2020-wrapup/buddy-auto.gif
rename to src/assets/blog/2020-wrapup/buddy-auto.gif
diff --git a/static/images/posts/ampr-vultr-bgp/request-page.png b/src/assets/blog/ampr-vultr-bgp/request-page.png
similarity index 100%
rename from static/images/posts/ampr-vultr-bgp/request-page.png
rename to src/assets/blog/ampr-vultr-bgp/request-page.png
diff --git a/static/images/posts/amprnet-bgp-announce/internet_1.drawio b/src/assets/blog/amprnet-bgp-announce/internet_1.drawio
similarity index 100%
rename from static/images/posts/amprnet-bgp-announce/internet_1.drawio
rename to src/assets/blog/amprnet-bgp-announce/internet_1.drawio
diff --git a/static/images/posts/amprnet-bgp-announce/internet_1.svg b/src/assets/blog/amprnet-bgp-announce/internet_1.svg
similarity index 100%
rename from static/images/posts/amprnet-bgp-announce/internet_1.svg
rename to src/assets/blog/amprnet-bgp-announce/internet_1.svg
diff --git a/static/images/posts/angle-problem/drawing.svg b/src/assets/blog/angle-problem/drawing.svg
similarity index 100%
rename from static/images/posts/angle-problem/drawing.svg
rename to src/assets/blog/angle-problem/drawing.svg
diff --git a/static/images/posts/aprs-usage/aprs_version_numbers.png b/src/assets/blog/aprs-usage/aprs_version_numbers.png
similarity index 100%
rename from static/images/posts/aprs-usage/aprs_version_numbers.png
rename to src/assets/blog/aprs-usage/aprs_version_numbers.png
diff --git a/static/images/posts/aprs-usage/beacon_vs_non_beacon.png b/src/assets/blog/aprs-usage/beacon_vs_non_beacon.png
similarity index 100%
rename from static/images/posts/aprs-usage/beacon_vs_non_beacon.png
rename to src/assets/blog/aprs-usage/beacon_vs_non_beacon.png
diff --git a/static/images/posts/aprs-usage/beacon_vs_non_beacon_inet.png b/src/assets/blog/aprs-usage/beacon_vs_non_beacon_inet.png
similarity index 100%
rename from static/images/posts/aprs-usage/beacon_vs_non_beacon_inet.png
rename to src/assets/blog/aprs-usage/beacon_vs_non_beacon_inet.png
diff --git a/static/images/posts/aprs-usage/beacon_vs_non_beacon_rf.png b/src/assets/blog/aprs-usage/beacon_vs_non_beacon_rf.png
similarity index 100%
rename from static/images/posts/aprs-usage/beacon_vs_non_beacon_rf.png
rename to src/assets/blog/aprs-usage/beacon_vs_non_beacon_rf.png
diff --git a/static/images/posts/aprs-usage/igate_graphic.dot b/src/assets/blog/aprs-usage/igate_graphic.dot
similarity index 100%
rename from static/images/posts/aprs-usage/igate_graphic.dot
rename to src/assets/blog/aprs-usage/igate_graphic.dot
diff --git a/static/images/posts/aprs-usage/igate_graphic.svg b/src/assets/blog/aprs-usage/igate_graphic.svg
similarity index 100%
rename from static/images/posts/aprs-usage/igate_graphic.svg
rename to src/assets/blog/aprs-usage/igate_graphic.svg
diff --git a/static/images/posts/aprs-usage/internet_vs_rf.png b/src/assets/blog/aprs-usage/internet_vs_rf.png
similarity index 100%
rename from static/images/posts/aprs-usage/internet_vs_rf.png
rename to src/assets/blog/aprs-usage/internet_vs_rf.png
diff --git a/static/images/posts/aprs-usage/top_10_destinations.png b/src/assets/blog/aprs-usage/top_10_destinations.png
similarity index 100%
rename from static/images/posts/aprs-usage/top_10_destinations.png
rename to src/assets/blog/aprs-usage/top_10_destinations.png
diff --git a/static/images/posts/aprs-usage/top_10_sources.png b/src/assets/blog/aprs-usage/top_10_sources.png
similarity index 100%
rename from static/images/posts/aprs-usage/top_10_sources.png
rename to src/assets/blog/aprs-usage/top_10_sources.png
diff --git a/static/images/posts/bell-ipv6/hh4k.png b/src/assets/blog/bell-ipv6/hh4k.png
similarity index 100%
rename from static/images/posts/bell-ipv6/hh4k.png
rename to src/assets/blog/bell-ipv6/hh4k.png
diff --git a/static/images/posts/bell-ipv6/sit.png b/src/assets/blog/bell-ipv6/sit.png
similarity index 100%
rename from static/images/posts/bell-ipv6/sit.png
rename to src/assets/blog/bell-ipv6/sit.png
diff --git a/static/images/posts/bell-ipv6/udm-pro.png b/src/assets/blog/bell-ipv6/udm-pro.png
similarity index 100%
rename from static/images/posts/bell-ipv6/udm-pro.png
rename to src/assets/blog/bell-ipv6/udm-pro.png
diff --git a/static/images/posts/bin-images/dll.png b/src/assets/blog/bin-images/dll.png
similarity index 100%
rename from static/images/posts/bin-images/dll.png
rename to src/assets/blog/bin-images/dll.png
diff --git a/static/images/posts/bin-images/dll2.png b/src/assets/blog/bin-images/dll2.png
similarity index 100%
rename from static/images/posts/bin-images/dll2.png
rename to src/assets/blog/bin-images/dll2.png
diff --git a/static/images/posts/camping-radio/IMG_0218.jpg b/src/assets/blog/camping-radio/IMG_0218.jpg
similarity index 100%
rename from static/images/posts/camping-radio/IMG_0218.jpg
rename to src/assets/blog/camping-radio/IMG_0218.jpg
diff --git a/static/images/posts/camping-radio/PXL_20240713_194740810.jpg b/src/assets/blog/camping-radio/PXL_20240713_194740810.jpg
similarity index 100%
rename from static/images/posts/camping-radio/PXL_20240713_194740810.jpg
rename to src/assets/blog/camping-radio/PXL_20240713_194740810.jpg
diff --git a/static/images/posts/camping-radio/PXL_20240713_202756448.jpg b/src/assets/blog/camping-radio/PXL_20240713_202756448.jpg
similarity index 100%
rename from static/images/posts/camping-radio/PXL_20240713_202756448.jpg
rename to src/assets/blog/camping-radio/PXL_20240713_202756448.jpg
diff --git a/static/images/posts/camping-radio/PXL_20240714_151953924.jpg b/src/assets/blog/camping-radio/PXL_20240714_151953924.jpg
similarity index 100%
rename from static/images/posts/camping-radio/PXL_20240714_151953924.jpg
rename to src/assets/blog/camping-radio/PXL_20240714_151953924.jpg
diff --git a/static/images/posts/camping-radio/PXL_20240714_153600599.jpg b/src/assets/blog/camping-radio/PXL_20240714_153600599.jpg
similarity index 100%
rename from static/images/posts/camping-radio/PXL_20240714_153600599.jpg
rename to src/assets/blog/camping-radio/PXL_20240714_153600599.jpg
diff --git a/static/images/posts/camping-radio/PXL_20240714_153706887.jpg b/src/assets/blog/camping-radio/PXL_20240714_153706887.jpg
similarity index 100%
rename from static/images/posts/camping-radio/PXL_20240714_153706887.jpg
rename to src/assets/blog/camping-radio/PXL_20240714_153706887.jpg
diff --git a/static/images/posts/camping-radio/PXL_20240714_162523877.jpg b/src/assets/blog/camping-radio/PXL_20240714_162523877.jpg
similarity index 100%
rename from static/images/posts/camping-radio/PXL_20240714_162523877.jpg
rename to src/assets/blog/camping-radio/PXL_20240714_162523877.jpg
diff --git a/static/images/posts/camping-radio/PXL_20240719_200332311.jpg b/src/assets/blog/camping-radio/PXL_20240719_200332311.jpg
similarity index 100%
rename from static/images/posts/camping-radio/PXL_20240719_200332311.jpg
rename to src/assets/blog/camping-radio/PXL_20240719_200332311.jpg
diff --git a/static/images/posts/camping-radio/PXL_20240719_201852022.jpg b/src/assets/blog/camping-radio/PXL_20240719_201852022.jpg
similarity index 100%
rename from static/images/posts/camping-radio/PXL_20240719_201852022.jpg
rename to src/assets/blog/camping-radio/PXL_20240719_201852022.jpg
diff --git a/static/images/posts/camping-radio/PXL_20240720_200504715.jpg b/src/assets/blog/camping-radio/PXL_20240720_200504715.jpg
similarity index 100%
rename from static/images/posts/camping-radio/PXL_20240720_200504715.jpg
rename to src/assets/blog/camping-radio/PXL_20240720_200504715.jpg
diff --git a/static/images/posts/camping-radio/Screenshot_20240714-124916.png b/src/assets/blog/camping-radio/Screenshot_20240714-124916.png
similarity index 100%
rename from static/images/posts/camping-radio/Screenshot_20240714-124916.png
rename to src/assets/blog/camping-radio/Screenshot_20240714-124916.png
diff --git a/static/images/posts/camping-radio/original_3fd7fa07-f8fe-4dba-aeb1-aa1d689f300c_Screenshot_20240720-193018.png b/src/assets/blog/camping-radio/original_3fd7fa07-f8fe-4dba-aeb1-aa1d689f300c_Screenshot_20240720-193018.png
similarity index 100%
rename from static/images/posts/camping-radio/original_3fd7fa07-f8fe-4dba-aeb1-aa1d689f300c_Screenshot_20240720-193018.png
rename to src/assets/blog/camping-radio/original_3fd7fa07-f8fe-4dba-aeb1-aa1d689f300c_Screenshot_20240720-193018.png
diff --git a/static/images/posts/camping-radio/spkr-wire-efhw-lengths.png b/src/assets/blog/camping-radio/spkr-wire-efhw-lengths.png
similarity index 100%
rename from static/images/posts/camping-radio/spkr-wire-efhw-lengths.png
rename to src/assets/blog/camping-radio/spkr-wire-efhw-lengths.png
diff --git a/static/images/posts/commit-sync/commit_graph.png b/src/assets/blog/commit-sync/commit_graph.png
similarity index 100%
rename from static/images/posts/commit-sync/commit_graph.png
rename to src/assets/blog/commit-sync/commit_graph.png
diff --git a/static/images/posts/frc-codespaces/codespaces-code.png b/src/assets/blog/frc-codespaces/codespaces-code.png
similarity index 100%
rename from static/images/posts/frc-codespaces/codespaces-code.png
rename to src/assets/blog/frc-codespaces/codespaces-code.png
diff --git a/static/images/posts/frc-codespaces/codespaces-menu.png b/src/assets/blog/frc-codespaces/codespaces-menu.png
similarity index 100%
rename from static/images/posts/frc-codespaces/codespaces-menu.png
rename to src/assets/blog/frc-codespaces/codespaces-menu.png
diff --git a/static/images/posts/galliumos/arcer_r11_screw.jpg b/src/assets/blog/galliumos/arcer_r11_screw.jpg
similarity index 100%
rename from static/images/posts/galliumos/arcer_r11_screw.jpg
rename to src/assets/blog/galliumos/arcer_r11_screw.jpg
diff --git a/static/images/posts/galliumos/fwutil_cros_wp-on.png b/src/assets/blog/galliumos/fwutil_cros_wp-on.png
similarity index 100%
rename from static/images/posts/galliumos/fwutil_cros_wp-on.png
rename to src/assets/blog/galliumos/fwutil_cros_wp-on.png
diff --git a/static/images/posts/gamels/steam_app_ids.png b/src/assets/blog/gamels/steam_app_ids.png
similarity index 100%
rename from static/images/posts/gamels/steam_app_ids.png
rename to src/assets/blog/gamels/steam_app_ids.png
diff --git a/static/images/posts/gamels/steamdeck-screenshot.png b/src/assets/blog/gamels/steamdeck-screenshot.png
similarity index 100%
rename from static/images/posts/gamels/steamdeck-screenshot.png
rename to src/assets/blog/gamels/steamdeck-screenshot.png
diff --git a/static/images/posts/git-aliases/branches.png b/src/assets/blog/git-aliases/branches.png
similarity index 100%
rename from static/images/posts/git-aliases/branches.png
rename to src/assets/blog/git-aliases/branches.png
diff --git a/static/images/posts/git-aliases/lscommits.png b/src/assets/blog/git-aliases/lscommits.png
similarity index 100%
rename from static/images/posts/git-aliases/lscommits.png
rename to src/assets/blog/git-aliases/lscommits.png
diff --git a/static/images/posts/git-aliases/tree.png b/src/assets/blog/git-aliases/tree.png
similarity index 100%
rename from static/images/posts/git-aliases/tree.png
rename to src/assets/blog/git-aliases/tree.png
diff --git a/static/images/posts/intro-to-openscad/all-axis-translate.png b/src/assets/blog/intro-to-openscad/all-axis-translate.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/all-axis-translate.png
rename to src/assets/blog/intro-to-openscad/all-axis-translate.png
diff --git a/static/images/posts/intro-to-openscad/axis-arguments.png b/src/assets/blog/intro-to-openscad/axis-arguments.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/axis-arguments.png
rename to src/assets/blog/intro-to-openscad/axis-arguments.png
diff --git a/static/images/posts/intro-to-openscad/broken-union.png b/src/assets/blog/intro-to-openscad/broken-union.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/broken-union.png
rename to src/assets/blog/intro-to-openscad/broken-union.png
diff --git a/static/images/posts/intro-to-openscad/cube-10mm.png b/src/assets/blog/intro-to-openscad/cube-10mm.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/cube-10mm.png
rename to src/assets/blog/intro-to-openscad/cube-10mm.png
diff --git a/static/images/posts/intro-to-openscad/cube-distance.png b/src/assets/blog/intro-to-openscad/cube-distance.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/cube-distance.png
rename to src/assets/blog/intro-to-openscad/cube-distance.png
diff --git a/static/images/posts/intro-to-openscad/cube-rotate-all.png b/src/assets/blog/intro-to-openscad/cube-rotate-all.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/cube-rotate-all.png
rename to src/assets/blog/intro-to-openscad/cube-rotate-all.png
diff --git a/static/images/posts/intro-to-openscad/cube-rotate-x-45.png b/src/assets/blog/intro-to-openscad/cube-rotate-x-45.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/cube-rotate-x-45.png
rename to src/assets/blog/intro-to-openscad/cube-rotate-x-45.png
diff --git a/static/images/posts/intro-to-openscad/cylinder.png b/src/assets/blog/intro-to-openscad/cylinder.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/cylinder.png
rename to src/assets/blog/intro-to-openscad/cylinder.png
diff --git a/static/images/posts/intro-to-openscad/gadget.png b/src/assets/blog/intro-to-openscad/gadget.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/gadget.png
rename to src/assets/blog/intro-to-openscad/gadget.png
diff --git a/static/images/posts/intro-to-openscad/overlapping.png b/src/assets/blog/intro-to-openscad/overlapping.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/overlapping.png
rename to src/assets/blog/intro-to-openscad/overlapping.png
diff --git a/static/images/posts/intro-to-openscad/rectangle.png b/src/assets/blog/intro-to-openscad/rectangle.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/rectangle.png
rename to src/assets/blog/intro-to-openscad/rectangle.png
diff --git a/static/images/posts/intro-to-openscad/scad-window.png b/src/assets/blog/intro-to-openscad/scad-window.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/scad-window.png
rename to src/assets/blog/intro-to-openscad/scad-window.png
diff --git a/static/images/posts/intro-to-openscad/smooth-cylinder.png b/src/assets/blog/intro-to-openscad/smooth-cylinder.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/smooth-cylinder.png
rename to src/assets/blog/intro-to-openscad/smooth-cylinder.png
diff --git a/static/images/posts/intro-to-openscad/smooth-sphere.png b/src/assets/blog/intro-to-openscad/smooth-sphere.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/smooth-sphere.png
rename to src/assets/blog/intro-to-openscad/smooth-sphere.png
diff --git a/static/images/posts/intro-to-openscad/sphere-cube-cut.png b/src/assets/blog/intro-to-openscad/sphere-cube-cut.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/sphere-cube-cut.png
rename to src/assets/blog/intro-to-openscad/sphere-cube-cut.png
diff --git a/static/images/posts/intro-to-openscad/sphere.png b/src/assets/blog/intro-to-openscad/sphere.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/sphere.png
rename to src/assets/blog/intro-to-openscad/sphere.png
diff --git a/static/images/posts/intro-to-openscad/translated-cube-x.png b/src/assets/blog/intro-to-openscad/translated-cube-x.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/translated-cube-x.png
rename to src/assets/blog/intro-to-openscad/translated-cube-x.png
diff --git a/static/images/posts/intro-to-openscad/translated-cubes.png b/src/assets/blog/intro-to-openscad/translated-cubes.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/translated-cubes.png
rename to src/assets/blog/intro-to-openscad/translated-cubes.png
diff --git a/static/images/posts/intro-to-openscad/unequal-translated-cubes.png b/src/assets/blog/intro-to-openscad/unequal-translated-cubes.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/unequal-translated-cubes.png
rename to src/assets/blog/intro-to-openscad/unequal-translated-cubes.png
diff --git a/static/images/posts/intro-to-openscad/union.png b/src/assets/blog/intro-to-openscad/union.png
similarity index 100%
rename from static/images/posts/intro-to-openscad/union.png
rename to src/assets/blog/intro-to-openscad/union.png
diff --git a/static/images/posts/intro-to-openscad/workspace.scad b/src/assets/blog/intro-to-openscad/workspace.scad
similarity index 100%
rename from static/images/posts/intro-to-openscad/workspace.scad
rename to src/assets/blog/intro-to-openscad/workspace.scad
diff --git a/static/images/posts/ipv6-canvas/v6_canvas_1.png b/src/assets/blog/ipv6-canvas/v6_canvas_1.png
similarity index 100%
rename from static/images/posts/ipv6-canvas/v6_canvas_1.png
rename to src/assets/blog/ipv6-canvas/v6_canvas_1.png
diff --git a/static/images/posts/ipv6-canvas/v6_canvas_2.png b/src/assets/blog/ipv6-canvas/v6_canvas_2.png
similarity index 100%
rename from static/images/posts/ipv6-canvas/v6_canvas_2.png
rename to src/assets/blog/ipv6-canvas/v6_canvas_2.png
diff --git a/static/images/posts/japanese-input/ibus-general.png b/src/assets/blog/japanese-input/ibus-general.png
similarity index 100%
rename from static/images/posts/japanese-input/ibus-general.png
rename to src/assets/blog/japanese-input/ibus-general.png
diff --git a/static/images/posts/japanese-input/ibus-input.png b/src/assets/blog/japanese-input/ibus-input.png
similarity index 100%
rename from static/images/posts/japanese-input/ibus-input.png
rename to src/assets/blog/japanese-input/ibus-input.png
diff --git a/static/images/posts/japanese-input/language-installation.png b/src/assets/blog/japanese-input/language-installation.png
similarity index 100%
rename from static/images/posts/japanese-input/language-installation.png
rename to src/assets/blog/japanese-input/language-installation.png
diff --git a/static/images/posts/japanese-input/language-settings.png b/src/assets/blog/japanese-input/language-settings.png
similarity index 100%
rename from static/images/posts/japanese-input/language-settings.png
rename to src/assets/blog/japanese-input/language-settings.png
diff --git a/static/images/posts/latex-notes/hs_notes_workflow.png b/src/assets/blog/latex-notes/hs_notes_workflow.png
similarity index 100%
rename from static/images/posts/latex-notes/hs_notes_workflow.png
rename to src/assets/blog/latex-notes/hs_notes_workflow.png
diff --git a/static/images/posts/leapmotion-photography/controller.jpg b/src/assets/blog/leapmotion-photography/controller.jpg
similarity index 100%
rename from static/images/posts/leapmotion-photography/controller.jpg
rename to src/assets/blog/leapmotion-photography/controller.jpg
diff --git a/static/images/posts/leapmotion-photography/leap-visualizer.png b/src/assets/blog/leapmotion-photography/leap-visualizer.png
similarity index 100%
rename from static/images/posts/leapmotion-photography/leap-visualizer.png
rename to src/assets/blog/leapmotion-photography/leap-visualizer.png
diff --git a/static/images/posts/ludum-dare-46/ld46-final.png b/src/assets/blog/ludum-dare-46/ld46-final.png
similarity index 100%
rename from static/images/posts/ludum-dare-46/ld46-final.png
rename to src/assets/blog/ludum-dare-46/ld46-final.png
diff --git a/static/images/posts/ludum-dare-46/ld46-heartrate.png b/src/assets/blog/ludum-dare-46/ld46-heartrate.png
similarity index 100%
rename from static/images/posts/ludum-dare-46/ld46-heartrate.png
rename to src/assets/blog/ludum-dare-46/ld46-heartrate.png
diff --git a/static/images/posts/ludum-dare-46/ld46-hud-v1.png b/src/assets/blog/ludum-dare-46/ld46-hud-v1.png
similarity index 100%
rename from static/images/posts/ludum-dare-46/ld46-hud-v1.png
rename to src/assets/blog/ludum-dare-46/ld46-hud-v1.png
diff --git a/static/images/posts/ludum-dare-46/ld46-hud-v2.png b/src/assets/blog/ludum-dare-46/ld46-hud-v2.png
similarity index 100%
rename from static/images/posts/ludum-dare-46/ld46-hud-v2.png
rename to src/assets/blog/ludum-dare-46/ld46-hud-v2.png
diff --git a/static/images/posts/ludum-dare-46/ld46-new-game-bg.png b/src/assets/blog/ludum-dare-46/ld46-new-game-bg.png
similarity index 100%
rename from static/images/posts/ludum-dare-46/ld46-new-game-bg.png
rename to src/assets/blog/ludum-dare-46/ld46-new-game-bg.png
diff --git a/static/images/posts/ludum-dare-46/ld46-settings-screen.png b/src/assets/blog/ludum-dare-46/ld46-settings-screen.png
similarity index 100%
rename from static/images/posts/ludum-dare-46/ld46-settings-screen.png
rename to src/assets/blog/ludum-dare-46/ld46-settings-screen.png
diff --git a/static/images/posts/ludum-dare-46/ld46-world-assets-v1.png b/src/assets/blog/ludum-dare-46/ld46-world-assets-v1.png
similarity index 100%
rename from static/images/posts/ludum-dare-46/ld46-world-assets-v1.png
rename to src/assets/blog/ludum-dare-46/ld46-world-assets-v1.png
diff --git a/static/images/posts/mindmap/mindmap-simple.png b/src/assets/blog/mindmap/mindmap-simple.png
similarity index 100%
rename from static/images/posts/mindmap/mindmap-simple.png
rename to src/assets/blog/mindmap/mindmap-simple.png
diff --git a/static/images/posts/monocular-blender/ayo_bro.png b/src/assets/blog/monocular-blender/ayo_bro.png
similarity index 100%
rename from static/images/posts/monocular-blender/ayo_bro.png
rename to src/assets/blog/monocular-blender/ayo_bro.png
diff --git a/static/images/posts/monocular-blender/ayo_displaced.png b/src/assets/blog/monocular-blender/ayo_displaced.png
similarity index 100%
rename from static/images/posts/monocular-blender/ayo_displaced.png
rename to src/assets/blog/monocular-blender/ayo_displaced.png
diff --git a/static/images/posts/monocular-blender/ayo_textured.png b/src/assets/blog/monocular-blender/ayo_textured.png
similarity index 100%
rename from static/images/posts/monocular-blender/ayo_textured.png
rename to src/assets/blog/monocular-blender/ayo_textured.png
diff --git a/static/images/posts/monocular-blender/blender-importer-window.png b/src/assets/blog/monocular-blender/blender-importer-window.png
similarity index 100%
rename from static/images/posts/monocular-blender/blender-importer-window.png
rename to src/assets/blog/monocular-blender/blender-importer-window.png
diff --git a/static/images/posts/monocular-blender/demo_render.mp4 b/src/assets/blog/monocular-blender/demo_render.mp4
similarity index 100%
rename from static/images/posts/monocular-blender/demo_render.mp4
rename to src/assets/blog/monocular-blender/demo_render.mp4
diff --git a/static/images/posts/monocular-blender/exaggerated-depth.png b/src/assets/blog/monocular-blender/exaggerated-depth.png
similarity index 100%
rename from static/images/posts/monocular-blender/exaggerated-depth.png
rename to src/assets/blog/monocular-blender/exaggerated-depth.png
diff --git a/static/images/posts/mouse-button-swap/PXL_20230501_193330518.jpg b/src/assets/blog/mouse-button-swap/PXL_20230501_193330518.jpg
similarity index 100%
rename from static/images/posts/mouse-button-swap/PXL_20230501_193330518.jpg
rename to src/assets/blog/mouse-button-swap/PXL_20230501_193330518.jpg
diff --git a/static/images/posts/mouse-button-swap/PXL_20230501_193336150.jpg b/src/assets/blog/mouse-button-swap/PXL_20230501_193336150.jpg
similarity index 100%
rename from static/images/posts/mouse-button-swap/PXL_20230501_193336150.jpg
rename to src/assets/blog/mouse-button-swap/PXL_20230501_193336150.jpg
diff --git a/static/images/posts/mouse-button-swap/PXL_20230501_234325200.jpg b/src/assets/blog/mouse-button-swap/PXL_20230501_234325200.jpg
similarity index 100%
rename from static/images/posts/mouse-button-swap/PXL_20230501_234325200.jpg
rename to src/assets/blog/mouse-button-swap/PXL_20230501_234325200.jpg
diff --git a/static/images/posts/mouse-button-swap/PXL_20230501_234350942.jpg b/src/assets/blog/mouse-button-swap/PXL_20230501_234350942.jpg
similarity index 100%
rename from static/images/posts/mouse-button-swap/PXL_20230501_234350942.jpg
rename to src/assets/blog/mouse-button-swap/PXL_20230501_234350942.jpg
diff --git a/static/images/posts/mouse-button-swap/PXL_20230502_000502685.jpg b/src/assets/blog/mouse-button-swap/PXL_20230502_000502685.jpg
similarity index 100%
rename from static/images/posts/mouse-button-swap/PXL_20230502_000502685.jpg
rename to src/assets/blog/mouse-button-swap/PXL_20230502_000502685.jpg
diff --git a/static/images/posts/nanovna/area-2.jpg b/src/assets/blog/nanovna/area-2.jpg
similarity index 100%
rename from static/images/posts/nanovna/area-2.jpg
rename to src/assets/blog/nanovna/area-2.jpg
diff --git a/static/images/posts/nanovna/area.jpg b/src/assets/blog/nanovna/area.jpg
similarity index 100%
rename from static/images/posts/nanovna/area.jpg
rename to src/assets/blog/nanovna/area.jpg
diff --git a/static/images/posts/nanovna/nanovna-capture-20m.png b/src/assets/blog/nanovna/nanovna-capture-20m.png
similarity index 100%
rename from static/images/posts/nanovna/nanovna-capture-20m.png
rename to src/assets/blog/nanovna/nanovna-capture-20m.png
diff --git a/static/images/posts/nanovna/nanovna-capture-full.png b/src/assets/blog/nanovna/nanovna-capture-full.png
similarity index 100%
rename from static/images/posts/nanovna/nanovna-capture-full.png
rename to src/assets/blog/nanovna/nanovna-capture-full.png
diff --git a/static/images/posts/nanovna/nanovna.jpg b/src/assets/blog/nanovna/nanovna.jpg
similarity index 100%
rename from static/images/posts/nanovna/nanovna.jpg
rename to src/assets/blog/nanovna/nanovna.jpg
diff --git a/static/images/posts/nanovna/setup.jpg b/src/assets/blog/nanovna/setup.jpg
similarity index 100%
rename from static/images/posts/nanovna/setup.jpg
rename to src/assets/blog/nanovna/setup.jpg
diff --git a/static/images/posts/obsidian-blogging/Pasted image 20231021155654.png b/src/assets/blog/obsidian-blogging/Pasted image 20231021155654.png
similarity index 100%
rename from static/images/posts/obsidian-blogging/Pasted image 20231021155654.png
rename to src/assets/blog/obsidian-blogging/Pasted image 20231021155654.png
diff --git a/static/images/posts/obsidian-blogging/Pasted image.png b/src/assets/blog/obsidian-blogging/Pasted image.png
similarity index 100%
rename from static/images/posts/obsidian-blogging/Pasted image.png
rename to src/assets/blog/obsidian-blogging/Pasted image.png
diff --git a/static/images/posts/out-of-tree-qmk/file-tree.png b/src/assets/blog/out-of-tree-qmk/file-tree.png
similarity index 100%
rename from static/images/posts/out-of-tree-qmk/file-tree.png
rename to src/assets/blog/out-of-tree-qmk/file-tree.png
diff --git a/static/images/posts/personal-ases/ip_stack.png b/src/assets/blog/personal-ases/ip_stack.png
similarity index 100%
rename from static/images/posts/personal-ases/ip_stack.png
rename to src/assets/blog/personal-ases/ip_stack.png
diff --git a/static/images/posts/personal-ases/rirs.png b/src/assets/blog/personal-ases/rirs.png
similarity index 100%
rename from static/images/posts/personal-ases/rirs.png
rename to src/assets/blog/personal-ases/rirs.png
diff --git a/static/images/posts/personal-pbx/magic_phones.dot b/src/assets/blog/personal-pbx/magic_phones.dot
similarity index 100%
rename from static/images/posts/personal-pbx/magic_phones.dot
rename to src/assets/blog/personal-pbx/magic_phones.dot
diff --git a/static/images/posts/personal-pbx/magic_phones.png b/src/assets/blog/personal-pbx/magic_phones.png
similarity index 100%
rename from static/images/posts/personal-pbx/magic_phones.png
rename to src/assets/blog/personal-pbx/magic_phones.png
diff --git a/static/images/posts/personal-pbx/my_trunks.dot b/src/assets/blog/personal-pbx/my_trunks.dot
similarity index 100%
rename from static/images/posts/personal-pbx/my_trunks.dot
rename to src/assets/blog/personal-pbx/my_trunks.dot
diff --git a/static/images/posts/personal-pbx/my_trunks.png b/src/assets/blog/personal-pbx/my_trunks.png
similarity index 100%
rename from static/images/posts/personal-pbx/my_trunks.png
rename to src/assets/blog/personal-pbx/my_trunks.png
diff --git a/static/images/posts/personal-pbx/phone_internet.dot b/src/assets/blog/personal-pbx/phone_internet.dot
similarity index 100%
rename from static/images/posts/personal-pbx/phone_internet.dot
rename to src/assets/blog/personal-pbx/phone_internet.dot
diff --git a/static/images/posts/personal-pbx/phone_internet.png b/src/assets/blog/personal-pbx/phone_internet.png
similarity index 100%
rename from static/images/posts/personal-pbx/phone_internet.png
rename to src/assets/blog/personal-pbx/phone_internet.png
diff --git a/static/images/posts/pid/are_we_there.svg b/src/assets/blog/pid/are_we_there.svg
similarity index 100%
rename from static/images/posts/pid/are_we_there.svg
rename to src/assets/blog/pid/are_we_there.svg
diff --git a/static/images/posts/pid/here.svg b/src/assets/blog/pid/here.svg
similarity index 100%
rename from static/images/posts/pid/here.svg
rename to src/assets/blog/pid/here.svg
diff --git a/static/images/posts/pid/here_there.svg b/src/assets/blog/pid/here_there.svg
similarity index 100%
rename from static/images/posts/pid/here_there.svg
rename to src/assets/blog/pid/here_there.svg
diff --git a/static/images/posts/pid/how_far.svg b/src/assets/blog/pid/how_far.svg
similarity index 100%
rename from static/images/posts/pid/how_far.svg
rename to src/assets/blog/pid/how_far.svg
diff --git a/static/images/posts/pid/this_way.svg b/src/assets/blog/pid/this_way.svg
similarity index 100%
rename from static/images/posts/pid/this_way.svg
rename to src/assets/blog/pid/this_way.svg
diff --git a/static/images/posts/quaternions/dual_quats.jpg b/src/assets/blog/quaternions/dual_quats.jpg
similarity index 100%
rename from static/images/posts/quaternions/dual_quats.jpg
rename to src/assets/blog/quaternions/dual_quats.jpg
diff --git a/static/images/posts/quaternions/quat_mul.jpg b/src/assets/blog/quaternions/quat_mul.jpg
similarity index 100%
rename from static/images/posts/quaternions/quat_mul.jpg
rename to src/assets/blog/quaternions/quat_mul.jpg
diff --git a/static/images/posts/quaternions/quat_vec3.png b/src/assets/blog/quaternions/quat_vec3.png
similarity index 100%
rename from static/images/posts/quaternions/quat_vec3.png
rename to src/assets/blog/quaternions/quat_vec3.png
diff --git a/static/images/posts/quaternions/quaternion_meme.png b/src/assets/blog/quaternions/quaternion_meme.png
similarity index 100%
rename from static/images/posts/quaternions/quaternion_meme.png
rename to src/assets/blog/quaternions/quaternion_meme.png
diff --git a/static/images/posts/rainbow-keyboard/action_layout.png b/src/assets/blog/rainbow-keyboard/action_layout.png
similarity index 100%
rename from static/images/posts/rainbow-keyboard/action_layout.png
rename to src/assets/blog/rainbow-keyboard/action_layout.png
diff --git a/static/images/posts/rainbow-keyboard/kayboard.xcf b/src/assets/blog/rainbow-keyboard/kayboard.xcf
similarity index 100%
rename from static/images/posts/rainbow-keyboard/kayboard.xcf
rename to src/assets/blog/rainbow-keyboard/kayboard.xcf
diff --git a/static/images/posts/rainbow-keyboard/movement_layout.png b/src/assets/blog/rainbow-keyboard/movement_layout.png
similarity index 100%
rename from static/images/posts/rainbow-keyboard/movement_layout.png
rename to src/assets/blog/rainbow-keyboard/movement_layout.png
diff --git a/static/images/posts/rfc6052-bitmasks/NAT64-setup.png b/src/assets/blog/rfc6052-bitmasks/NAT64-setup.png
similarity index 100%
rename from static/images/posts/rfc6052-bitmasks/NAT64-setup.png
rename to src/assets/blog/rfc6052-bitmasks/NAT64-setup.png
diff --git a/static/images/posts/rfc6052-bitmasks/NAT64-setup.xcf b/src/assets/blog/rfc6052-bitmasks/NAT64-setup.xcf
similarity index 100%
rename from static/images/posts/rfc6052-bitmasks/NAT64-setup.xcf
rename to src/assets/blog/rfc6052-bitmasks/NAT64-setup.xcf
diff --git a/static/images/posts/rfc6052-bitmasks/ipv4-embed.png b/src/assets/blog/rfc6052-bitmasks/ipv4-embed.png
similarity index 100%
rename from static/images/posts/rfc6052-bitmasks/ipv4-embed.png
rename to src/assets/blog/rfc6052-bitmasks/ipv4-embed.png
diff --git a/static/images/posts/rfc6052-bitmasks/ipv4-embed.xcf b/src/assets/blog/rfc6052-bitmasks/ipv4-embed.xcf
similarity index 100%
rename from static/images/posts/rfc6052-bitmasks/ipv4-embed.xcf
rename to src/assets/blog/rfc6052-bitmasks/ipv4-embed.xcf
diff --git a/static/images/posts/rfc6052-bitmasks/ipv4-extract.png b/src/assets/blog/rfc6052-bitmasks/ipv4-extract.png
similarity index 100%
rename from static/images/posts/rfc6052-bitmasks/ipv4-extract.png
rename to src/assets/blog/rfc6052-bitmasks/ipv4-extract.png
diff --git a/static/images/posts/rfc6052-bitmasks/ipv4-extract.xcf b/src/assets/blog/rfc6052-bitmasks/ipv4-extract.xcf
similarity index 100%
rename from static/images/posts/rfc6052-bitmasks/ipv4-extract.xcf
rename to src/assets/blog/rfc6052-bitmasks/ipv4-extract.xcf
diff --git a/static/images/posts/rickroll-ipv6/400px-Tun-tap-osilayers-diagram.png b/src/assets/blog/rickroll-ipv6/400px-Tun-tap-osilayers-diagram.png
similarity index 100%
rename from static/images/posts/rickroll-ipv6/400px-Tun-tap-osilayers-diagram.png
rename to src/assets/blog/rickroll-ipv6/400px-Tun-tap-osilayers-diagram.png
diff --git a/static/images/posts/rickroll-ipv6/he-dns-fields.png b/src/assets/blog/rickroll-ipv6/he-dns-fields.png
similarity index 100%
rename from static/images/posts/rickroll-ipv6/he-dns-fields.png
rename to src/assets/blog/rickroll-ipv6/he-dns-fields.png
diff --git a/static/images/posts/rickroll-ipv6/he-mtr.png b/src/assets/blog/rickroll-ipv6/he-mtr.png
similarity index 100%
rename from static/images/posts/rickroll-ipv6/he-mtr.png
rename to src/assets/blog/rickroll-ipv6/he-mtr.png
diff --git a/static/images/posts/rickroll-ipv6/ptr-records.png b/src/assets/blog/rickroll-ipv6/ptr-records.png
similarity index 100%
rename from static/images/posts/rickroll-ipv6/ptr-records.png
rename to src/assets/blog/rickroll-ipv6/ptr-records.png
diff --git a/static/images/posts/rickroll-ipv6/result.png b/src/assets/blog/rickroll-ipv6/result.png
similarity index 100%
rename from static/images/posts/rickroll-ipv6/result.png
rename to src/assets/blog/rickroll-ipv6/result.png
diff --git a/static/images/posts/robotics-journey/testbed.jpg b/src/assets/blog/robotics-journey/testbed.jpg
similarity index 100%
rename from static/images/posts/robotics-journey/testbed.jpg
rename to src/assets/blog/robotics-journey/testbed.jpg
diff --git a/static/images/posts/shelf-lights/desk-lights.jpg b/src/assets/blog/shelf-lights/desk-lights.jpg
similarity index 100%
rename from static/images/posts/shelf-lights/desk-lights.jpg
rename to src/assets/blog/shelf-lights/desk-lights.jpg
diff --git a/static/images/posts/shelf-lights/led-controller.jpg b/src/assets/blog/shelf-lights/led-controller.jpg
similarity index 100%
rename from static/images/posts/shelf-lights/led-controller.jpg
rename to src/assets/blog/shelf-lights/led-controller.jpg
diff --git a/static/images/posts/shelf-lights/office-layout.png b/src/assets/blog/shelf-lights/office-layout.png
similarity index 100%
rename from static/images/posts/shelf-lights/office-layout.png
rename to src/assets/blog/shelf-lights/office-layout.png
diff --git a/static/images/posts/shelf-lights/shelf-layout-side.png b/src/assets/blog/shelf-lights/shelf-layout-side.png
similarity index 100%
rename from static/images/posts/shelf-lights/shelf-layout-side.png
rename to src/assets/blog/shelf-lights/shelf-layout-side.png
diff --git a/static/images/posts/shelf-lights/shelf-layout-top.jpg b/src/assets/blog/shelf-lights/shelf-layout-top.jpg
similarity index 100%
rename from static/images/posts/shelf-lights/shelf-layout-top.jpg
rename to src/assets/blog/shelf-lights/shelf-layout-top.jpg
diff --git a/static/images/posts/shelf-lights/shelf-lights-left.jpg b/src/assets/blog/shelf-lights/shelf-lights-left.jpg
similarity index 100%
rename from static/images/posts/shelf-lights/shelf-lights-left.jpg
rename to src/assets/blog/shelf-lights/shelf-lights-left.jpg
diff --git a/static/images/posts/shelf-lights/shelf-lights.jpg b/src/assets/blog/shelf-lights/shelf-lights.jpg
similarity index 100%
rename from static/images/posts/shelf-lights/shelf-lights.jpg
rename to src/assets/blog/shelf-lights/shelf-lights.jpg
diff --git a/static/images/posts/steam-switch/sc-switch.jpg b/src/assets/blog/steam-switch/sc-switch.jpg
similarity index 100%
rename from static/images/posts/steam-switch/sc-switch.jpg
rename to src/assets/blog/steam-switch/sc-switch.jpg
diff --git a/static/images/posts/steam-switch/sc.png b/src/assets/blog/steam-switch/sc.png
similarity index 100%
rename from static/images/posts/steam-switch/sc.png
rename to src/assets/blog/steam-switch/sc.png
diff --git a/static/images/posts/the-project-i-wil-never-finish/evan-2018.png b/src/assets/blog/the-project-i-wil-never-finish/evan-2018.png
similarity index 100%
rename from static/images/posts/the-project-i-wil-never-finish/evan-2018.png
rename to src/assets/blog/the-project-i-wil-never-finish/evan-2018.png
diff --git a/static/images/posts/the-project-i-wil-never-finish/evan-2019-2.png b/src/assets/blog/the-project-i-wil-never-finish/evan-2019-2.png
similarity index 100%
rename from static/images/posts/the-project-i-wil-never-finish/evan-2019-2.png
rename to src/assets/blog/the-project-i-wil-never-finish/evan-2019-2.png
diff --git a/static/images/posts/the-project-i-wil-never-finish/evan-2019.png b/src/assets/blog/the-project-i-wil-never-finish/evan-2019.png
similarity index 100%
rename from static/images/posts/the-project-i-wil-never-finish/evan-2019.png
rename to src/assets/blog/the-project-i-wil-never-finish/evan-2019.png
diff --git a/static/images/posts/the-project-i-wil-never-finish/evan-2020-2.png b/src/assets/blog/the-project-i-wil-never-finish/evan-2020-2.png
similarity index 100%
rename from static/images/posts/the-project-i-wil-never-finish/evan-2020-2.png
rename to src/assets/blog/the-project-i-wil-never-finish/evan-2020-2.png
diff --git a/static/images/posts/the-project-i-wil-never-finish/evan-2020-body.png b/src/assets/blog/the-project-i-wil-never-finish/evan-2020-body.png
similarity index 100%
rename from static/images/posts/the-project-i-wil-never-finish/evan-2020-body.png
rename to src/assets/blog/the-project-i-wil-never-finish/evan-2020-body.png
diff --git a/static/images/posts/the-project-i-wil-never-finish/evan-2020-head.png b/src/assets/blog/the-project-i-wil-never-finish/evan-2020-head.png
similarity index 100%
rename from static/images/posts/the-project-i-wil-never-finish/evan-2020-head.png
rename to src/assets/blog/the-project-i-wil-never-finish/evan-2020-head.png
diff --git a/static/images/posts/the-project-i-wil-never-finish/evan-2021.png b/src/assets/blog/the-project-i-wil-never-finish/evan-2021.png
similarity index 100%
rename from static/images/posts/the-project-i-wil-never-finish/evan-2021.png
rename to src/assets/blog/the-project-i-wil-never-finish/evan-2021.png
diff --git a/static/images/posts/the-project-i-wil-never-finish/retrylife-2018.png b/src/assets/blog/the-project-i-wil-never-finish/retrylife-2018.png
similarity index 100%
rename from static/images/posts/the-project-i-wil-never-finish/retrylife-2018.png
rename to src/assets/blog/the-project-i-wil-never-finish/retrylife-2018.png
diff --git a/static/images/posts/unfinished-projects/commit_history.png b/src/assets/blog/unfinished-projects/commit_history.png
similarity index 100%
rename from static/images/posts/unfinished-projects/commit_history.png
rename to src/assets/blog/unfinished-projects/commit_history.png
diff --git a/static/images/posts/unfinished-projects/lang_stats.svg b/src/assets/blog/unfinished-projects/lang_stats.svg
similarity index 100%
rename from static/images/posts/unfinished-projects/lang_stats.svg
rename to src/assets/blog/unfinished-projects/lang_stats.svg
diff --git a/static/images/posts/unfinished-projects/private_to_md.py b/src/assets/blog/unfinished-projects/private_to_md.py
similarity index 100%
rename from static/images/posts/unfinished-projects/private_to_md.py
rename to src/assets/blog/unfinished-projects/private_to_md.py
diff --git a/static/images/posts/unfinished-projects/privates.json b/src/assets/blog/unfinished-projects/privates.json
similarity index 100%
rename from static/images/posts/unfinished-projects/privates.json
rename to src/assets/blog/unfinished-projects/privates.json
diff --git a/static/images/posts/vanilla-plus/minimap_2020.png b/src/assets/blog/vanilla-plus/minimap_2020.png
similarity index 100%
rename from static/images/posts/vanilla-plus/minimap_2020.png
rename to src/assets/blog/vanilla-plus/minimap_2020.png
diff --git a/static/images/posts/vanilla-plus/rei.png b/src/assets/blog/vanilla-plus/rei.png
similarity index 100%
rename from static/images/posts/vanilla-plus/rei.png
rename to src/assets/blog/vanilla-plus/rei.png
diff --git a/static/images/posts/vanilla-plus/sodium_settings.jpeg b/src/assets/blog/vanilla-plus/sodium_settings.jpeg
similarity index 100%
rename from static/images/posts/vanilla-plus/sodium_settings.jpeg
rename to src/assets/blog/vanilla-plus/sodium_settings.jpeg
diff --git a/static/images/posts/vortex-core/core-mpc-tool.png b/src/assets/blog/vortex-core/core-mpc-tool.png
similarity index 100%
rename from static/images/posts/vortex-core/core-mpc-tool.png
rename to src/assets/blog/vortex-core/core-mpc-tool.png
diff --git a/static/images/posts/vortex-core/core-mpc-webapp.png b/src/assets/blog/vortex-core/core-mpc-webapp.png
similarity index 100%
rename from static/images/posts/vortex-core/core-mpc-webapp.png
rename to src/assets/blog/vortex-core/core-mpc-webapp.png
diff --git a/static/images/posts/vortex-core/core.jpg b/src/assets/blog/vortex-core/core.jpg
similarity index 100%
rename from static/images/posts/vortex-core/core.jpg
rename to src/assets/blog/vortex-core/core.jpg
diff --git a/static/images/posts/weatherballoon/5a1826bd8b199.webp b/src/assets/blog/weatherballoon/5a1826bd8b199.webp
similarity index 100%
rename from static/images/posts/weatherballoon/5a1826bd8b199.webp
rename to src/assets/blog/weatherballoon/5a1826bd8b199.webp
diff --git a/static/images/posts/weatherballoon/927939789311107072-DOC0OKwVQAAYH6R.jpg b/src/assets/blog/weatherballoon/927939789311107072-DOC0OKwVQAAYH6R.jpg
similarity index 100%
rename from static/images/posts/weatherballoon/927939789311107072-DOC0OKwVQAAYH6R.jpg
rename to src/assets/blog/weatherballoon/927939789311107072-DOC0OKwVQAAYH6R.jpg
diff --git a/static/images/posts/weatherballoon/927942227749416960-DOC2hmHVwAI8aXW.jpg b/src/assets/blog/weatherballoon/927942227749416960-DOC2hmHVwAI8aXW.jpg
similarity index 100%
rename from static/images/posts/weatherballoon/927942227749416960-DOC2hmHVwAI8aXW.jpg
rename to src/assets/blog/weatherballoon/927942227749416960-DOC2hmHVwAI8aXW.jpg
diff --git a/static/images/posts/wheels-to-awards/w2a.png b/src/assets/blog/wheels-to-awards/w2a.png
similarity index 100%
rename from static/images/posts/wheels-to-awards/w2a.png
rename to src/assets/blog/wheels-to-awards/w2a.png
diff --git a/static/images/posts/wheels-to-awards/w2ainspo.jpg b/src/assets/blog/wheels-to-awards/w2ainspo.jpg
similarity index 100%
rename from static/images/posts/wheels-to-awards/w2ainspo.jpg
rename to src/assets/blog/wheels-to-awards/w2ainspo.jpg