diff --git a/themes/geekboot/layouts/404.html b/themes/geekboot/layouts/404.html
index 4b2b32064..27ed141e9 100644
--- a/themes/geekboot/layouts/404.html
+++ b/themes/geekboot/layouts/404.html
@@ -34,17 +34,34 @@
Page not found
The page you're looking for couldn't be found.
Only currently maintained versions of Crossplane are documented. Try
- looking one of the following sections-
+ looking at one of the following sections:
+ {{ $sorted_list := partial "utils/sorted-versions" . }}
+
+ Documentation Versions:
+ {{ range $sorted_list }}
+ {{ $versionPage := $.Site.GetPage (printf "v%s" .) | default ($.Site.GetPage .) }}
+ {{ with $versionPage }}
+ {{ if ne .Page.Params.version "master" }}v{{ end }}{{ .Page.Params.version }}
+ {{ if eq .Page.Params.version $.Site.Params.latest }}
+ Latest
+ {{ end }}
+ {{ if eq .Page.Params.version "master" }}
+ (unreleased upcoming version)
+ {{ end }}
+
+ {{ end }}
+ {{ end }}
+
+
+ Looking for an older version? Archived versions are available as tags in the GitHub repository (e.g., v1.19-archive, v1.18-archive).
+
+
+ Other Resources:
{{ range .Site.Sections }}
- {{ if and (.Page.Params.version) (ne .Page.Params.version "0") (ne .Page.Params.version "master") }}
- v{{ .Page.Params.version }}
- {{ else }}
- {{ if (eq .Page.Params.version "master") }}
- {{ else }}
- {{ .Title }}
+ {{ if and (not .Page.Params.hidden) (eq .Page.Params.version "0") }}
+ {{ .Title }}
{{ end }}
- {{ end }}
{{ end }}
diff --git a/themes/geekboot/layouts/partials/utils/sorted-versions.html b/themes/geekboot/layouts/partials/utils/sorted-versions.html
new file mode 100644
index 000000000..5b68ae716
--- /dev/null
+++ b/themes/geekboot/layouts/partials/utils/sorted-versions.html
@@ -0,0 +1,34 @@
+{{ $majordict := dict }}
+{{ $majorlist := slice }}
+{{ $sorted_list := slice }}
+
+{{/* Collect all versions and parse semver for sorting */}}
+{{ range .Site.Sections }}
+ {{/* Skip versions marked as hidden */}}
+ {{ if not .Page.Params.hidden }}
+ {{ if eq .Page.Params.version "master" }}
+ {{$sorted_list = $sorted_list | append "master" }}
+ {{ else if and (.Page.Params.version) (ne .Page.Params.version "0") }}
+ {{ $splitver := split .Page.Params.version "." }}
+ {{ if eq (len $splitver) 2 }}
+ {{ $verlist := (index $majordict (index $splitver 0)) }}
+ {{ $verlist = $verlist | append (index $splitver 1) }}
+ {{ $majordict = merge $majordict (dict (index $splitver 0) $verlist) }}
+ {{ $majorlist = $majorlist | append (index $splitver 0) }}
+ {{ end }}
+ {{ end }}
+ {{ end }}
+{{ end }}
+
+{{/* Sort versions by semver (descending) and prepend to sorted_list */}}
+{{ $semver_sorted := slice }}
+{{ range sort ($majorlist | uniq) "value" "desc" }}
+ {{ $majorver := . }}
+ {{ range sort (index $majordict .) "value" "desc" }}
+ {{$semver_sorted = $semver_sorted | append (printf "%s.%s" $majorver .) }}
+ {{ end }}
+{{ end }}
+{{/* Append semver sorted versions after master */}}
+{{ $sorted_list = $sorted_list | append $semver_sorted }}
+
+{{ return $sorted_list }}
diff --git a/themes/geekboot/layouts/partials/version-dropdown-menu.html b/themes/geekboot/layouts/partials/version-dropdown-menu.html
index 168a516b4..6fa1b7272 100644
--- a/themes/geekboot/layouts/partials/version-dropdown-menu.html
+++ b/themes/geekboot/layouts/partials/version-dropdown-menu.html
@@ -1,34 +1,6 @@
-{{ $versionList := slice }}
-{{ $majordict := dict }}
-{{ $majorlist := slice }}
-{{ $sorted_list := slice }}
+{{ $sorted_list := partial "utils/sorted-versions" . }}
{{ $cur_ver := .Page.Params.version | default .Site.Params.latest }}
-
-{{ range .Site.Sections }}
- {{/* Skip versions marked as hidden */}}
- {{ if not .Page.Params.hidden }}
- {{ if eq .Page.Params.version "master" }}
- {{$sorted_list = $sorted_list | append "master" }}
- {{ else if ne .Page.Params.version nil }}
- {{ $splitver := split .Page.Params.version "." }}
- {{ if eq (len $splitver) 2 }}
- {{ $verlist := (index $majordict (index $splitver 0)) }}
- {{ $verlist = $verlist | append (index $splitver 1) }}
- {{ $majordict = merge $majordict (dict (index $splitver 0) $verlist) }}
- {{ $majorlist = $majorlist | append (index $splitver 0) }}
- {{ end }}
- {{ end }}
- {{ end }}
-{{ end }}
-
-{{ range sort ($majorlist | uniq) "value" "desc" }}
- {{ $majorver := . }}
- {{ range sort (index $majordict .) "value" "desc" }}
- {{$sorted_list = $sorted_list | append (printf "%s.%s" $majorver .) }}
- {{ end }}
-{{ end }}
-