From 3801e0ba0d6cbec5b8fdf0e0347c72d8b8349ef9 Mon Sep 17 00:00:00 2001 From: logikonline Date: Mon, 16 Mar 2026 00:12:11 -0400 Subject: [PATCH] feat(pages): group release downloads by platform Automatically categorize release attachments into Windows, macOS, Linux, Android, iOS, and Other sections based on filename patterns and extensions. Uses heuristics like file extensions (.exe, .dmg, .deb, .apk, .ipa), platform keywords (windows, darwin, linux, android, ios), and common naming conventions. Improves download UX by organizing files into logical platform groups with appropriate icons. Applies to all four page templates. --- templates/pages/bold-marketing.tmpl | 70 ++++++++++++++++++++++++--- templates/pages/minimalist-docs.tmpl | 70 ++++++++++++++++++++++++--- templates/pages/open-source-hero.tmpl | 70 ++++++++++++++++++++++++--- templates/pages/saas-conversion.tmpl | 70 ++++++++++++++++++++++++--- 4 files changed, 252 insertions(+), 28 deletions(-) diff --git a/templates/pages/bold-marketing.tmpl b/templates/pages/bold-marketing.tmpl index fb4a3667df..a743ec3b83 100644 --- a/templates/pages/bold-marketing.tmpl +++ b/templates/pages/bold-marketing.tmpl @@ -1296,15 +1296,71 @@

v{{.LatestReleaseTag}}

Get the latest release

-
- {{range .LatestRelease.Attachments}} - - {{svg "octicon-download" 16}} - {{.Name}} - {{FileSize .Size}} - + {{$windowsFiles := newSlice}}{{$macosFiles := newSlice}}{{$linuxFiles := newSlice}}{{$androidFiles := newSlice}}{{$iosFiles := newSlice}}{{$otherFiles := newSlice}} + {{range $att := .LatestRelease.Attachments}} + {{$name := StringUtils.ToLower $att.Name}} + {{if or (StringUtils.Contains $name "android") (StringUtils.HasSuffix $name ".apk") (StringUtils.HasSuffix $name ".aab") (StringUtils.HasSuffix $name ".xapk")}} + {{$androidFiles = Append $androidFiles $att}} + {{else if or (StringUtils.Contains $name "ios") (StringUtils.Contains $name "iphone") (StringUtils.Contains $name "ipad") (StringUtils.HasSuffix $name ".ipa")}} + {{$iosFiles = Append $iosFiles $att}} + {{else if or (StringUtils.Contains $name "windows") (StringUtils.Contains $name "win64") (StringUtils.Contains $name "win32") (StringUtils.Contains $name "-win.") (StringUtils.Contains $name "_win.") (StringUtils.Contains $name "-win-") (StringUtils.Contains $name "_win_") (StringUtils.HasSuffix $name ".exe") (StringUtils.HasSuffix $name ".msi") (StringUtils.HasSuffix $name ".msix") (StringUtils.HasSuffix $name ".msixbundle") (StringUtils.HasSuffix $name ".appx") (StringUtils.HasSuffix $name ".appxbundle")}} + {{$windowsFiles = Append $windowsFiles $att}} + {{else if or (StringUtils.Contains $name "darwin") (StringUtils.Contains $name "macos") (StringUtils.Contains $name "-mac.") (StringUtils.Contains $name "_mac.") (StringUtils.Contains $name "-mac-") (StringUtils.Contains $name "_mac_") (StringUtils.Contains $name "osx") (StringUtils.HasSuffix $name ".dmg") (StringUtils.HasSuffix $name ".pkg")}} + {{$macosFiles = Append $macosFiles $att}} + {{else if or (StringUtils.Contains $name "linux") (StringUtils.Contains $name "-lin.") (StringUtils.Contains $name "_lin.") (StringUtils.Contains $name "-lin-") (StringUtils.Contains $name "_lin_") (StringUtils.HasSuffix $name ".deb") (StringUtils.HasSuffix $name ".rpm") (StringUtils.HasSuffix $name ".appimage") (StringUtils.HasSuffix $name ".flatpak") (StringUtils.HasSuffix $name ".snap")}} + {{$linuxFiles = Append $linuxFiles $att}} + {{else}} + {{$otherFiles = Append $otherFiles $att}} + {{end}} {{end}} + {{if $windowsFiles}} +
+

