Finish the Cairn OBS rename through services, docs, and assets

The rename commit before this one covered module paths and the obvious
user-facing strings; this is the rest of it -- the places where "sentry"
was a default value, a filename, or a picture rather than a word in a
sentence.

Defaults that changed: CLICKHOUSE_DATABASE (sentry -> cairnobs),
POSTGRES_DATABASE (sentry_metadata -> cairnobs_metadata), and
POSTGRES_USERNAME (sentry -> cairnobs), across api/alerting/ingest and
the enterprise binaries, plus the compose files and migrate scripts that
create those objects. These are *defaults*, so a deployment that sets
them explicitly is unaffected -- but any deployment relying on the old
defaults must have its environment updated before it picks this up, or
it will come up pointing at a database that doesn't exist.

Also: the light-mode logo variants (the dark ones existed alone, so the
landing page and sidebar rendered a dark mark on a light background),
regenerated favicons, and the docs/README/threat-model prose that still
said Sentry.
This commit is contained in:
2026-08-22 16:12:08 -07:00
parent 13cf9a30cb
commit c920e0f2c4
68 changed files with 242 additions and 186 deletions
+3 -3
View File
@@ -2,8 +2,8 @@
<!-- Favicon: simplified 3-stone mark on terminal-dark rounded square -->
<rect x="0" y="0" width="64" height="64" rx="14" fill="#0D1117"/>
<g>
<rect x="12" y="38" width="40" height="13" rx="6.5" fill="#FF8A00" transform="rotate(-2 32 44.5)"/>
<rect x="18" y="24" width="28" height="12" rx="6" fill="#FF9D2E" transform="rotate(3 32 30)"/>
<rect x="23" y="12" width="18" height="10" rx="5" fill="#FFB157" transform="rotate(-3 32 17)"/>
<path d="M14,50 L10,45 L13,40 L22,37 L34,40 L44,37 L53,41 L50,47 L40,51 L26,48 Z" fill="#FF8A00"/>
<path d="M20,35 L16,30 L19,25 L28,23 L36,26 L44,23 L47,28 L43,34 L32,36 L24,33 Z" fill="#FF9D2E"/>
<path d="M24,21 L21,16 L25,12 L32,11 L38,13 L41,17 L38,21 L31,22 L27,20 Z" fill="#FFB157"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 551 B

After

Width:  |  Height:  |  Size: 550 B

+4 -4
View File
@@ -1,10 +1,10 @@
<svg width="600" height="140" viewBox="0 0 600 140" xmlns="http://www.w3.org/2000/svg">
<!-- Horizontal lockup for dark backgrounds -->
<g transform="translate(20,10) scale(0.6)">
<rect x="30" y="142" width="140" height="42" rx="20" fill="#E6690E" transform="rotate(-1.5 100 163)"/>
<rect x="48" y="106" width="104" height="38" rx="18" fill="#FF8A00" transform="rotate(2.5 100 125)"/>
<rect x="64" y="73" width="72" height="34" rx="16" fill="#FF9D2E" transform="rotate(-3 100 90)"/>
<rect x="78" y="43" width="44" height="30" rx="14" fill="#FFB157" transform="rotate(3.5 100 58)"/>
<path d="M32,184 L20,172 L26,155 L18,146 L46,138 L82,144 L112,134 L150,140 L176,150 L182,168 L170,184 L142,192 L100,182 L64,190 Z" fill="#E6690E"/>
<path d="M54,144 L42,134 L50,118 L44,108 L68,100 L96,106 L118,98 L142,106 L156,116 L150,132 L160,142 L132,150 L100,140 L70,148 Z" fill="#FF8A00"/>
<path d="M68,106 L58,96 L64,82 L60,72 L80,66 L100,72 L116,64 L132,74 L138,86 L130,98 L138,106 L112,112 L88,104 L72,110 Z" fill="#FF9D2E"/>
<path d="M80,70 L72,60 L78,48 L74,40 L92,36 L106,42 L116,34 L126,44 L124,56 L130,66 L108,72 L92,64 L82,70 Z" fill="#FFB157"/>
</g>
<text x="160" y="87" font-family="'JetBrains Mono','Fira Code',ui-monospace,monospace" font-size="48" font-weight="700" fill="#F2F2F2" letter-spacing="-1">cairn</text>
<text x="342" y="87" font-family="'JetBrains Mono','Fira Code',ui-monospace,monospace" font-size="48" font-weight="700" fill="#FF8A00" letter-spacing="1"> obs</text>

