Decided to move my blogs from Ghost to using Hugo and generate a static website for the content. The reason for this was I don’t use all the fancy features of Ghost. I don’t do newsletters and Ghost requires an email account if people want to sign up for notifications. Plus I have to run a database for the content.
I started with creating an new directory and fired up Claude and started with this initial prompt.
would like to take my content from https://blog.geoffcorey.com and add it to this hugo project
Claude cranked through and setup Hugo and created all the posts. Next, I wanted all my image content local as well.
I would like all my image from blog.geoffcorey.com local and stored in static/images directory
Next I wanted to change the theme to use dream
I would like to use the Hugo theme “dream”
“dream” adds another piece of meta data to the posts and I wanted that updated as well
Update the posts with “cover” metadata with the feature image from the corresponding article from blog.geoffcorey.com
Next I needed to move the about page and patent page
I would create a page “about” from https://blog.geoffcorey.com/about-me/
and finally
I would like to create “patent” page from https://blog.geoffcorey.com/patents/
Next I generated the static site with hugo build and copy public directory to
my caddy data directory as blog.geoffcorey.com and update Caddyfile. I also
added redirects for the old URL from Ghost to Hugo since Hugo will be /posts/
geoffcorey.com {
redir https://blog.geoffcorey.com
}
*.geoffcorey.com {
tls {
dns cloudflare <REDACTED>
}
@blog host blog.geoffcorey.com
handle @blog {
redir /amdgpu-ring-timeout-minecraft-workaround-using-mesa-zink/ /posts/amdgpu-ring-timeout-minecraft-workaround-using-mesa-zink/
redir /neovim-ai-coding-assistant-w-avante/ /posts/neovim-ai-coding-assistant-w-avante/
redir /best-business-books-for-inspiration/ /posts/best-business-books-for-inspiration/
redir /lazyvim-neotest-mocha-and-overcoming-no-test-found/ /posts/lazyvim-neotest-mocha-and-overcoming-no-test-found/
redir /caddy-wildcard-certs-and-ghost/ /posts/caddy-wildcard-certs-and-ghost/
redir /lazyvim-setup-for-neotest-and-jest/ /posts/lazyvim-setup-for-neotest-and-jest/
redir /setup-a-self-hosted-ghost-blog-with-docker-and-caddy/ /posts/setup-a-self-hosted-ghost-blog-with-docker-and-caddy/
redir /coding-with-claude-ai/ /posts/coding-with-claude-ai/
redir /lazyvim-setup-for-neotest-and-native-nodejs-test-runner/ /posts/lazyvim-setup-for-neotest-and-native-nodejs-test-runner/
redir /snowflake-timestamp-ntz-to-utc-with-offset/ /posts/snowflake-timestamp-ntz-to-utc-with-offset/
redir /gemini-coding/ /posts/gemini-coding/
redir /linux-amdgpu-ring-gfx-timeout/ /posts/linux-amdgpu-ring-gfx-timeout/
redir /migrating-from-ghost-to-hugo-using-claude/ /posts/migrating-from-ghost-to-hugo-using-claude/
root * /data/blog.geoffcorey.com
file_server
encode zstd gzip
}
}