fix(brand): capitalize "Punktfunk" in user-facing text

The docs site's page title read "punktfunk docs". Fixed that and swept the
rest of the tree for the same defect, capitalizing the brand wherever it is
shown to a human and leaving it lowercase where it is a technical identifier
(CLI/package names, `punktfunk://` scheme, PnP enumerator, TLS SNI, logcat
tag, config paths, CMS tenant id).

User-visible fixes:

- docs-site: page title -> "Punktfunk Docs"; API reference title, meta
  description and the branded bar's aria-label; the BrandMark/Wordmark SVG
  accessible names (the web console already had these capitalized -- the
  docs site had drifted from it).
- Android: six strings of live UI copy -- the local-network permission
  dialog (x2), the connect-screen error banner, and the no-controller
  explainer.
- Apple: the "No Hosts" empty-state text and the fallback display name for
  a host that advertises no instance name.
- Windows client: the `--discover` progress line.
- KWin fake-input: the application name passed to `authenticate()` (the
  grant is cached per-exe, so the string is display-only).
- THIRD-PARTY-NOTICES: fixed in both generators (about.hbs and
  gen-third-party-notices.py) and applied to the three checked-in outputs
  so they match what a regeneration now produces.

Every changed line differs from the original only by letter case, so line
lengths are unchanged and no formatter width rule is affected.
`cargo fmt --all --check` passes.
This commit is contained in:
2026-08-06 23:10:25 +02:00
parent 50fa228bab
commit b0ec759fad
30 changed files with 44 additions and 44 deletions
+3 -3
View File
@@ -1,17 +1,17 @@
// punktfunk brand mark: two overlapping circles forming a lens — the violet
// Punktfunk brand mark: two overlapping circles forming a lens — the violet
// brand identity. Copied verbatim from the marketing site (flattened from the
// clients/apple punktfunk_Logo.icon). Back-to-front: large light-violet circle,
// deep-violet circle, light highlight where they overlap.
export default function BrandMark({ className }: { className?: string }) {
return (
<svg
aria-label="punktfunk"
aria-label="Punktfunk"
role="img"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 1000 1000"
className={className}
>
<title>punktfunk</title>
<title>Punktfunk</title>
<path
d="M403.037,791.672c107.586,0 194.41,-86.824 194.41,-194.41c0,-107.586 -86.824,-194.41 -194.41,-194.41c-107.586,0 -194.41,86.824 -194.41,194.41c0,107.586 86.824,194.41 194.41,194.41Z"
fill="#a79ff8"
+3 -3
View File
@@ -1,4 +1,4 @@
// The punktfunk "funk" wordmark — vectorised from
// The Punktfunk "funk" wordmark — vectorised from
// Export/Punktfunk_Logo-Text_No-Border_Dark.svg (the white export background is
// dropped). Inline SVG using currentColor so it recolours per theme: the
// deep-violet brand on light, the light-violet lens highlight on dark (matching
@@ -7,13 +7,13 @@ export default function Wordmark({ className = '' }: { className?: string }) {
return (
<svg
role="img"
aria-label="punktfunk"
aria-label="Punktfunk"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 579 136"
fill="currentColor"
className={`w-auto text-[var(--pf-brand)] dark:text-[var(--pf-highlight)] ${className}`}
>
<title>punktfunk</title>
<title>Punktfunk</title>
<path d="M16.782,16.051l0,102.687l31.253,0l0,-35.563l73.436,0l0,-23.555l-73.436,0l0,-19.398l77.285,0l0,-24.171l-108.537,0Z" />
<path d="M131.785,16.051l0,47.264c0.154,16.627 0.154,16.627 0.308,20.014c0.77,15.087 2.463,21.4 7.544,26.634c7.698,8.16 20.014,10.315 59.272,10.315c23.863,0 34.178,-0.616 43.415,-2.463c11.7,-2.463 19.552,-10.623 21.246,-22.323c0.924,-7.236 1.078,-8.929 1.54,-32.176l0,-47.264l-31.253,0l0,47.264c0,2.155 -0.154,7.082 -0.308,10.623c-0.462,9.699 -1.232,12.47 -3.695,15.087c-3.387,3.695 -9.853,4.619 -31.407,4.619c-26.634,0 -32.638,-1.693 -34.332,-9.853c-0.77,-4.157 -0.77,-4.311 -1.078,-20.476l0,-47.264l-31.253,0Z" />
<path d="M271.575,15.943l0,102.687l31.868,0l-0.77,-76.669l3.387,0l54.038,76.669l54.346,0l0,-102.687l-31.868,0l0.77,76.515l-3.233,0l-53.73,-76.515l-54.808,0Z" />
+1 -1
View File
@@ -1,4 +1,4 @@
// The docs reuse the punktfunk footer from the shared unom CMS (cms.unom.io).
// The docs reuse the Punktfunk footer from the shared unom CMS (cms.unom.io).
// The footer shape comes from @unom/app-ui/footer so the docs and the marketing
// site share one type. The CMS is multi-tenant: footer is a per-tenant
// collection, so scope the read to this project's tenant. Read-only GET, so a
+1 -1
View File
@@ -3,7 +3,7 @@ import BrandMark from '@/components/BrandMark'
import Wordmark from '@/components/Wordmark'
// Shared chrome (nav title, links) for both the docs layout and the home layout.
// The lens mark + wordmark mirror the punktfunk marketing site's header.
// The lens mark + wordmark mirror the Punktfunk marketing site's header.
export function baseOptions(): BaseLayoutProps {
return {
nav: {
+1 -1
View File
@@ -30,7 +30,7 @@ export const Route = createRootRoute({
{ charSet: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{ name: 'color-scheme', content: 'dark light' },
{ title: 'punktfunk docs' },
{ title: 'Punktfunk Docs' },
],
links: [
{ rel: 'stylesheet', href: appCss },
+6 -6
View File
@@ -13,18 +13,18 @@ export const Route = createFileRoute('/api/')({
component: ApiReference,
head: () => ({
meta: [
{ title: 'punktfunk — Management API reference' },
{ title: 'Punktfunk — Management API Reference' },
{
name: 'description',
content:
'Interactive reference for the punktfunk host management REST API (OpenAPI).',
'Interactive reference for the Punktfunk host management REST API (OpenAPI).',
},
],
links: [{ rel: 'stylesheet', href: scalarCss }],
}),
})
// The full punktfunk theme rolled out onto Scalar — the same dark-violet (and
// The full Punktfunk theme rolled out onto Scalar — the same dark-violet (and
// light-lavender) product chrome as the docs/management console.
//
// IMPORTANT: Scalar toggles `.light-mode` / `.dark-mode` on `document.body`,
@@ -191,7 +191,7 @@ function ApiReference() {
url: '/openapi.json',
darkMode: isDark,
hideDarkModeToggle: true,
metaData: { title: 'punktfunk Management API' },
metaData: { title: 'Punktfunk Management API' },
hideDownloadButton: false,
customCss: SCALAR_CSS,
}),
@@ -200,13 +200,13 @@ function ApiReference() {
return (
<div className="flex min-h-screen flex-col">
{/* Slim branded bar so the reference stays inside the punktfunk identity
{/* Slim branded bar so the reference stays inside the Punktfunk identity
and links back into the docs. */}
<header className="flex h-14 shrink-0 items-center justify-between border-b border-fd-border px-4 md:px-6">
<Link
to="/docs/$"
params={{ _splat: '' }}
aria-label="punktfunk documentation"
aria-label="Punktfunk documentation"
className="flex items-center gap-2 no-underline"
>
<BrandMark className="size-6" />
+3 -3
View File
@@ -4,12 +4,12 @@
/* Pull Fumadocs UI's own classes — and @unom/ui's compiled components — into
the Tailwind 4 scan so their utilities aren't purged. @unom/ui is the shared
design-token system the punktfunk marketing site also builds on. */
design-token system the Punktfunk marketing site also builds on. */
@source '../../node_modules/fumadocs-ui/dist/**/*.js';
@source '../../node_modules/@unom/ui/dist/**/*.{js,mjs}';
@source '../../node_modules/@unom/app-ui/dist/**/*.{js,mjs}';
/* ── punktfunk brand ────────────────────────────────────────────────────────
/* ── Punktfunk brand ────────────────────────────────────────────────────────
The brand colour is the violet lens mark. (The marketing site's blue is just
a page background, not the brand.) These values feed both @unom/ui's semantic
token contract (--brand/--primary/--accent/--highlight) and the Fumadocs
@@ -61,7 +61,7 @@
}
@theme {
/* Geist — the punktfunk brand typeface, same as the marketing site
/* Geist — the Punktfunk brand typeface, same as the marketing site
(the @fontsource-variable/geist face is loaded in __root.tsx). */
--font-sans: 'Geist Variable', ui-sans-serif, system-ui, sans-serif;
--font-display: 'Geist Variable', ui-sans-serif, system-ui, sans-serif;