Before

Width:  |  Height:  |  Size: 1017 B

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,12 @@
<svg width="600" height="140" viewBox="0 0 600 140" xmlns="http://www.w3.org/2000/svg">
<!-- Horizontal lockup for light backgrounds -->
<g transform="translate(20,10) scale(0.6)">
<path d="M32,184 L20,172 L26,155 L18,146 L46,138 L82,144 L112,134 L150,140 L176,150 L182,168 L170,184 L142,192 L100,182 L64,190 Z" fill="#E6690E"/>
<path d="M54,144 L42,134 L50,118 L44,108 L68,100 L96,106 L118,98 L142,106 L156,116 L150,132 L160,142 L132,150 L100,140 L70,148 Z" fill="#FF8A00"/>
<path d="M68,106 L58,96 L64,82 L60,72 L80,66 L100,72 L116,64 L132,74 L138,86 L130,98 L138,106 L112,112 L88,104 L72,110 Z" fill="#FF9D2E"/>
<path d="M80,70 L72,60 L78,48 L74,40 L92,36 L106,42 L116,34 L126,44 L124,56 L130,66 L108,72 L92,64 L82,70 Z" fill="#FFB157"/>
</g>
<text x="160" y="87" font-family="'JetBrains Mono','Fira Code',ui-monospace,monospace" font-size="48" font-weight="700" fill="#111315" letter-spacing="-1">cairn</text>
<text x="342" y="87" font-family="'JetBrains Mono','Fira Code',ui-monospace,monospace" font-size="48" font-weight="700" fill="#E6690E" letter-spacing="1"> obs</text>
<rect x="540" y="49" width="14" height="38" fill="#E6690E"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+4 -4
View File
@@ -1,10 +1,10 @@
<svg width="360" height="360" viewBox="0 0 360 360" xmlns="http://www.w3.org/2000/svg">
<!-- Stacked lockup for dark backgrounds / square placements -->
<g transform="translate(80,30) scale(1.0)">
<rect x="30" y="142" width="140" height="42" rx="20" fill="#E6690E" transform="rotate(-1.5 100 163)"/>
<rect x="48" y="106" width="104" height="38" rx="18" fill="#FF8A00" transform="rotate(2.5 100 125)"/>
<rect x="64" y="73" width="72" height="34" rx="16" fill="#FF9D2E" transform="rotate(-3 100 90)"/>
<rect x="78" y="43" width="44" height="30" rx="14" fill="#FFB157" transform="rotate(3.5 100 58)"/>
<path d="M32,184 L20,172 L26,155 L18,146 L46,138 L82,144 L112,134 L150,140 L176,150 L182,168 L170,184 L142,192 L100,182 L64,190 Z" fill="#E6690E"/>
<path d="M54,144 L42,134 L50,118 L44,108 L68,100 L96,106 L118,98 L142,106 L156,116 L150,132 L160,142 L132,150 L100,140 L70,148 Z" fill="#FF8A00"/>
<path d="M68,106 L58,96 L64,82 L60,72 L80,66 L100,72 L116,64 L132,74 L138,86 L130,98 L138,106 L112,112 L88,104 L72,110 Z" fill="#FF9D2E"/>
<path d="M80,70 L72,60 L78,48 L74,40 L92,36 L106,42 L116,34 L126,44 L124,56 L130,66 L108,72 L92,64 L82,70 Z" fill="#FFB157"/>
</g>
<text x="180" y="290" font-family="'JetBrains Mono','Fira Code',ui-monospace,monospace" font-size="42" font-weight="700" fill="#F2F2F2" letter-spacing="-1" text-anchor="middle">cairn <tspan fill="#FF8A00">obs</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 859 B

After

Width:  |  Height:  |  Size: 1017 B