{{svg "octicon-device-desktop" 16}} Windows

+
+ {{end}} + {{if $macosFiles}} +
+

{{svg "octicon-device-desktop" 16}} macOS

+ +
+ {{end}} + {{if $linuxFiles}} +
+

{{svg "octicon-terminal" 16}} Linux

+ +
+ {{end}} + {{if $androidFiles}} +
+

{{svg "octicon-device-mobile" 16}} Android

+ +
+ {{end}} + {{if $iosFiles}} +
+

{{svg "octicon-device-mobile" 16}} iOS

+ +
+ {{end}} + {{if $otherFiles}} +
+

{{svg "octicon-file" 16}} Other

+ +
+ {{end}}
{{end}} diff --git a/templates/pages/minimalist-docs.tmpl b/templates/pages/minimalist-docs.tmpl index 3f9b7a6229..096c7a9b34 100644 --- a/templates/pages/minimalist-docs.tmpl +++ b/templates/pages/minimalist-docs.tmpl @@ -1179,15 +1179,71 @@
Downloads

v{{.LatestReleaseTag}}

Get the latest release

-
- {{range .LatestRelease.Attachments}} - - {{svg "octicon-download" 16}} - {{.Name}} - {{FileSize .Size}} - + {{$windowsFiles := newSlice}}{{$macosFiles := newSlice}}{{$linuxFiles := newSlice}}{{$androidFiles := newSlice}}{{$iosFiles := newSlice}}{{$otherFiles := newSlice}} + {{range $att := .LatestRelease.Attachments}} + {{$name := StringUtils.ToLower $att.Name}} + {{if or (StringUtils.Contains $name "android") (StringUtils.HasSuffix $name ".apk") (StringUtils.HasSuffix $name ".aab") (StringUtils.HasSuffix $name ".xapk")}} + {{$androidFiles = Append $androidFiles $att}} + {{else if or (StringUtils.Contains $name "ios") (StringUtils.Contains $name "iphone") (StringUtils.Contains $name "ipad") (StringUtils.HasSuffix $name ".ipa")}} + {{$iosFiles = Append $iosFiles $att}} + {{else if or (StringUtils.Contains $name "windows") (StringUtils.Contains $name "win64") (StringUtils.Contains $name "win32") (StringUtils.Contains $name "-win.") (StringUtils.Contains $name "_win.") (StringUtils.Contains $name "-win-") (StringUtils.Contains $name "_win_") (StringUtils.HasSuffix $name ".exe") (StringUtils.HasSuffix $name ".msi") (StringUtils.HasSuffix $name ".msix") (StringUtils.HasSuffix $name ".msixbundle") (StringUtils.HasSuffix $name ".appx") (StringUtils.HasSuffix $name ".appxbundle")}} + {{$windowsFiles = Append $windowsFiles $att}} + {{else if or (StringUtils.Contains $name "darwin") (StringUtils.Contains $name "macos") (StringUtils.Contains $name "-mac.") (StringUtils.Contains $name "_mac.") (StringUtils.Contains $name "-mac-") (StringUtils.Contains $name "_mac_") (StringUtils.Contains $name "osx") (StringUtils.HasSuffix $name ".dmg") (StringUtils.HasSuffix $name ".pkg")}} + {{$macosFiles = Append $macosFiles $att}} + {{else if or (StringUtils.Contains $name "linux") (StringUtils.Contains $name "-lin.") (StringUtils.Contains $name "_lin.") (StringUtils.Contains $name "-lin-") (StringUtils.Contains $name "_lin_") (StringUtils.HasSuffix $name ".deb") (StringUtils.HasSuffix $name ".rpm") (StringUtils.HasSuffix $name ".appimage") (StringUtils.HasSuffix $name ".flatpak") (StringUtils.HasSuffix $name ".snap")}} + {{$linuxFiles = Append $linuxFiles $att}} + {{else}} + {{$otherFiles = Append $otherFiles $att}} {{end}} + {{end}} + {{if $windowsFiles}} +
+

{{svg "octicon-device-desktop" 14}} Windows

+
+ {{end}} + {{if $macosFiles}} +
+

{{svg "octicon-device-desktop" 14}} macOS

