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:
@@ -1,7 +1,7 @@
|
||||
THIRD-PARTY SOFTWARE NOTICES
|
||||
============================================================================
|
||||
|
||||
punktfunk (https://git.unom.io/unom/punktfunk) is licensed under MIT OR Apache-2.0.
|
||||
Punktfunk (https://git.unom.io/unom/punktfunk) is licensed under MIT OR Apache-2.0.
|
||||
The binaries it ships statically/dynamically link the third-party Rust crates listed
|
||||
below. Each is distributed under its own permissive license; the full license texts
|
||||
follow the manifest. This file is generated by scripts/gen-third-party-notices.py
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
THIRD-PARTY SOFTWARE NOTICES
|
||||
============================================================================
|
||||
|
||||
punktfunk (https://git.unom.io/unom/punktfunk) is licensed under MIT OR Apache-2.0.
|
||||
Punktfunk (https://git.unom.io/unom/punktfunk) is licensed under MIT OR Apache-2.0.
|
||||
The binaries it ships statically/dynamically link the third-party Rust crates below.
|
||||
Each is distributed under its own permissive license; full texts follow.
|
||||
Generated by `cargo about generate about.hbs` (see about.toml) — do not edit by hand.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
THIRD-PARTY SOFTWARE NOTICES
|
||||
============================================================================
|
||||
|
||||
punktfunk (https://git.unom.io/unom/punktfunk) is licensed under MIT OR Apache-2.0.
|
||||
Punktfunk (https://git.unom.io/unom/punktfunk) is licensed under MIT OR Apache-2.0.
|
||||
The binaries it ships statically/dynamically link the third-party Rust crates listed
|
||||
below. Each is distributed under its own permissive license; the full license texts
|
||||
follow the manifest. This file is generated by scripts/gen-third-party-notices.py
|
||||
|
||||
@@ -168,9 +168,9 @@ internal fun LocalNetworkDialog(onAllow: () -> Unit, onSettings: () -> Unit, onD
|
||||
title = { Text("Allow local network access") },
|
||||
text = {
|
||||
Text(
|
||||
"Android blocks punktfunk from talking to devices on your network, so it can't " +
|
||||
"Android blocks Punktfunk from talking to devices on your network, so it can't " +
|
||||
"find or reach any host until you allow it. If no prompt appears when you tap " +
|
||||
"Allow, enable “Nearby devices” for punktfunk in system settings.",
|
||||
"Allow, enable “Nearby devices” for Punktfunk in system settings.",
|
||||
)
|
||||
},
|
||||
confirmButton = {
|
||||
|
||||
@@ -941,7 +941,7 @@ fun ConnectScreen(
|
||||
color = MaterialTheme.colorScheme.onErrorContainer,
|
||||
)
|
||||
Text(
|
||||
"Android blocks punktfunk from finding or reaching hosts until you allow it.",
|
||||
"Android blocks Punktfunk from finding or reaching hosts until you allow it.",
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
color = MaterialTheme.colorScheme.onErrorContainer,
|
||||
textAlign = TextAlign.Center,
|
||||
|
||||
@@ -191,7 +191,7 @@ fun ControllersScreen(gamepadSetting: Int, onBack: () -> Unit) {
|
||||
dsUsb?.let { DsRow(it) }
|
||||
if (pads.isEmpty() && !sc2Present) {
|
||||
Text(
|
||||
"No controller detected. punktfunk can only forward devices Android " +
|
||||
"No controller detected. Punktfunk can only forward devices Android " +
|
||||
"classifies as a gamepad or joystick — a pad connected through an adapter " +
|
||||
"or hub may show up under \"Other input devices\" below with the adapter's " +
|
||||
"identity, or not at all.",
|
||||
|
||||
@@ -463,11 +463,11 @@ fun GamepadLocalNetworkDialog(onAllow: () -> Unit, onSettings: () -> Unit, onDis
|
||||
),
|
||||
) {
|
||||
DialogText(
|
||||
"Android blocks punktfunk from talking to devices on your network, so it can't find " +
|
||||
"Android blocks Punktfunk from talking to devices on your network, so it can't find " +
|
||||
"or reach any host until you allow it.",
|
||||
)
|
||||
DialogText(
|
||||
"If no prompt appears after Allow, enable “Nearby devices” for punktfunk in " +
|
||||
"If no prompt appears after Allow, enable “Nearby devices” for Punktfunk in " +
|
||||
"system settings.",
|
||||
)
|
||||
}
|
||||
|
||||
@@ -344,7 +344,7 @@ struct HomeView: View {
|
||||
ContentUnavailableView {
|
||||
Label("No Hosts", systemImage: "rectangle.connected.to.line.below")
|
||||
} description: {
|
||||
Text("Add your punktfunk host with the + button, or scan the network again.")
|
||||
Text("Add your Punktfunk host with the + button, or scan the network again.")
|
||||
} actions: {
|
||||
Button("Add Host") { showAddHost = true }
|
||||
.glassProminentButtonStyle()
|
||||
|
||||
@@ -453,7 +453,7 @@ public final class HostDiscovery: ObservableObject {
|
||||
|
||||
private static func instanceName(_ endpoint: NWEndpoint) -> String {
|
||||
if case let .service(name, _, _, _) = endpoint { return name }
|
||||
return "punktfunk host"
|
||||
return "Punktfunk host"
|
||||
}
|
||||
|
||||
private static func entry(_ txt: NWTXTRecord, _ field: String) -> String? {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
THIRD-PARTY SOFTWARE NOTICES
|
||||
============================================================================
|
||||
|
||||
punktfunk (https://git.unom.io/unom/punktfunk) is licensed under MIT OR Apache-2.0.
|
||||
Punktfunk (https://git.unom.io/unom/punktfunk) is licensed under MIT OR Apache-2.0.
|
||||
The binaries it ships statically/dynamically link the third-party Rust crates listed
|
||||
below. Each is distributed under its own permissive license; the full license texts
|
||||
follow the manifest. This file is generated by scripts/gen-third-party-notices.py
|
||||
|
||||
@@ -244,7 +244,7 @@ fn run_headless_cli(args: &[String], identity: (String, String)) {
|
||||
#[cfg(windows)]
|
||||
fn discover_and_print() {
|
||||
use std::time::{Duration, Instant};
|
||||
println!("Browsing the LAN for punktfunk hosts (~5 s)…");
|
||||
println!("Browsing the LAN for Punktfunk hosts (~5 s)…");
|
||||
let (rx, _rescan) = discovery::browse();
|
||||
let deadline = Instant::now() + Duration::from_secs(5);
|
||||
let mut seen = std::collections::HashSet::new();
|
||||
|
||||
@@ -271,7 +271,7 @@ impl KwinFakeInjector {
|
||||
)?;
|
||||
// Authenticate (the legacy handshake; for an interface-authorized client KWin accepts it
|
||||
// without a dialog — same as krdpserver/krfb headless).
|
||||
fake.authenticate("punktfunk".into(), "remote streaming input".into());
|
||||
fake.authenticate("Punktfunk".into(), "remote streaming input".into());
|
||||
queue
|
||||
.roundtrip(&mut state)
|
||||
.context("fake_input authenticate roundtrip")?;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "punktfunk-docs",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"description": "punktfunk documentation site — Fumadocs on TanStack Start (Vite + Nitro/bun)",
|
||||
"description": "Punktfunk documentation site — Fumadocs on TanStack Start (Vite + Nitro/bun)",
|
||||
"scripts": {
|
||||
"dev": "vite dev --port 3001",
|
||||
"build": "vite build",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -224,7 +224,7 @@ path below is the maintainer's test box — substitute your own `punktfunk-probe
|
||||
# Recover a WEDGED driver. Symptom: every session fails with
|
||||
# create virtual output: pf-vdisplay ADD ...: DeviceIoControl(0x222400): Element nicht gefunden (0x80070490)
|
||||
# i.e. ERROR_NOT_FOUND — sustained ADD/REMOVE churn exhausted the IddCx monitor slots (ghost
|
||||
# "Generic Monitor (punktfunk)" nodes pile up, target_ids climb). A host restart's CLEAR_ALL does NOT
|
||||
# "Generic Monitor (Punktfunk)" nodes pile up, target_ids climb). A host restart's CLEAR_ALL does NOT
|
||||
# fix it; the driver instance must be reloaded. This clears the ghosts + cycles the adapter (no reboot —
|
||||
# this box boots to Proxmox).
|
||||
powershell -ExecutionPolicy Bypass -File reset-pf-vdisplay.ps1 -Verify -Probe C:\t-goal1\debug\punktfunk-probe.exe
|
||||
|
||||
@@ -83,7 +83,7 @@ export const runPluginCli = async <E, R>(opts: {
|
||||
} catch (e) {
|
||||
const hint =
|
||||
e instanceof HostRequestError
|
||||
? " (is the punktfunk host running?)"
|
||||
? " (is the Punktfunk host running?)"
|
||||
: "";
|
||||
console.error(`${opts.def.name}: ${name} failed: ${e}${hint}`);
|
||||
process.exitCode = 1;
|
||||
|
||||
@@ -137,7 +137,7 @@ def main():
|
||||
w("THIRD-PARTY SOFTWARE NOTICES")
|
||||
w("=" * 76)
|
||||
w("")
|
||||
w("punktfunk (https://git.unom.io/unom/punktfunk) is licensed under MIT OR Apache-2.0.")
|
||||
w("Punktfunk (https://git.unom.io/unom/punktfunk) is licensed under MIT OR Apache-2.0.")
|
||||
w("The binaries it ships statically/dynamically link the third-party Rust crates listed")
|
||||
w("below. Each is distributed under its own permissive license; the full license texts")
|
||||
w("follow the manifest. This file is generated by scripts/gen-third-party-notices.py")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// punktfunk brand mark: two overlapping circles forming a lens — the violet
|
||||
// Punktfunk brand mark: two overlapping circles forming a lens — the violet
|
||||
// brand identity (flattened from the clients/apple punktfunk_Logo.icon, shared
|
||||
// verbatim with the marketing site + docs). Back-to-front: large light-violet
|
||||
// circle, deep-violet circle, light highlight where they overlap.
|
||||
|
||||
@@ -2,7 +2,7 @@ import { cn } from "@/lib/utils";
|
||||
import { BrandMark } from "./brand-mark";
|
||||
import { Wordmark } from "./wordmark";
|
||||
|
||||
// Full punktfunk lockup: the lens mark anchored to the top-left corner of the
|
||||
// Full Punktfunk lockup: the lens mark anchored to the top-left corner of the
|
||||
// "funk" wordmark. Size the lockup with a width on the wrapper (e.g. `w-40`);
|
||||
// the mark scales as a fraction of that width.
|
||||
export function Logo({ className }: { className?: string }) {
|
||||
|
||||
@@ -3,7 +3,7 @@ import { useEffect, useRef } from "react";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { m } from "@/paraglide/messages";
|
||||
|
||||
// The punktfunk lens, alive. The two overlapping circles of the brand mark are
|
||||
// The Punktfunk lens, alive. The two overlapping circles of the brand mark are
|
||||
// recreated from divs and animated as if orbiting on a path whose long axis points
|
||||
// INTO the screen, so depth is the dominant motion: each circle surges toward and
|
||||
// away from the viewer in antiphase, passing in front of and behind the other.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
// The punktfunk "funk" wordmark — the real brand typo, vectorised from the
|
||||
// The Punktfunk "funk" wordmark — the real brand typo, vectorised from the
|
||||
// marketing logo. currentColor so it recolours per surface; defaults to the
|
||||
// light-violet lens highlight that reads on the dark console chrome. Size via
|
||||
// height (e.g. `h-5`); width follows the viewBox.
|
||||
|
||||
@@ -73,7 +73,7 @@ export const Incompatible: Story = {
|
||||
...BASE,
|
||||
compatible: false,
|
||||
incompatible_reason:
|
||||
"needs punktfunk host ≥ 0.16.0 (this host is 0.15.0)",
|
||||
"needs Punktfunk host ≥ 0.16.0 (this host is 0.15.0)",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@
|
||||
Tailwind 4 scan so their utilities aren't purged. */
|
||||
@source "../node_modules/@unom/ui/dist/**/*.{js,mjs}";
|
||||
|
||||
/* ── punktfunk brand · violet product chrome ────────────────────────────────
|
||||
/* ── Punktfunk brand · violet product chrome ────────────────────────────────
|
||||
Two themes on one violet identity: LIGHT (lavender docs surface — the same
|
||||
palette the design/Scalar reference uses: white bg, faint-violet cards/borders,
|
||||
#6c5bf3 brand) is the :root default; DARK (the violet-tinted app-icon chrome
|
||||
@@ -27,7 +27,7 @@
|
||||
:root {
|
||||
--radius: 0.625rem;
|
||||
|
||||
/* Brand — the violet lens mark (from the punktfunk app icon). Theme-independent. */
|
||||
/* Brand — the violet lens mark (from the Punktfunk app icon). Theme-independent. */
|
||||
--pf-brand: #6c5bf3; /* deep violet — primary on light */
|
||||
--pf-brand-light: #a79ff8; /* light violet — primary on dark */
|
||||
--pf-highlight: #d2c9fb; /* lens highlight */
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Penner easing tokens — shared with the punktfunk marketing site + @unom/ui.
|
||||
/* Penner easing tokens — shared with the Punktfunk marketing site + @unom/ui.
|
||||
@unom/ui's accordion/collapsible/material animations resolve these by name. */
|
||||
@theme {
|
||||
--ease-in-sine: cubic-bezier(0.47, 0, 0.745, 0.715);
|
||||
|
||||
Reference in New Issue
Block a user