+10
View File
@@ -0,0 +1,10 @@
<svg width="360" height="360" viewBox="0 0 360 360" xmlns="http://www.w3.org/2000/svg">
<!-- Stacked lockup for light backgrounds / square placements -->
<g transform="translate(80,30) scale(1.0)">
<path d="M32,184 L20,172 L26,155 L18,146 L46,138 L82,144 L112,134 L150,140 L176,150 L182,168 L170,184 L142,192 L100,182 L64,190 Z" fill="#E6690E"/>
<path d="M54,144 L42,134 L50,118 L44,108 L68,100 L96,106 L118,98 L142,106 L156,116 L150,132 L160,142 L132,150 L100,140 L70,148 Z" fill="#FF8A00"/>
<path d="M68,106 L58,96 L64,82 L60,72 L80,66 L100,72 L116,64 L132,74 L138,86 L130,98 L138,106 L112,112 L88,104 L72,110 Z" fill="#FF9D2E"/>
<path d="M80,70 L72,60 L78,48 L74,40 L92,36 L106,42 L116,34 L126,44 L124,56 L130,66 L108,72 L92,64 L82,70 Z" fill="#FFB157"/>
</g>
<text x="180" y="290" font-family="'JetBrains Mono','Fira Code',ui-monospace,monospace" font-size="42" font-weight="700" fill="#111315" letter-spacing="-1" text-anchor="middle">cairn <tspan fill="#E6690E">obs</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 1018 B

+4 -3
View File
@@ -9,9 +9,10 @@
type CurrentSession,
type LocalSession
} from '$lib/api';
import { getTheme, setTheme, type Theme } from '$lib/theme.svelte';
import { getTheme, setTheme, isLight, type Theme } from '$lib/theme.svelte';
import { getDensity, toggleDensity } from '$lib/density.svelte';
import logo from '$lib/assets/logo-horizontal-dark.svg';
import logoDark from '$lib/assets/logo-horizontal-dark.svg';
import logoLight from '$lib/assets/logo-horizontal-light.svg';
let {
onOpenPalette,
@@ -84,7 +85,7 @@
<aside class="sidebar" class:mobile-open={mobileOpen}>
<div class="brand">
<a href="/" class="brand-link" onclick={onCloseMobile}>
<img src={logo} alt="Cairn OBS" class="brand-logo" />
<img src={isLight() ? logoLight : logoDark} alt="Cairn OBS" class="brand-logo" />
</a>
<button type="button" class="close-mobile" onclick={onCloseMobile} aria-label="Close menu"></button>
</div>
+23
View File
@@ -34,10 +34,33 @@ const initial = readStored();
let theme = $state<Theme>(initial);
apply(initial);
// Tracks the OS preference live (not just at load) so "system" stays
// accurate across a theme change the user makes outside the app, same
// as app.css/tokens.css's own `prefers-color-scheme` media query does
// automatically for CSS -- anything in JS that needs to know "is the UI
// actually light right now" (e.g. picking a light/dark logo asset) has
// to track this the same way, or it drifts from what's on screen.
let prefersLight = $state(
typeof window !== 'undefined' ? window.matchMedia('(prefers-color-scheme: light)').matches : false
);
if (typeof window !== 'undefined') {
window
.matchMedia('(prefers-color-scheme: light)')
.addEventListener('change', (e) => (prefersLight = e.matches));
}
export function getTheme(): Theme {
return theme;
}
// Whether the rendered UI is in light mode right now -- explicit
// "light", or "system" while the OS itself prefers light. Mirrors
// app.css's `html[data-theme='light']` / `prefers-color-scheme: light`
// precedence exactly.
export function isLight(): boolean {
return theme === 'light' || (theme === 'system' && prefersLight);
}
export function setTheme(t: Theme) {
theme = t;
apply(t);
+4 -2
View File
@@ -3,7 +3,9 @@
// /search (the old root; every prior link/shortcut/drill-down that
// used to point at "/" expecting the query page now points at
// "/search" explicitly, see NavSidebar/CommandPalette/drilldown.ts).
import logo from '$lib/assets/logo-stacked-dark.svg';
import logoDark from '$lib/assets/logo-stacked-dark.svg';
import logoLight from '$lib/assets/logo-stacked-light.svg';
import { isLight } from '$lib/theme.svelte';
import { Button } from '$lib/components/ui';
const shortcuts: { href: string; label: string; hint: string }[] = [
@@ -15,7 +17,7 @@
</script>
<main>
<img src={logo} alt="Cairn OBS" class="logo" />
<img src={isLight() ? logoLight : logoDark} alt="Cairn OBS" class="logo" />
<p class="tagline">
One query bar for filter/stats queries and free-text search across every host and service
you're shipping logs from.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 493 B

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 912 B

After

Width:  |  Height:  |  Size: 968 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 11 KiB