feat(brand): oo logo — app icons, landing, in-app mark (Gemini-generated)
Wybrane logo: interlocked double-o "oo" (off-white ringi + oxblood doty na warm charcoal). Wygenerowane przez Gemini 3 Pro Image (Nano Banana), wybrane z 8 wariantow przez Jana. Native icons (wejda przy nast. APK buildzie, nie OTA): - assets/icon.png, adaptive-icon.png, splash.png, favicon.png — zlozone z mastera przez PIL (mark wyciety po alpha-masce, osadzony na dokladnym #15110D, rozne fill-ratio per asset). - app.json: adaptiveIcon + splash backgroundColor #0E1018 (stary navy) -> #15110D. In-app (OTA): - GoonMark SVG przerobiony z pojedynczego ring+dot na double-o (2 ringi + doty), spojny z app-icon. Login: mark 92 + wordmark 40. Landing goon-foss.org (osobny deploy na caddy volume): - /logo.png + /favicon.png upload, <link rel=icon/apple-touch-icon>, hero brand block: dot+text -> <img logo> + dwutonowy "g[oo]n". OTA: a81ea98c-723d-4b39-9dc0-bbe8736c104e. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
|
@ -22,12 +22,12 @@
|
|||
"package": "com.goon.mobile",
|
||||
"adaptiveIcon": {
|
||||
"foregroundImage": "./assets/adaptive-icon.png",
|
||||
"backgroundColor": "#0E1018"
|
||||
"backgroundColor": "#15110D"
|
||||
}
|
||||
},
|
||||
"splash": {
|
||||
"image": "./assets/splash.png",
|
||||
"backgroundColor": "#0E1018",
|
||||
"backgroundColor": "#15110D",
|
||||
"resizeMode": "contain"
|
||||
},
|
||||
"web": {
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 40 KiB |
|
|
@ -46,31 +46,32 @@ export function GoonWordmark({ size = 26, color = theme.fg, mono = false }: Word
|
|||
}
|
||||
|
||||
/**
|
||||
* Monogram — koncentryczny ring + wypełniona kropka (oxblood). Czyta się jako
|
||||
* "o" z wordmarku, motyw soczewki/oka (watching) bez dosłowności. Czysty SVG
|
||||
* (bez fontu) — używany do generowania app-icon / adaptive-icon / splash PNG,
|
||||
* gdzie custom font nie jest dostępny.
|
||||
* Brand mark — double-o ("oo"): dwa ringi obok siebie z oxblood dotem w środku
|
||||
* każdego. Czyta się jako "oo" z goon / para soczewek-oczu (watching). Spójny z
|
||||
* wybranym app-icon (2026-05-30, AI-gen interlocked oo). Czysty SVG (bez fontu)
|
||||
* — używany na Login + jako wzór dla raster app-icon.
|
||||
*
|
||||
* <GoonMark size={48} />
|
||||
* `size` = szerokość; wysokość = size * 0.56 (proporcja 2 ringów obok siebie).
|
||||
*
|
||||
* <GoonMark size={88} />
|
||||
*/
|
||||
export function GoonMark({
|
||||
size = 48,
|
||||
size = 88,
|
||||
ringColor = theme.fg,
|
||||
dotColor = theme.accent,
|
||||
bg,
|
||||
}: {
|
||||
size?: number;
|
||||
ringColor?: string;
|
||||
dotColor?: string;
|
||||
/** Opcjonalne tło (dla icon — np. theme.bg). Pominięte = przezroczyste. */
|
||||
bg?: string;
|
||||
}) {
|
||||
// viewBox 100×100. Ring: cx50 cy50 r36, stroke 11. Dot: r15 wypełniony.
|
||||
// viewBox 200×112. Dwa ringi: cx 56 i 144, cy 56, r 44, stroke 13. Doty r 16.
|
||||
const height = size * (112 / 200);
|
||||
return (
|
||||
<Svg width={size} height={size} viewBox="0 0 100 100" fill="none">
|
||||
{bg ? <Circle cx={50} cy={50} r={50} fill={bg} /> : null}
|
||||
<Circle cx={50} cy={50} r={36} stroke={ringColor} strokeWidth={11} fill="none" />
|
||||
<Circle cx={50} cy={50} r={15} fill={dotColor} />
|
||||
<Svg width={size} height={height} viewBox="0 0 200 112" fill="none">
|
||||
<Circle cx={56} cy={56} r={44} stroke={ringColor} strokeWidth={13} fill="none" />
|
||||
<Circle cx={56} cy={56} r={16} fill={dotColor} />
|
||||
<Circle cx={144} cy={56} r={44} stroke={ringColor} strokeWidth={13} fill="none" />
|
||||
<Circle cx={144} cy={56} r={16} fill={dotColor} />
|
||||
</Svg>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,9 +58,9 @@ export function LoginScreen({ onAuthenticated }: Props) {
|
|||
keyboardShouldPersistTaps="handled"
|
||||
>
|
||||
<View style={styles.brandBlock}>
|
||||
<GoonMark size={44} bg="transparent" />
|
||||
<View style={{ height: 14 }} />
|
||||
<GoonWordmark size={44} />
|
||||
<GoonMark size={92} />
|
||||
<View style={{ height: 16 }} />
|
||||
<GoonWordmark size={40} />
|
||||
<Text style={styles.subtitle}>self-hosted scene catalog</Text>
|
||||
</View>
|
||||
|
||||
|
|
|
|||