From 4f6b667cf79ffa138ac790c73b650eaa5da3a069 Mon Sep 17 00:00:00 2001 From: vvzvlad Date: Thu, 18 Jun 2026 00:12:26 +0300 Subject: [PATCH] feat(brand): roll out Gitmost logo, favicon and app name Replace the bare brand text on pages with the Gitmost logo lockup (mark + "gitmost" wordmark) and use the mark as the favicon. - add generated logo lockups (text outlined from Space Grotesk SemiBold) in dark/light ink variants; add reusable theme-aware component - use BrandLogo in the global header (mark-only on mobile, full lockup on desktop) and on auth pages, dropping the old Docmost icon + plain text - point favicon to /brand/gitmost-favicon.svg (SVG primary + PNG fallbacks); regenerate favicon/app-icon PNGs from the brand SVGs - rename app name Docmost -> Gitmost (getAppName, index.html title/apple title, manifest name); use getAppName() in the 404 title - align theme/background colors to the brand tile (#0E1117) - move brand guide and logos into docs/brand/ (canonical home) with a README, and serve runtime copies from apps/client/public/brand/ --- apps/client/index.html | 7 +- apps/client/public/brand/gitmost-favicon.svg | 9 + .../client/public/brand/gitmost-logo-dark.svg | 17 ++ .../public/brand/gitmost-logo-light.svg | 17 ++ .../client/public/brand/gitmost-mark-dark.svg | 6 + .../public/brand/gitmost-mark-light.svg | 6 + apps/client/public/icons/app-icon-192x192.png | Bin 4722 -> 5845 bytes apps/client/public/icons/app-icon-512x512.png | Bin 13696 -> 17092 bytes apps/client/public/icons/favicon-16x16.png | Bin 509 -> 525 bytes apps/client/public/icons/favicon-32x32.png | Bin 881 -> 1010 bytes apps/client/public/manifest.json | 8 +- .../components/layouts/global/app-header.tsx | 20 +- apps/client/src/components/ui/brand-logo.tsx | 33 +++ apps/client/src/components/ui/error-404.tsx | 3 +- .../features/auth/components/auth-layout.tsx | 13 +- apps/client/src/lib/config.ts | 2 +- docs/brand/README.md | 31 +++ docs/brand/gitmost-brand-guide.html | 195 ++++++++++++++++++ docs/brand/gitmost-favicon.svg | 9 + docs/brand/gitmost-icon.svg | 9 + docs/brand/gitmost-logo-dark.svg | 17 ++ docs/brand/gitmost-logo-light.svg | 17 ++ docs/brand/gitmost-mark-dark.svg | 6 + docs/brand/gitmost-mark-light.svg | 6 + docs/brand/gitmost-mark-mono.svg | 6 + 25 files changed, 403 insertions(+), 34 deletions(-) create mode 100644 apps/client/public/brand/gitmost-favicon.svg create mode 100644 apps/client/public/brand/gitmost-logo-dark.svg create mode 100644 apps/client/public/brand/gitmost-logo-light.svg create mode 100644 apps/client/public/brand/gitmost-mark-dark.svg create mode 100644 apps/client/public/brand/gitmost-mark-light.svg create mode 100644 apps/client/src/components/ui/brand-logo.tsx create mode 100644 docs/brand/README.md create mode 100644 docs/brand/gitmost-brand-guide.html create mode 100644 docs/brand/gitmost-favicon.svg create mode 100644 docs/brand/gitmost-icon.svg create mode 100644 docs/brand/gitmost-logo-dark.svg create mode 100644 docs/brand/gitmost-logo-light.svg create mode 100644 docs/brand/gitmost-mark-dark.svg create mode 100644 docs/brand/gitmost-mark-light.svg create mode 100644 docs/brand/gitmost-mark-mono.svg diff --git a/apps/client/index.html b/apps/client/index.html index 28679e40..dcfd942a 100644 --- a/apps/client/index.html +++ b/apps/client/index.html @@ -2,16 +2,17 @@ + - Docmost - + Gitmost + - + diff --git a/apps/client/public/brand/gitmost-favicon.svg b/apps/client/public/brand/gitmost-favicon.svg new file mode 100644 index 00000000..0dba255a --- /dev/null +++ b/apps/client/public/brand/gitmost-favicon.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/apps/client/public/brand/gitmost-logo-dark.svg b/apps/client/public/brand/gitmost-logo-dark.svg new file mode 100644 index 00000000..cdaeb045 --- /dev/null +++ b/apps/client/public/brand/gitmost-logo-dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/apps/client/public/brand/gitmost-logo-light.svg b/apps/client/public/brand/gitmost-logo-light.svg new file mode 100644 index 00000000..b57800ca --- /dev/null +++ b/apps/client/public/brand/gitmost-logo-light.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/apps/client/public/brand/gitmost-mark-dark.svg b/apps/client/public/brand/gitmost-mark-dark.svg new file mode 100644 index 00000000..016d4ee5 --- /dev/null +++ b/apps/client/public/brand/gitmost-mark-dark.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/apps/client/public/brand/gitmost-mark-light.svg b/apps/client/public/brand/gitmost-mark-light.svg new file mode 100644 index 00000000..07ca680e --- /dev/null +++ b/apps/client/public/brand/gitmost-mark-light.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/apps/client/public/icons/app-icon-192x192.png b/apps/client/public/icons/app-icon-192x192.png index 46bce9e52cd0e83455e850638f0555f7f2fedd0b..1aaf461319330d90b8e2d9d257dda7bbfe1b1caa 100644 GIT binary patch literal 5845 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 TJM}0@rv?mkOyLb$F0ua)`|{?z literal 4722 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 diff --git a/apps/client/public/icons/favicon-16x16.png b/apps/client/public/icons/favicon-16x16.png index c8d2d56fe4abab83637996db42875793894aba47..3690d0bd5ee6a72e5ad63c8be80775da7175053d 100644 GIT binary patch delta 510 zcmVN_VDFIeIK1eD(O7TtcKMVlcModO2rXRJNMYJ z?okC9_UFeYJAW&U&g8K5db67g1TbxbJG;TX)LkyVKgW;S_oD#-Mu$@*odoXcrY{~C zFqzMzTbgpYbU2{Z*J7=?j#&OJT$`F^BAca9DBykbd^zcl#0~82`OK{mP_VPoz@6P7 zHIn9PF2_VROSMwr`t%gLde;Z&zL-;22D|;7INQ%m@pm~%CxLEh78e$IJoB)}ybovs zj;{X#2KJ(Dc=_}N?wU)vTjXP>}8D1Mx+S6_Kos~l!JsG5YMu}fm) zEuH^x1pP+HsBN#lWW;2EDxd=xHBdpwG(5NZ7i6=KDNS+k9{>OV07*qoM6N<$g7kdv A=l}o! literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6XVU3I`u#fXMsm#F#`j) zFbFd;%$g$s6kHeJ6XFV_F@dhGu9ugWwY9Z?fPjaGhoPY%6BE<@`}hC<|F5E=vT@_a zr%#_oMn*n<{MgUW@7J$i|Ni}Ra&pSb%DR2~_LC=1_V3@XqoecZ&mT@sPG)B2Z{NNt zDJi{w|6WZ^O;1m6%9JUBf`WVY?3plOLUeTW;>C+gOG_U;di3?{S5Z;X`uh5|wzl5h z-lRZ(`HAFd*NmB*-t=@5%pv7u1dc-9!rbyW^blK`eO~XKX?fmf zc`=8OT8N_|pY8$GWdAt1SN#sHMawo+o_1X@alsLZ4;5wsYVRGsW-KUc`0qA%Vq18V z-1>}nTnz_V*RE~*#wIcELS*)fPm+m8re<=noWB2s>G9r}UokZY&plwzT3#8~UUF&w i(`6;dSw-S7WD=bm%E zPf&tW^o!(miaC6~?d!gJ@y<#KzOt$*twCgPpjVeDx$B5_RwCF7ew*qUsCwlGjWj?uaqc{&wP4WHc z-I}6>#|X%s#$)Y1PFxF?6c&5M=E<#D(z7civ45?{kMqI6K*`E2E5gN|3q)hl{R_~% zI%kK@qqxsz8=5(N<_w`wh_3Dsu6kDqdH-8inVp%bNe&f$fzi=iksP4T zQ^(Db&k31b75(9GnD^d!x8~iiDnK`@m(*ysd|RzZgfEANxH~#ZKA+z+`IZ35ww@px zFMsddw!_p+*4O_f5{WSRaFY9D_n7$ULCw>?3#9NEff!J1RWw8A?BMybwhA_?+TzE5 zRDIj`M~|gQ!K3ZATq4Wj@H~a}(yh#|+AIvsIY+*M$HHs0^h?CoJ3X3D$LR2*`*pIh z3`^tjiuL>;5Q3`$+H{W*p8=k6GseK@{oCO|{#S9GG z!XV7ZFl&wkP=Q5&Plzi}l1LyWCDq;CJ$drv=;&x$Tif2=-bs@t)z;Q}dwX+oa&Fza z_5c6>Ha0dwLPB4@d|AGHxwN$Ov17-AgM&LdIzE2<=;PxP5)#7B&i?Avt6#rR$X2F>C-0# z1qD%2QDtRi4Gj%lU0ow1BXe_eXJ=;-5fQXdvg`3#1{BID3GxeO;Gg&M-~V5i(iv}u z9Qg?h2I_;%V0%C%TlhJhU`; zJEy%>%BWmjzk1q5t&S54O$%H&s-7=n*PZ0hw1izF<>XqM;xq2gOMZ(P&zUK2eBbg8 zcay+N6{-A&iPy`P>X^&;&9bJgxlqPKOOM|P zqML*(ez0z-|8QuEz5CJ5?^X-=PKdm|=M%+j@@VUp-J0`58q;j1-rX9v+Ce&=QB&`y zzR7{99gdk7KFrl}IL;~W_THjYPSfGKqWrM}?Md&07_0b}?Elc)ajl!_$tIy054gV^ z{m-Igv&ViJLt`@Mmrun!Z?q3Qn8&hgg2s`Bv8)_wa^2@8R@qD63zT2AKrp9x9^1Ap z4886vy|^3}o~>^%Ff%#evnQr&O?Jc0h?Pd2TeS{+JzA+JDKP&~<#uuHskOrI{5M^; vv6-g3f#LDpch6&Dm?WQR72R6LsdL%9_<8gT0m*DNP=tHB`njxgN@xNAgAS1J diff --git a/apps/client/public/manifest.json b/apps/client/public/manifest.json index 3e4b35dd..c6da2b21 100644 --- a/apps/client/public/manifest.json +++ b/apps/client/public/manifest.json @@ -1,10 +1,10 @@ { - "name": "Docmost", - "short_name": "Docmost", + "name": "Gitmost", + "short_name": "Gitmost", "start_url": "/", "display": "standalone", - "background_color": "#222", - "theme_color": "#222", + "background_color": "#0E1117", + "theme_color": "#0E1117", "icons": [ { "src": "icons/favicon-16x16.png", diff --git a/apps/client/src/components/layouts/global/app-header.tsx b/apps/client/src/components/layouts/global/app-header.tsx index c2cfae16..c69f230e 100644 --- a/apps/client/src/components/layouts/global/app-header.tsx +++ b/apps/client/src/components/layouts/global/app-header.tsx @@ -1,10 +1,10 @@ import { Box, Group, - Text, Tooltip, } from "@mantine/core"; import classes from "./app-header.module.css"; +import { BrandLogo } from "@/components/ui/brand-logo"; import TopMenu from "@/components/layouts/global/top-menu.tsx"; import { Link } from "react-router-dom"; import APP_ROUTE from "@/lib/app-route.ts"; @@ -69,21 +69,11 @@ export function AppHeader() { - Gitmost + + + + - - Gitmost - diff --git a/apps/client/src/components/ui/brand-logo.tsx b/apps/client/src/components/ui/brand-logo.tsx new file mode 100644 index 00000000..cc41ce5e --- /dev/null +++ b/apps/client/src/components/ui/brand-logo.tsx @@ -0,0 +1,33 @@ +import { useComputedColorScheme } from "@mantine/core"; + +type BrandLogoProps = { + // When true, render the mark only; otherwise render the full lockup (mark + wordmark). + markOnly?: boolean; + // Logo height in pixels; width scales automatically to preserve aspect ratio. + height?: number; + className?: string; +}; + +export function BrandLogo({ + markOnly = false, + height = 28, + className, +}: BrandLogoProps) { + // Detect the active color scheme and pick the contrasting ink variant. + // "*-light" = light ink for dark backgrounds, "*-dark" = dark ink for light backgrounds. + const colorScheme = useComputedColorScheme("light"); + const variant = colorScheme === "dark" ? "light" : "dark"; + + const src = markOnly + ? `/brand/gitmost-mark-${variant}.svg` + : `/brand/gitmost-logo-${variant}.svg`; + + return ( + Gitmost + ); +} diff --git a/apps/client/src/components/ui/error-404.tsx b/apps/client/src/components/ui/error-404.tsx index 8c8846ae..f131f7bc 100644 --- a/apps/client/src/components/ui/error-404.tsx +++ b/apps/client/src/components/ui/error-404.tsx @@ -3,6 +3,7 @@ import classes from "./error-404.module.css"; import { Link } from "react-router-dom"; import { Helmet } from "react-helmet-async"; import { useTranslation } from "react-i18next"; +import { getAppName } from "@/lib/config"; export function Error404() { const { t } = useTranslation(); @@ -10,7 +11,7 @@ export function Error404() { return ( <> - {t("404 page not found")} - Docmost + {t("404 page not found")} - {getAppName()} {t("404 page not found")} diff --git a/apps/client/src/features/auth/components/auth-layout.tsx b/apps/client/src/features/auth/components/auth-layout.tsx index ef874371..20fa9b16 100644 --- a/apps/client/src/features/auth/components/auth-layout.tsx +++ b/apps/client/src/features/auth/components/auth-layout.tsx @@ -1,6 +1,7 @@ import React from "react"; -import { Group, Text } from "@mantine/core"; +import { Group } from "@mantine/core"; import classes from "./auth.module.css"; +import { BrandLogo } from "@/components/ui/brand-logo"; type AuthLayoutProps = { children: React.ReactNode; @@ -10,15 +11,7 @@ export function AuthLayout({ children }: AuthLayoutProps) { return ( <> - Gitmost - - Gitmost - +
{children}
diff --git a/apps/client/src/lib/config.ts b/apps/client/src/lib/config.ts index 67bbe100..bae1a1c6 100644 --- a/apps/client/src/lib/config.ts +++ b/apps/client/src/lib/config.ts @@ -10,7 +10,7 @@ declare global { } export function getAppName(): string { - return "Docmost"; + return "Gitmost"; } export function getAppUrl(): string { diff --git a/docs/brand/README.md b/docs/brand/README.md new file mode 100644 index 00000000..c4b6319b --- /dev/null +++ b/docs/brand/README.md @@ -0,0 +1,31 @@ +# Gitmost brand assets + +Canonical home for the Gitmost logo, marks and brand guide. +See [gitmost-brand-guide.html](./gitmost-brand-guide.html) for usage rules +(colors, clear space, don'ts). + +## Files + +| File | Use | +| --- | --- | +| `gitmost-brand-guide.html` | Brand guide — open in a browser. | +| `gitmost-logo-dark.svg` | Primary horizontal logo (mark + wordmark), dark ink — for light backgrounds. | +| `gitmost-logo-light.svg` | Primary horizontal logo, light ink — for dark backgrounds. | +| `gitmost-icon.svg` | App icon — mark on a dark `#0E1117` tile (256px). | +| `gitmost-favicon.svg` | Favicon — mark on a dark tile, heavier strokes for small sizes. | +| `gitmost-mark-dark.svg` | Bare mark, dark strokes — for light backgrounds. | +| `gitmost-mark-light.svg` | Bare mark, light strokes — for dark backgrounds. | +| `gitmost-mark-mono.svg` | Single-color mark (print, engraving, B/W). | + +## Runtime copies + +The web client serves the assets it needs from `apps/client/public/brand/` +(logos, marks, favicon) and `apps/client/public/icons/` (PNG favicons and PWA +app icons rasterized from `gitmost-favicon.svg` / `gitmost-icon.svg`). When a +brand asset here changes, refresh those copies. + +## Wordmark + +The wordmark is "gitmost" set in Space Grotesk SemiBold (600), tracking +-0.04em, all lowercase. In `gitmost-logo-*.svg` the text is converted to +outlines, so no font is required at runtime. diff --git a/docs/brand/gitmost-brand-guide.html b/docs/brand/gitmost-brand-guide.html new file mode 100644 index 00000000..b49eae3e --- /dev/null +++ b/docs/brand/gitmost-brand-guide.html @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + +
+
Gitmost · LogoBrand guide v1
+ + + + + +
GitmostLogo brand guide
+
+
+ + diff --git a/docs/brand/gitmost-favicon.svg b/docs/brand/gitmost-favicon.svg new file mode 100644 index 00000000..0dba255a --- /dev/null +++ b/docs/brand/gitmost-favicon.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/brand/gitmost-icon.svg b/docs/brand/gitmost-icon.svg new file mode 100644 index 00000000..26628cc3 --- /dev/null +++ b/docs/brand/gitmost-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/brand/gitmost-logo-dark.svg b/docs/brand/gitmost-logo-dark.svg new file mode 100644 index 00000000..cdaeb045 --- /dev/null +++ b/docs/brand/gitmost-logo-dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/brand/gitmost-logo-light.svg b/docs/brand/gitmost-logo-light.svg new file mode 100644 index 00000000..b57800ca --- /dev/null +++ b/docs/brand/gitmost-logo-light.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/brand/gitmost-mark-dark.svg b/docs/brand/gitmost-mark-dark.svg new file mode 100644 index 00000000..016d4ee5 --- /dev/null +++ b/docs/brand/gitmost-mark-dark.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/docs/brand/gitmost-mark-light.svg b/docs/brand/gitmost-mark-light.svg new file mode 100644 index 00000000..07ca680e --- /dev/null +++ b/docs/brand/gitmost-mark-light.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/docs/brand/gitmost-mark-mono.svg b/docs/brand/gitmost-mark-mono.svg new file mode 100644 index 00000000..671e597b --- /dev/null +++ b/docs/brand/gitmost-mark-mono.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file