Powers https://chuhlomin.com static site
npx skills add https://github.com/chuhlomin/chuhlomin.com --skill add-to-wishlistInstall this skill with the CLI and start using the SKILL.md workflow in your workspace.
Powers https://chuhlomin.com

.
├── content
│ ├── blog
│ │ ├── 2020
│ │ │ └── castty.md
│ │ ├── 2021
│ │ ├── 2022
│ │ ├── 2023
│ │ └── index.gohtml
│ ├── experiments
│ ├── fonts
│ ├── img
│ ├── styles.css
│ └── index.gohtml
├── generator # Go app
├── i18n # translations
└── templates # Go templates used by generator
Pre-requisites:
# Start MeiliSearch
docker compose up search -d
# In a separate terminal start Caddy
caddy run
# Build static site and update search index
# (will create `output` directory with generated static files)
make build
Example output:
Building generator...
Running generator...
INFO Starting
INFO Waiting for images to be processed...
INFO Waiting for search index to be updated...
INFO Finished in 4.174840792s
Open https://local.chuhlomin.com
See main.go for more configuration options.
Environment differencies:
| Local | Production | |
|---|---|---|
| Host | https://local.chuhlomin.com | https://chuhlomin.com |
| Search host | https://local.chuhlomin.com/blog/search | https://search.chuhlomin.com |
https://developers.cloudflare.com/pages/platform/serving-pages/
If an HTML file is found with a matching path to the current route requested,
Pages will serve it. Pages will also redirect HTML pages to their extension-less
counterparts: for instance, /contact.html will be redirected to /contact,
and /about/index.html will be redirected to /about/.
To avoid redundant redirects all links should be without .html extension.
See REMOVE_HTML_EXT in main.go and link in templates.go.
To support links to pages in different languages, these Transform Rules should be added to CloudFlare Pages:
(http.request.uri.query eq "lang=ru" and http.request.uri.path in {"/" "/blog" "/blog/2020" "/blog/2021" "/blog/2022" "/blog/2023"})→ concat(http.request.uri.path, "/index_ru")(http.request.uri.query eq "lang=ru" and not http.request.uri.path in {"/" "/blog" "/blog/2020" "/blog/2021" "/blog/2022" "/blog/2023" "/blog/feed.atom"}) → concat(http.request.uri.path, "_ru")It's an equivalent to this Caddy config:
@langRu {
query lang=ru
file {
try_files {path}/index_ru.html {path}_ru.html
}
}
rewrite @langRu {http.matchers.file.relative}
The request flow for new links:
/blog/2020/castty?lang=ru/blog/2020/castty_ru/blog/2020/castty_ru.htmlTo redirect old links to links without .html extension, these _redirects should be added to CloudFlare Pages:
/index.html / 301
/index.html_ru /?lang=ru 301
/blog/index.html /blog 301
/blog/index.html_ru /blog?lang=ru 301
/blog/2020/castty.html /blog/2020/castty 301
/blog/2020/castty.html_ru /blog/2020/castty?lang=ru 301
The request flow for old links:
/blog/2020/castty.html?lang=ru/blog/2020/castty.html_ru_redirects changes it to /blog/2020/castty?lang=ru/blog/2020/castty_ru/blog/2020/castty_ru.htmlOther redirects handle year pages.
/blog/2020 /blog/#2020 301
/blog/2020/ /blog/#2020 301
/blog/2020/_ru /blog?lang=ru#2020 302
/blog/2020/index_ru /blog?lang=ru#2020 302
Example redirects:
Redirects to address the case when I typed my domain and then realized
that I forgot to add subdomain:
/grid https://grid.chuhlomin.com 302
/calendar https://calendar.chuhlomin.com 302
/transiter https://transiter.app 302
Lastly, there just handly URLs to share:
/github https://github.com/chuhlomin 302
/instagram https://www.instagram.com/chuhlomin 302
To support language-specific feeds, this Transform Rules should be added to CloudFlare Pages:
(http.request.uri.query eq "lang=ru" and http.request.uri.path eq "/blog/feed.atom") → blog/feed_ru.atom
Example of the feed: /blog/feed.atom?lang=ru