41554 blogs · [ { "id": "01a0b68b-4cdf-7170-bcdf-c4f850f3d93c", "title": "Max Dietrich", "url": "https://mxd.codes", "published_at": "2026-09-07T05:20:44+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2dc4e5235", "title": "An E-Ink Homelab Dashboard on a Jailbroken Kindle", "url": "https://mxd.codes/articles/an-e-ink-homelab-dashboard-on-a-jailbroken-kindle", "published_at": "2026-08-16T00:00:00+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2dd0fe860", "title": "Self-hosted Analytics with Next.js and PostgreSQL", "url": "https://mxd.codes/articles/self-hosted-analytics-with-next-js-and-postgresql", "published_at": "2026-03-19T00:00:00+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2dd6422ad", "title": "Colota v1.1.0: Native Maps, Tracking Profiles, and Pause Zones", "url": "https://mxd.codes/articles/colota-v1-1-0-native-maps-tracking-profiles-pause-zones", "published_at": "2026-02-21T00:00:00+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012608943f", "title": "Gran Canaria 2026", "url": "https://mxd.codes/photos/gran-canaria-2026", "published_at": "2026-02-12T12:00:00+00:00" }, { "id": "01a087ab-1076-734b-99f7-330126aea02c", "title": "Croatia and Italy 2026", "url": "https://mxd.codes/photos/croatia-and-italy-2026", "published_at": "2025-09-22T14:44:59+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2de476f0d", "title": "Effortless Wildcard SSL: Secure Your Domain with Let's Encrypt, Nginx, Docker and Cloudflare DNS", "url": "https://mxd.codes/articles/effortless-wildcard-ssl-secure-your-domain-with-let-s-encrypt-nginx-docker-and-cloudflare-dns", "published_at": "2025-06-15T10:49:10+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2de70b9fa", "title": "How to Integrate Plausible Analytics in a Next.js App (Without Getting Blocked)", "url": "https://mxd.codes/articles/how-to-integrate-plausible-analytics-in-a-next-js-app-without-getting-blocked", "published_at": "2025-06-10T19:25:05+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2de8455b6", "title": "How to Create a Backup Script for PostgreSQL and MariaDB Containers on a Server", "url": "https://mxd.codes/articles/how-to-create-a-backup-script-for-postgre-sql-and-maria-db-containers-on-a-server", "published_at": "2025-02-02T15:59:44+00:00" }, { "id": "01a087ab-1076-734b-99f7-330126ed89a2", "title": "Farewell to winter and the cold!", "url": "https://mxd.codes/photos/farewell-to-winter-and-the-cold", "published_at": "2025-02-02T13:02:25+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2dedf8cfc", "title": "Enhancing Social Interactions: Implementing Webmentions with Next.js and PostgreSQL", "url": "https://mxd.codes/articles/enhancing-social-interactions-implementing-webmentions-with-next-js", "published_at": "2025-02-02T00:03:37+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2df1d700f", "title": "docker-staticmaps: A selfhosted Static Maps API", "url": "https://mxd.codes/articles/docker-staticmaps-a-selfhosted-version-to-generate-static-map-images", "published_at": "2024-12-28T19:02:25+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012870fa70", "title": "Bretagne 24", "url": "https://mxd.codes/photos/bretagne-24", "published_at": "2024-09-12T19:46:59+00:00" }, { "id": "01a087ab-1076-734b-99f7-330127db4b2a", "title": "Asturias", "url": "https://mxd.codes/photos/asturias", "published_at": "2024-05-12T19:50:34+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2df8e545d", "title": "Using Google Adsense with GatsbyJS", "url": "https://mxd.codes/articles/using-google-adsense-with-gatsby-js", "published_at": "2024-02-22T14:19:02+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2dfea8322", "title": "Mastering React and OpenLayers Integration: A Comprehensive Guide", "url": "https://mxd.codes/articles/how-to-create-a-web-map-with-open-layers-and-react", "published_at": "2024-02-22T14:18:16+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2dfec21fc", "title": "Geography and GIS Blogs", "url": "https://mxd.codes/articles/geography-and-gis-blogs", "published_at": "2024-02-22T12:05:03+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2e091bc2d", "title": "Dockerizing a Next.js Application with GitHub Actions", "url": "https://mxd.codes/articles/docker-ci-cd-for-nextjs-with-github-actions", "published_at": "2024-02-06T20:00:01+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2e0e1e6dd", "title": "Setting Up MapProxy with Docker and Serving Cached Tiles via Nginx", "url": "https://mxd.codes/articles/setting-up-map-proxy-with-docker-and-serving-cached-tiles-via-nginx", "published_at": "2024-01-28T19:30:03+00:00" }, { "id": "01a087ab-1076-734b-99f7-330128e5670b", "title": "Gran Canaria Workation", "url": "https://mxd.codes/photos/gran-canaria-workation", "published_at": "2024-01-25T09:47:34+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2e133e254", "title": "Optimizing images for Next.js sites with imgproxy and docker", "url": "https://mxd.codes/articles/optimizing-images-for-next-js-sites-with-imgproxy-and-docker", "published_at": "2024-01-12T12:14:29+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012976c466", "title": "USA Roadtrip", "url": "https://mxd.codes/photos/usa-roadtrip", "published_at": "2023-07-23T11:12:31+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2e2140737", "title": "Building a Table of Contents (TOC) from markdown for your React blog", "url": "https://mxd.codes/articles/building-a-table-of-contents-toc-from-markdown-for-your-react-blog", "published_at": "2023-02-27T23:53:50+00:00" }, { "id": "01a087ab-1076-734b-99f7-330129778b23", "title": "Cyprus Coffee Ride", "url": "https://mxd.codes/photos/cyprus-coffee-ride", "published_at": "2023-01-23T16:52:50+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2e24c8ac6", "title": "How to copy your Proxmox backups with AzCopy to Azure Storage Containers", "url": "https://mxd.codes/articles/synchronizing-your-proxmox-backups-with-az-copy-to-azure-storage-containers", "published_at": "2023-01-01T15:17:30+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012154fd19", "title": "Doing More with Docker", "url": "https://mxd.codes/links/doing-more-with-docker", "published_at": "2022-10-09T09:04:28+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012a0e87a0", "title": "Trans Dolomiti MTB Tour", "url": "https://mxd.codes/photos/trans-dolomiti-mtb-tour", "published_at": "2022-10-08T14:43:02+00:00" }, { "id": "01a087ab-1075-7034-9cb4-c9a2e2cf9858", "title": "Understanding Leaflet and React: A Guide to Web GIS Applications", "url": "https://mxd.codes/articles/how-to-create-web-maps-with-leaflet-react-and-functional-components", "published_at": "2022-09-23T16:38:42+00:00" }, { "id": "01a087ab-1076-734b-99f7-330114356dcd", "title": "Implementing a Custom Cookie Banner in Next.js", "url": "https://mxd.codes/articles/how-to-create-a-custom-cookie-banner-for-your-react-application", "published_at": "2022-09-23T16:33:29+00:00" }, { "id": "01a087ab-1076-734b-99f7-3301149d4eef", "title": "How to build a related posts component for your Next.js blog", "url": "https://mxd.codes/articles/how-to-build-a-related-posts-component-for-your-react-blog", "published_at": "2022-09-23T16:25:27+00:00" }, { "id": "01a087ab-1076-734b-99f7-330114b3c0e3", "title": "How to add Google Adsense to Next.js applications", "url": "https://mxd.codes/articles/how-to-add-google-adsense-to-next-js-applications", "published_at": "2022-09-23T16:20:33+00:00" }, { "id": "01a087ab-1076-734b-99f7-330114e676c0", "title": "How to deploy your GatsbyJS site on your own server", "url": "https://mxd.codes/articles/how-to-deploy-your-gatsby-site-on-your-own-server", "published_at": "2022-09-23T16:16:38+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012aacb258", "title": "Cap Formentor, Mallorca", "url": "https://mxd.codes/photos/cap-formentor-mallorca", "published_at": "2022-09-23T14:42:31+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012b32f99e", "title": "Alcúdia, Illes Balears, Mallorca, Spanien", "url": "https://mxd.codes/photos/alcudia-illes-balears-mallorca-spanien", "published_at": "2022-09-23T14:41:00+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011595ada7", "title": "How to create a Mapnik stylesheet for displaying any data from PostgreSQL/PostGIS", "url": "https://mxd.codes/articles/how-to-create-a-mapnik-stylesheet-for-displaying-any-data-from-postgre-sql-post-gis", "published_at": "2022-01-25T23:29:14+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012251615a", "title": "Tutorials for making 3D-looking maps with Blender and QGIS", "url": "https://mxd.codes/links/tutorials-for-making-3-d-looking-maps-with-blender-and-qgis", "published_at": "2021-10-04T23:04:11+00:00" }, { "id": "01a087ab-1076-734b-99f7-330116573a46", "title": "Location Tracking and Visualization with Colota, PostgreSQL, Martin Tile Server and MapLibre", "url": "https://mxd.codes/articles/location-tracking-with-colota-postgresql-martin-and-maplibre", "published_at": "2021-09-27T22:24:27+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012475f1df", "title": "Simple Image Placeholders with SVG", "url": "https://mxd.codes/links/simple-image-placeholders-with-svg", "published_at": "2021-07-30T20:54:53+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012b348588", "title": "Brünnstein", "url": "https://mxd.codes/photos/bruennstein-1", "published_at": "2021-07-21T18:31:27+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012d621a31", "title": "Hiking up the Brünnstein", "url": "https://mxd.codes/photos/hiking-up-the-bruennstein", "published_at": "2021-07-20T12:14:59+00:00" }, { "id": "01a087ab-1076-734b-99f7-3301228908d8", "title": "Checklist - The A11Y Project", "url": "https://mxd.codes/links/checklist-the-a11-y-project", "published_at": "2021-07-17T09:31:51+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012bae1d80", "title": "Kranzhorn 05/21", "url": "https://mxd.codes/photos/kranzhorn-05-21", "published_at": "2021-05-28T08:34:27+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012bb66bde", "title": "Bike trip in the Chiemgau Alps", "url": "https://mxd.codes/photos/bike-trip-in-the-chiemgau-alps", "published_at": "2021-05-18T08:37:52+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012c77c3a9", "title": "After work session with my new Scott Spark", "url": "https://mxd.codes/photos/after-work-session-with-my-new-scott-spark", "published_at": "2021-04-18T08:38:56+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012ceb03b3", "title": "First ride with my new spark", "url": "https://mxd.codes/photos/first-ride-with-my-new-spark", "published_at": "2021-04-16T08:36:28+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011662914e", "title": "Fetching and storing activities from Garmin Connect with Strapi and visualizing them with NextJS", "url": "https://mxd.codes/articles/fetching-and-storing-activities-from-garmin-connect-with-strapi-and-visualizing-them-with-next-js", "published_at": "2021-03-21T17:18:37+00:00" }, { "id": "01a087ab-1076-734b-99f7-330122f046c0", "title": "Running on my own", "url": "https://mxd.codes/links/running-on-my-own", "published_at": "2021-03-21T09:47:22+00:00" }, { "id": "01a087ab-1076-734b-99f7-330123ccd41a", "title": "Creating Accessible Forms", "url": "https://mxd.codes/links/creating-accessible-forms", "published_at": "2021-03-01T07:14:35+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012562e003", "title": "Using Webmentions in Eleventy", "url": "https://mxd.codes/links/using-webmentions-in-eleventy", "published_at": "2021-02-14T21:36:46+00:00" }, { "id": "01a087ab-1076-734b-99f7-330116ce4170", "title": "Syntax Highlighting with Prism.js and Next.js", "url": "https://mxd.codes/articles/syntax-highlighting-with-prism-and-next-js", "published_at": "2020-09-22T20:48:44+00:00" }, { "id": "01a087ab-1076-734b-99f7-330117365b87", "title": "Hosting NextJS on a private server using PM2 and Github webhooks as CI/CD", "url": "https://mxd.codes/articles/hosting-next-js-private-server-pm2-github-webhooks-ci-cd", "published_at": "2020-09-13T23:00:55+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011794bf04", "title": "Build and deploy your Gatsby site with Google Cloud Build to Firebase", "url": "https://mxd.codes/articles/build-and-deploy-your-gatsby-site-with-google-cloud-build-to-firebase", "published_at": "2020-08-31T21:07:00+00:00" }, { "id": "01a087ab-1076-734b-99f7-3301186b6346", "title": "Scaling and Cropping images using Python", "url": "https://mxd.codes/articles/scaling-and-cropping-images-using-python", "published_at": "2020-08-31T20:54:33+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011896a06c", "title": "Remote Sensing and Image Classification", "url": "https://mxd.codes/articles/remote-sensing-and-image-classification", "published_at": "2020-08-31T20:53:39+00:00" }, { "id": "01a087ab-1076-734b-99f7-3301191a7af0", "title": "Free FME-licence for private use", "url": "https://mxd.codes/articles/free-fme-licence-for-private-use", "published_at": "2020-08-31T20:49:43+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011a0edc16", "title": "GatsbyJS with CI/CD Pipeline via Codebuild", "url": "https://mxd.codes/articles/gatsbyjs-codebuild-ci-cd-pipeline", "published_at": "2020-08-31T20:46:00+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011ab704eb", "title": "GIS- and Geo-Database Management System options", "url": "https://mxd.codes/articles/gis-and-geo-database-management-system-options", "published_at": "2020-08-31T20:37:34+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011aff2091", "title": "GIS Applications - Which GIS Applications are there?", "url": "https://mxd.codes/articles/gis-applications-which-gis-applications-are-there", "published_at": "2020-08-31T20:29:09+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011b3bc78a", "title": "GIS volunteering - Make the world a better place with GIS", "url": "https://mxd.codes/articles/gis-volunteering-make-the-world-a-better-place-with-gis", "published_at": "2020-08-31T20:24:44+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011c21f04b", "title": "Geo and GIS Podcasts to stay up to date", "url": "https://mxd.codes/articles/geo-and-gis-podcasts-to-stay-up-to-date", "published_at": "2020-08-31T20:17:05+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011c3e51c0", "title": "Free, Open-Source and proprietary GIS software options", "url": "https://mxd.codes/articles/gis-software-options-free-open-source-and-proprietary", "published_at": "2020-08-31T20:14:09+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011cde225e", "title": "How to create a Mailchimp newsletter sign-up-form for your Gatsby Site", "url": "https://mxd.codes/articles/how-to-create-a-mailchimp-newsletter-sign-up-form-for-your-gatsby-site", "published_at": "2020-08-31T20:11:17+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011d028919", "title": "How to create a web-map with OpenLayers", "url": "https://mxd.codes/articles/how-to-create-a-web-map-with-open-layers", "published_at": "2020-08-31T19:50:29+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011dcae54c", "title": "Open-Source Web-GIS Applications", "url": "https://mxd.codes/articles/open-source-web-gis-applications", "published_at": "2020-08-30T20:53:38+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011e177349", "title": "Download OpenStreetMap data as Shapefiles", "url": "https://mxd.codes/articles/download-open-street-map-data-as-shapefiles", "published_at": "2020-08-30T20:51:51+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011e5fef97", "title": "Export QGIS layers as images with PyQGIS", "url": "https://mxd.codes/articles/export-qgis-layers-as-images-with-py-qgis", "published_at": "2020-08-30T20:46:25+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011efaeb42", "title": "Access High-Resolution Satellite Imagery with Ease - Satellite Imagery Download Options", "url": "https://mxd.codes/articles/satellite-imagery-download-high-resolution", "published_at": "2020-08-30T16:28:00+00:00" }, { "id": "01a087ab-1076-734b-99f7-33011fd22eee", "title": "Host a static website with your own domain, AWS S3 and CloudFront", "url": "https://mxd.codes/articles/host-a-static-website-with-your-own-domain-aws-s3-and-cloud-front", "published_at": "2020-08-30T16:23:25+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012084eeae", "title": "GIS vs CAD - The difference between GIS and CAD", "url": "https://mxd.codes/articles/gis-vs-cad-the-difference-between-gis-and-cad", "published_at": "2020-08-30T13:50:00+00:00" }, { "id": "01a087ab-1076-734b-99f7-3301208e7fff", "title": "What is a shapefile? .shp, .dbf and .shx", "url": "https://mxd.codes/articles/what-is-a-shapefile-shp-dbf-and-shx", "published_at": "2020-08-30T13:47:06+00:00" }, { "id": "01a087ab-1076-734b-99f7-3301213b0c7c", "title": "Understanding Geodata", "url": "https://mxd.codes/articles/what-are-geodata", "published_at": "2020-08-30T13:45:32+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012d0af3cd", "title": "Motorbike tour through South Tyrol", "url": "https://mxd.codes/photos/motorbike-tour-through-south-tyrol", "published_at": "2020-08-18T08:33:19+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012d8b18e4", "title": "Ski touring", "url": "https://mxd.codes/photos/ski-touring-in-inntal", "published_at": "2019-02-18T08:31:08+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012dc62b44", "title": "Motorcycle tour to walchensee", "url": "https://mxd.codes/photos/motorcycle-tour-to-walchensee", "published_at": "2017-07-18T08:32:28+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012e1facd4", "title": "Road Cycling", "url": "https://mxd.codes/photos/road-cycling", "published_at": "2017-03-18T08:31:46+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012e510e7b", "title": "Highfield Festival 2016", "url": "https://mxd.codes/photos/highfield-festival-2016", "published_at": "2016-07-18T08:35:00+00:00" }, { "id": "01a087ab-1076-734b-99f7-33012ed2eb48", "title": "Summer sunset", "url": "https://mxd.codes/photos/summer-sunset", "published_at": "2014-07-18T08:30:22+00:00" } ] posts Claim your blog
Back to Max Dietrich - Personal Website • Max Dietrich
Blog · corpus.blog/blogs/mxd.codes/posts

Max Dietrich - Personal Website • Max Dietrich

mxd.codes

2026

2025

2024

2023

2022

2021

2020

2019

2017

2016

2014