Brand identity: true-vector icon, standard Windows icon set, window + splash + About branding (beta.14) #37

Merged
KofTwentyTwo merged 2 commits from dev into main 2026-07-05 20:41:27 +00:00
51 changed files with 92 additions and 25 deletions

No files matched your search

+1 -1
View File
@@ -102,7 +102,7 @@ jobs:
vpk download github --repoUrl $env:REPO_URL --token $env:GITHUB_TOKEN --channel ${{ steps.version.outputs.channel }} @preFlag
- name: Velopack pack
run: vpk pack --packId gclo --packVersion ${{ steps.version.outputs.version }} --packDir publish/app --mainExe gclo.exe --channel ${{ steps.version.outputs.channel }}
run: vpk pack --packId gclo --packVersion ${{ steps.version.outputs.version }} --packDir publish/app --mainExe gclo.exe --channel ${{ steps.version.outputs.channel }} --icon gclo/Assets/Brand/gclo.ico
# This repo has immutable releases: assets freeze the moment a release is
# PUBLISHED. So vpk creates a DRAFT (no --publish), every asset and the
+9 -5
View File
@@ -1,10 +1,14 @@
# gclo — Git Clone Large Organizations
<p align="center">
<img src="docs/images/gclo-lockup.png" width="440" alt="gclo — Git Clone Large Organizations" />
</p>
**Clone an entire GitHub organization. Keep it up to date. In parallel.**
<p align="center"><b>Clone an entire GitHub organization. Keep it up to date. In parallel.</b></p>
[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
[![Platform: Windows 11](https://img.shields.io/badge/platform-Windows%2011-blue)](https://github.com/KofTwentyTwo/gclo)
[![.NET 10](https://img.shields.io/badge/.NET-10-blueviolet)](https://dotnet.microsoft.com/)
<p align="center">
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License: MIT" /></a>
<a href="https://github.com/KofTwentyTwo/gclo"><img src="https://img.shields.io/badge/platform-Windows%2011-blue" alt="Platform: Windows 11" /></a>
<a href="https://dotnet.microsoft.com/"><img src="https://img.shields.io/badge/.NET-10-blueviolet" alt=".NET 10" /></a>
</p>
**gclo** (**G**it **C**lone **L**arge **O**rganizations) mirrors every repository of a GitHub organization or user account into a local folder in one pass: it clones the repositories that are missing and fast-forwards the ones that already exist, with live per-repo progress and bounded parallelism. It ships as a Windows 11 desktop app (WinUI 3) and a scriptable CLI built on the same engine.
Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

+1
View File
@@ -8,6 +8,7 @@
<AssemblyName>gclo</AssemblyName>
<RootNamespace>gclo.Cli</RootNamespace>
<InvariantGlobalization>true</InvariantGlobalization>
<ApplicationIcon>..\gclo\Assets\Brand\gclo.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
+10 -7
View File
@@ -13,7 +13,7 @@
<ScrollViewer MaxHeight="460" VerticalScrollBarVisibility="Auto">
<StackPanel Spacing="12" Padding="0,0,12,0">
<!-- Brand header: the splash's look in miniature (same gradient, glyph,
<!-- Brand header: the splash's look in miniature (same gradient, icon,
wordmark, and white type — deliberately single-theme, like the splash). -->
<Border CornerRadius="8" RequestedTheme="Dark">
<Border.Background>
@@ -24,11 +24,14 @@
</Border.Background>
<StackPanel Padding="20,16" Spacing="4">
<StackPanel Orientation="Horizontal" Spacing="12">
<FontIcon
Glyph="&#xE895;"
FontSize="28"
Foreground="White"
VerticalAlignment="Center" />
<Image
Width="40"
Height="40"
VerticalAlignment="Center">
<Image.Source>
<SvgImageSource UriSource="ms-appx:///Assets/Brand/gclo-icon.svg" />
</Image.Source>
</Image>
<TextBlock
Text="gclo"
FontFamily="Segoe UI Variable Display"
@@ -66,7 +69,7 @@
<TextBlock TextWrapping="Wrap">
gclo is open source, released under the MIT License.
</TextBlock>
<TextBlock Text="Copyright (c) 2026 James Maes" />
<TextBlock Text="Copyright (c) 2026 James Maes &lt;james@kof22.com&gt;" />
<TextBlock
TextWrapping="Wrap"
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
+29
View File
@@ -0,0 +1,29 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">
<!-- gclo mark, rebuilt as true vector (the original brand export was a raster).
Transparent outside the rounded tile so the host background shows through. -->
<defs>
<linearGradient id="tile" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#1A2B4D" />
<stop offset="1" stop-color="#0C1836" />
</linearGradient>
</defs>
<rect x="48" y="44" width="416" height="416" rx="104" fill="url(#tile)" />
<!-- Three descending chevrons: rounded, white, centered on x=256. -->
<g fill="none" stroke="#FDFDFD" stroke-width="34" stroke-linecap="round" stroke-linejoin="round">
<polyline points="172,114 256,168 340,114" />
<polyline points="172,180 256,234 340,180" />
<polyline points="172,246 256,300 340,246" />
</g>
<!-- 2x3 grid of rounded squares the chevrons flow into. -->
<g fill="#FDFDFD">
<rect x="184" y="330" width="40" height="40" rx="12" />
<rect x="236" y="330" width="40" height="40" rx="12" />
<rect x="288" y="330" width="40" height="40" rx="12" />
<rect x="184" y="382" width="40" height="40" rx="12" />
<rect x="236" y="382" width="40" height="40" rx="12" />
<rect x="288" y="382" width="40" height="40" rx="12" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

+3
View File
@@ -99,6 +99,9 @@ namespace gclo
double scale = GetDpiForWindow(hwnd) / 96.0;
AppWindow.Resize(new Windows.Graphics.SizeInt32((int)(1000 * scale), (int)(750 * scale)));
// The brand icon in the title bar (and alt-tab / taskbar for unpackaged runs).
AppWindow.SetIcon(System.IO.Path.Combine(AppContext.BaseDirectory, "Assets", "Brand", "gclo.ico"));
// Keep the window from shrinking below a usable workspace layout.
// PreferredMinimum* takes physical pixels like Resize (WinAppSDK 1.7+,
// present in the installed SDK). If a future SDK removes these
+32 -5
View File
@@ -38,12 +38,17 @@
<StackPanel
HorizontalAlignment="Center"
VerticalAlignment="Center">
<FontIcon
Glyph="&#xE895;"
FontSize="56"
Foreground="White"
<!-- True-vector mark (SvgImageSource): crisp at any scale, transparent
background so the gradient shows through the rounded corners. -->
<Image
Width="96"
Height="96"
HorizontalAlignment="Center"
Margin="0,0,0,16" />
Margin="0,0,0,16">
<Image.Source>
<SvgImageSource UriSource="ms-appx:///Assets/Brand/gclo-icon.svg" />
</Image.Source>
</Image>
<TextBlock
Text="gclo"
FontFamily="Segoe UI Variable Display"
@@ -67,6 +72,28 @@
Margin="0,8,0,0" />
</StackPanel>
<!-- Author credit, anchored above the activity strip: name on its own line,
then the contact links on one dot-separated line. -->
<StackPanel
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Margin="0,0,0,44"
Spacing="3">
<TextBlock
Text="Created by James Maes"
FontSize="13"
FontWeight="SemiBold"
Foreground="White"
Opacity="0.85"
HorizontalAlignment="Center" />
<TextBlock
Text="james@kof22.com&#x2002;·&#x2002;github.com/KofTwentyTwo&#x2002;·&#x2002;kof22.com"
FontSize="12"
Foreground="White"
Opacity="0.6"
HorizontalAlignment="Center" />
</StackPanel>
<!-- Thin activity strip: white bar over a 20% white track; the track-height
resource is overridden so the track matches the 3px bar. -->
<ProgressBar
+7 -7
View File
@@ -5,6 +5,7 @@
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<RootNamespace>gclo</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<ApplicationIcon>Assets\Brand\gclo.ico</ApplicationIcon>
<Platforms>x86;x64;ARM64</Platforms>
<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
<PublishProfile>win-$(Platform).pubxml</PublishProfile>
@@ -17,13 +18,12 @@
</PropertyGroup>
<ItemGroup>
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\LockScreenLogo.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\StoreLogo.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
<!-- MSIX tile assets: the full standard scale/targetsize set (transparent PNGs). -->
<Content Include="Assets\**\*.png" />
<!-- True-vector mark: the window title-bar icon (.ico) and the SVG the in-window
splash and About dialog render via SvgImageSource. -->
<Content Include="Assets\Brand\gclo-icon.svg" />
<Content Include="Assets\Brand\gclo.ico" />
</ItemGroup>
<ItemGroup>