feat: rename service to galo, add halo branding and release build

- rename Go module, binary, systemd unit, PG_DATABASE default, frontend package and docs from shared-album to galo
- add theme-aware halo emblem and favicon (new ui-branding capability)
- add make build-release (versioned, stripped, static binary) and run the binary from the repo root
This commit is contained in:
iu
2026-10-11 11:36:56 +03:00
parent 29c2594a9b
commit 50dff63ece
89 changed files with 696 additions and 254 deletions
+68 -2
View File
@@ -1,11 +1,11 @@
{
"name": "shared-album-frontend",
"name": "galo-frontend",
"version": "0.0.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "shared-album-frontend",
"name": "galo-frontend",
"version": "0.0.1",
"devDependencies": {
"@sveltejs/adapter-static": "^3.0.6",
@@ -1102,6 +1102,72 @@
"node": ">=14.0.0"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": {
"version": "1.11.1",
"dev": true,
"inBundle": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/wasi-threads": "1.2.2",
"tslib": "^2.4.0"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": {
"version": "1.11.1",
"dev": true,
"inBundle": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
"version": "1.2.2",
"dev": true,
"inBundle": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": {
"version": "1.1.4",
"dev": true,
"inBundle": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@tybys/wasm-util": "^0.10.1"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
},
"peerDependencies": {
"@emnapi/core": "^1.7.1",
"@emnapi/runtime": "^1.7.1"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": {
"version": "0.10.2",
"dev": true,
"inBundle": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": {
"version": "2.8.1",
"dev": true,
"inBundle": true,
"license": "0BSD",
"optional": true
},
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz",
+1 -1
View File
@@ -1,5 +1,5 @@
{
"name": "shared-album-frontend",
"name": "galo-frontend",
"private": true,
"version": "0.0.1",
"type": "module",
+3 -1
View File
@@ -3,7 +3,9 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<link rel="icon" href="%sveltekit.assets%/favicon.svg" type="image/svg+xml" />
<link rel="alternate icon" href="%sveltekit.assets%/favicon.png" type="image/png" />
<link rel="apple-touch-icon" href="%sveltekit.assets%/apple-touch-icon.png" />
<script>
(function () {
try {
+2 -1
View File
@@ -2,6 +2,7 @@
import { onMount } from 'svelte';
import { goto } from '$app/navigation';
import { authApi } from '$lib/api';
import Emblem from './Emblem.svelte';
import Icon from './Icon.svelte';
import ThemeSwitcher from './ThemeSwitcher.svelte';
import { auth } from '$lib/stores/auth.svelte';
@@ -115,7 +116,7 @@
<Icon name="menu" class="size-4" />
</button>
<a href="/" class="inline-flex items-center gap-1.5 truncate text-sm font-semibold">
<Icon name="photo_camera" class="size-4" />
<Emblem class="text-primary size-4" />
Galo
</a>
</div>
+28
View File
@@ -0,0 +1,28 @@
<script lang="ts">
interface Props {
label?: string;
class?: string;
}
let { label, class: className = 'size-5' }: Props = $props();
</script>
<svg
viewBox="0 0 64 64"
class={className}
role={label ? 'img' : undefined}
aria-label={label}
aria-hidden={label ? undefined : 'true'}
focusable="false"
>
<circle cx="32" cy="32" r="13" fill="currentColor" />
<circle
cx="32"
cy="32"
r="24"
fill="none"
stroke="currentColor"
stroke-width="6"
stroke-opacity="0.45"
/>
</svg>
+2 -2
View File
@@ -1,6 +1,6 @@
<script lang="ts">
import ThemeSwitcher from '$lib/components/ThemeSwitcher.svelte';
import Icon from '$lib/components/Icon.svelte';
import Emblem from '$lib/components/Emblem.svelte';
let { children } = $props();
</script>
@@ -9,7 +9,7 @@
<header class="border-border bg-chrome border-b">
<div class="mx-auto flex max-w-6xl items-center justify-between px-4 py-3">
<a href="/" class="inline-flex items-center gap-2 text-lg font-semibold">
<Icon name="photo_camera" />
<Emblem class="text-primary size-6" />
Galo
</a>
<ThemeSwitcher />
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 840 B

+30
View File
@@ -0,0 +1,30 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<style>
.bg {
fill: #ffffff;
}
.disc {
fill: #2563eb;
}
.ring {
fill: none;
stroke: #2563eb;
stroke-opacity: 0.45;
}
@media (prefers-color-scheme: dark) {
.bg {
fill: #171717;
}
.disc {
fill: #60a5fa;
}
.ring {
stroke: #60a5fa;
stroke-opacity: 0.6;
}
}
</style>
<rect class="bg" width="64" height="64" rx="14" />
<circle class="disc" cx="32" cy="32" r="13" />
<circle class="ring" cx="32" cy="32" r="24" stroke-width="6" />
</svg>

After

Width:  |  Height:  |  Size: 562 B