+ +
+ {{end}} + {{if $linuxFiles}} +
+

{{svg "octicon-terminal" 14}} Linux

+ +
+ {{end}} + {{if $androidFiles}} +
+

{{svg "octicon-device-mobile" 14}} Android

+ +
+ {{end}} + {{if $iosFiles}} +
+

{{svg "octicon-device-mobile" 14}} iOS

+ +
+ {{end}} + {{if $otherFiles}} +
+

{{svg "octicon-file" 14}} Other

+ +
+ {{end}}
{{end}} diff --git a/templates/pages/open-source-hero.tmpl b/templates/pages/open-source-hero.tmpl index da715f42b4..76683277d4 100644 --- a/templates/pages/open-source-hero.tmpl +++ b/templates/pages/open-source-hero.tmpl @@ -1171,15 +1171,71 @@

Download v{{.LatestReleaseTag}}

Get the latest release

-
- {{range .LatestRelease.Attachments}} - - {{svg "octicon-download" 16}} - {{.Name}} - {{FileSize .Size}} - + {{$windowsFiles := newSlice}}{{$macosFiles := newSlice}}{{$linuxFiles := newSlice}}{{$androidFiles := newSlice}}{{$iosFiles := newSlice}}{{$otherFiles := newSlice}} + {{range $att := .LatestRelease.Attachments}} + {{$name := StringUtils.ToLower $att.Name}} + {{if or (StringUtils.Contains $name "android") (StringUtils.HasSuffix $name ".apk") (StringUtils.HasSuffix $name ".aab") (StringUtils.HasSuffix $name ".xapk")}} + {{$androidFiles = Append $androidFiles $att}} + {{else if or (StringUtils.Contains $name "ios") (StringUtils.Contains $name "iphone") (StringUtils.Contains $name "ipad") (StringUtils.HasSuffix $name ".ipa")}} + {{$iosFiles = Append $iosFiles $att}} + {{else if or (StringUtils.Contains $name "windows") (StringUtils.Contains $name "win64") (StringUtils.Contains $name "win32") (StringUtils.Contains $name "-win.") (StringUtils.Contains $name "_win.") (StringUtils.Contains $name "-win-") (StringUtils.Contains $name "_win_") (StringUtils.HasSuffix $name ".exe") (StringUtils.HasSuffix $name ".msi") (StringUtils.HasSuffix $name ".msix") (StringUtils.HasSuffix $name ".msixbundle") (StringUtils.HasSuffix $name ".appx") (StringUtils.HasSuffix $name ".appxbundle")}} + {{$windowsFiles = Append $windowsFiles $att}} + {{else if or (StringUtils.Contains $name "darwin") (StringUtils.Contains $name "macos") (StringUtils.Contains $name "-mac.") (StringUtils.Contains $name "_mac.") (StringUtils.Contains $name "-mac-") (StringUtils.Contains $name "_mac_") (StringUtils.Contains $name "osx") (StringUtils.HasSuffix $name ".dmg") (StringUtils.HasSuffix $name ".pkg")}} + {{$macosFiles = Append $macosFiles $att}} + {{else if or (StringUtils.Contains $name "linux") (StringUtils.Contains $name "-lin.") (StringUtils.Contains $name "_lin.") (StringUtils.Contains $name "-lin-") (StringUtils.Contains $name "_lin_") (StringUtils.HasSuffix $name ".deb") (StringUtils.HasSuffix $name ".rpm") (StringUtils.HasSuffix $name ".appimage") (StringUtils.HasSuffix $name ".flatpak") (StringUtils.HasSuffix $name ".snap")}} + {{$linuxFiles = Append $linuxFiles $att}} + {{else}} + {{$otherFiles = Append $otherFiles $att}} + {{end}} {{end}} + {{if $windowsFiles}} +
+

{{svg "octicon-device-desktop" 16}} Windows

+
+ {{end}} + {{if $macosFiles}} +
+

{{svg "octicon-device-desktop" 16}} macOS

+ +
+ {{end}} + {{if $linuxFiles}} +
+

{{svg "octicon-terminal" 16}} Linux

+ +
+ {{end}} + {{if $androidFiles}} +
+

{{svg "octicon-device-mobile" 16}} Android

