# Georg Ledermann, Full Stack Developer > Persönliche Website von Georg Ledermann: Full-Stack-Entwickler mit über 25 Jahren Erfahrung, spezialisiert auf Ruby on Rails und moderne Web-Anwendungen. Enthält Portfolio, Lebenslauf und einen technischen Blog. Jede Inhaltsseite ist auch als sauberes Markdown unter der jeweiligen URL mit angehängtem `.md` verfügbar. ## Kernseiten - [Übersicht (Startseite)](/index.md): Profil, Leistungen, Arbeitsweise und ausgewählte Projekte - [Projekte](/projekte/): Kunden- und Open-Source-Projekte - [Lebenslauf](/cv/): Beruflicher Werdegang - [Kontakt & Impressum](/kontakt/): Kontaktmöglichkeiten ## Blog - [Coding time visualization](/blog/2021/10/17/coding-time-visualization.md): The language chart on my homepage is not a wish list. It comes straight out of WakaTime and shows what my editor really saw last week. - [Photovoltaik-Dashboard als Web-Applikation](/blog/2021/02/03/photovoltaik-dashboard-als-web-applikation.md): Meine Solaranlage sammelt im Minutentakt Hunderte Messwerte, aber die Hersteller-App machte zu wenig daraus. Also habe ich mein eigenes Echtzeit-Dashboard dafür gebaut. - [Progressive image loading with BlurHash](/blog/2020/08/01/progressive-image-loading-with-blurhash.md): A whole photo, squeezed into a few dozen characters that render instantly as a blurred preview. Rails does the encoding, Vue.js the decoding. - [Building Docker images, the performant way](/blog/2020/01/29/building-docker-images-the-performant-way.md): Two to three times faster CI builds, and the trick is not clever caching. It is baking every dependency into a prepared base image once. - [Using UltraHook to receive webhooks at development](/blog/2019/03/17/using-ultrahook-to-receive-webhooks-at-development.md): Testing webhooks locally is tricky: the sender cannot reach your laptop behind a firewall. UltraHook provides a free tunnel for incoming POST requests, so you can debug them on your own machine. - [Updating Docker services with Portainer webhooks](/blog/2018/09/17/updating-docker-services-with-portainer-webhooks.md): Deploying a new Docker image by hand means logging in, pulling, restarting. With a Portainer webhook, every successful CI build deploys itself. - [Swagger with Rails: Know your options](/blog/2018/06/21/swagger-with-rails-know-your-options.md): Hand-written API docs are already wrong by the time you merge. Three Rails gems generate them from the source instead, and they disagree about how. - [Exif analyzer for Active Storage](/blog/2018/05/15/exif-analyzer-for-active-storage.md): Most photos your users upload know exactly where they were taken. Active Storage throws that away, so I wrote a small analyzer that keeps it. - [Dockerize and configure a JavaScript single-page application](/blog/2018/04/27/dockerize-and-configure-javascript-single-page-application.md): Packing a compiled single-page app into a Docker image is easy. The harder part is making one image behave differently in staging and production without rebuilding it. - [Dockerize Rails, the lean way](/blog/2018/04/19/dockerize-rails-the-lean-way.md): My Rails Docker image started at 1.6 GB. With an Alpine base and multi-stage builds I got it down to 329 MB. - [Switching from Docker Hub to GitLab Container Registry](/blog/2018/04/05/switching-from-docker-hub-to-gitlab-container-registry.md): Docker Hub had become the bottleneck in my pipeline: slow builds and large files shuffled across the Atlantic. Moving to GitLab's container registry fixed both. - [Migration from Docker Cloud to Portainer](/blog/2018/03/29/migration-from-docker-cloud-to-portainer.md): Docker shut down Docker Cloud, leaving more than fifty of my containers without a home. I moved them to Portainer: lightweight, self-hosted, and easier to switch to than I expected. - [Starting a blog – again](/blog/2018/03/28/starting-a-blog-again.md): This is not my first blog; the earlier ones quietly faded away. This time I want a lasting place to write about software development and what I learn along the way. ## Optional - [Alle Blog-Artikel in einer Datei](/llms-full.txt): Volltext aller Artikel als konkateniertes Markdown - [RSS-Feed](/feed.xml): Atom-Feed der neuesten Artikel