https://www.botzenhart.io/ https://www.botzenhart.io/about https://www.botzenhart.io/services https://www.botzenhart.io/uses https://www.botzenhart.io/articles https://www.botzenhart.io/articles/creating-a-simple-redirect-service https://www.botzenhart.io/articles/automate-domain-redirects-with-nginx-on-digitalocean-using-taskfile https://www.botzenhart.io/articles/setting-up-rails-active-storage-with-scaleway-object-storage https://www.botzenhart.io/articles/how-to-deal-with-postgresql-backups-using-kamal https://www.botzenhart.io/articles/common-ruby-on-rails-i18n-active-record-attributes https://www.botzenhart.io/articles/wrapping-cleave-zen-former-cleave-js-with-hotwire-stimulus-to-format-date-and-time-input-fields-in-rails https://www.botzenhart.io/articles/quick-tip-vscode-sticky-scrolling https://www.botzenhart.io/articles/copy-to-clipboard-with-stimulus-using-the-clipboard-api https://www.botzenhart.io/articles/how-i-do-custom-key-lookup-with-rails-i18n https://www.botzenhart.io/articles/brew-autoupdate-how-i-avoid-outdated-brew-formulas https://www.botzenhart.io/articles/sending-emails-on-port-465-in-hetzner-cloud-requires-manual-interaction