+ +
+ {{end}} + {{if $iosFiles}} +
+

{{svg "octicon-device-mobile" 16}} iOS

+ +
+ {{end}} + {{if $otherFiles}} +
+

{{svg "octicon-file" 16}} Other

+ +
+ {{end}}
{{end}} diff --git a/templates/pages/saas-conversion.tmpl b/templates/pages/saas-conversion.tmpl index d02bc6039d..cc898c1c72 100644 --- a/templates/pages/saas-conversion.tmpl +++ b/templates/pages/saas-conversion.tmpl @@ -1297,15 +1297,71 @@

Download v{{.LatestReleaseTag}}

Get the latest release

-
- {{range .LatestRelease.Attachments}} - - {{svg "octicon-download" 16}} - {{.Name}} - {{FileSize .Size}} - + {{$windowsFiles := newSlice}}{{$macosFiles := newSlice}}{{$linuxFiles := newSlice}}{{$androidFiles := newSlice}}{{$iosFiles := newSlice}}{{$otherFiles := newSlice}} + {{range $att := .LatestRelease.Attachments}} + {{$name := StringUtils.ToLower $att.Name}} + {{if or (StringUtils.Contains $name "android") (StringUtils.HasSuffix $name ".apk") (StringUtils.HasSuffix $name ".aab") (StringUtils.HasSuffix $name ".xapk")}} + {{$androidFiles = Append $androidFiles $att}} + {{else if or (StringUtils.Contains $name "ios") (StringUtils.Contains $name "iphone") (StringUtils.Contains $name "ipad") (StringUtils.HasSuffix $name ".ipa")}} + {{$iosFiles = Append $iosFiles $att}} + {{else if or (StringUtils.Contains $name "windows") (StringUtils.Contains $name "win64") (StringUtils.Contains $name "win32") (StringUtils.Contains $name "-win.") (StringUtils.Contains $name "_win.") (StringUtils.Contains $name "-win-") (StringUtils.Contains $name "_win_") (StringUtils.HasSuffix $name ".exe") (StringUtils.HasSuffix $name ".msi") (StringUtils.HasSuffix $name ".msix") (StringUtils.HasSuffix $name ".msixbundle") (StringUtils.HasSuffix $name ".appx") (StringUtils.HasSuffix $name ".appxbundle")}} + {{$windowsFiles = Append $windowsFiles $att}} + {{else if or (StringUtils.Contains $name "darwin") (StringUtils.Contains $name "macos") (StringUtils.Contains $name "-mac.") (StringUtils.Contains $name "_mac.") (StringUtils.Contains $name "-mac-") (StringUtils.Contains $name "_mac_") (StringUtils.Contains $name "osx") (StringUtils.HasSuffix $name ".dmg") (StringUtils.HasSuffix $name ".pkg")}} + {{$macosFiles = Append $macosFiles $att}} + {{else if or (StringUtils.Contains $name "linux") (StringUtils.Contains $name "-lin.") (StringUtils.Contains $name "_lin.") (StringUtils.Contains $name "-lin-") (StringUtils.Contains $name "_lin_") (StringUtils.HasSuffix $name ".deb") (StringUtils.HasSuffix $name ".rpm") (StringUtils.HasSuffix $name ".appimage") (StringUtils.HasSuffix $name ".flatpak") (StringUtils.HasSuffix $name ".snap")}} + {{$linuxFiles = Append $linuxFiles $att}} + {{else}} + {{$otherFiles = Append $otherFiles $att}} + {{end}} {{end}} + {{if $windowsFiles}} +
+

{{svg "octicon-device-desktop" 16}} Windows

+
+ {{end}} + {{if $macosFiles}} +
+

{{svg "octicon-device-desktop" 16}} macOS

+ +
+ {{end}} + {{if $linuxFiles}} +
+

{{svg "octicon-terminal" 16}} Linux

+ +
+ {{end}} + {{if $androidFiles}} +
+

{{svg "octicon-device-mobile" 16}} Android

+ +
+ {{end}} + {{if $iosFiles}} +
+

{{svg "octicon-device-mobile" 16}} iOS

+ +
+ {{end}} + {{if $otherFiles}} +
+

{{svg "octicon-file" 16}} Other

+ +
+ {{end}}
{{end}}