🌐 đŸ€– Webfonts ĂŒber assets.mueller.network einbinden statt ins public Repo committen #8

Open
opened 2026-08-13 18:39:00 +02:00 by holm · 2 comments
Owner
Dimension Bewertung EinschÀtzung
Aufwand ███░░░░░░░ Gering im Projekt, mittel in der Infra (Host + CORS)
Nutzen ████████░░ Hoch — App sieht auf fremden GerĂ€ten aus wie gedacht, Repo bleibt sauber
BruchhĂ€ufigkeit ████████░░ Hoch — bisher fiel jedes fremde GerĂ€t auf System-Mono zurĂŒck
Nachhaltigkeit █████████░ Sehr hoch — eine Font-Quelle fĂŒr alle Projekte statt Kopien pro Repo
Dringlichkeit █████░░░░░ Mittel — kosmetisch, aber Teil des Handy-Reports

Ausgangslage

.gitignore schließt die Webfonts aus (assets/*.woff2). Folge: fremde GerĂ€te und frische Clones rendern mit System-Monospace. Auf dem Handy verschĂ€rften dessen breitere Metriken die UmbrĂŒche aus #7.

Web-Lizenzen liegen vor (U.S. Graphics, MX-012 Berkeley Monoℱ Web Fonts, Order Z2P8LVVY vom 2026-07-07). Erste Überlegung war deshalb, die Dateien einzuchecken.

Entscheidung (Holm 2026-08-13)

Nicht ins public Repo. Stattdessen ein zentraler Asset-Host assets.mueller.network, von dem alle Projekte die Fonts einbinden. Das ist genau der Fall, den eine Webfont-Lizenz typischerweise abdeckt (Ausliefern von einer eigenen Web-Property), vermeidet die dauerhafte Weitergabe ĂŒber die Git-History und entfernt die Font-Duplikate aus jedem einzelnen Repo.

Projekt-seitige Umsetzung

@font-face mit zwei Quellen in dieser Reihenfolge:

src: url('assets/BerkeleyMono-Regular.woff2') format('woff2'),
     url('https://assets.mueller.network/fonts/berkeley-mono/BerkeleyMono-Regular.woff2') format('woff2');

Damit gilt:

Situation Quelle Netz nötig
Holms Arbeitskopie (Dateien liegen in assets/) lokal nein
frischer Clone / Handy Host ja
beides nicht erreichbar System-Monospace nein

Die Offline-first-Zusage des Projekts bleibt damit intakt — der Font ist die einzige optionale Netz-Ressource, und das Layout trĂ€gt nachweislich auch ohne (verifiziert bei 320 px mit Fallback-Fonts).

Infra-seitig (Holm, außerhalb dieses Repos)

  • Host anlegen, Fonts unter /fonts/<family>/ ablegen
  • CORS ist Pflicht: Fonts werden per @font-face immer im CORS-Modus geladen. Ohne Access-Control-Allow-Origin verweigert der Browser sie, auch bei HTTP 200. Von file:// ist der Origin null → * nötig.
  • lange Cache-Zeiten, Dateinamen beim Austausch versionieren
  • optional Referer-basierte Hotlink-Bremse; das schrĂ€nkt aber file:// (Origin null) mit ein

DNS wurde absichtlich nicht abgefragt — deSEC hat fixe TTL 1h, eine negative Antwort vor der Anlage wĂŒrde bis zu einer Stunde kleben.

đŸ€– angelegt von Claude v00 (API/Token holm)

| Dimension | Bewertung | EinschĂ€tzung | |---|---|---| | Aufwand | `███░░░░░░░` | Gering im Projekt, mittel in der Infra (Host + CORS) | | Nutzen | `████████░░` | Hoch — App sieht auf fremden GerĂ€ten aus wie gedacht, Repo bleibt sauber | | BruchhĂ€ufigkeit | `████████░░` | Hoch — bisher fiel jedes fremde GerĂ€t auf System-Mono zurĂŒck | | Nachhaltigkeit | `█████████░` | Sehr hoch — eine Font-Quelle fĂŒr alle Projekte statt Kopien pro Repo | | Dringlichkeit | `█████░░░░░` | Mittel — kosmetisch, aber Teil des Handy-Reports | ## Ausgangslage `.gitignore` schließt die Webfonts aus (`assets/*.woff2`). Folge: fremde GerĂ€te und frische Clones rendern mit System-Monospace. Auf dem Handy verschĂ€rften dessen breitere Metriken die UmbrĂŒche aus [#7](https://forgejo.mueller.network/holm.tools.public/oui-decode/issues/7). Web-Lizenzen liegen vor (U.S. Graphics, `MX-012 Berkeley Monoℱ Web Fonts`, Order `Z2P8LVVY` vom 2026-07-07). Erste Überlegung war deshalb, die Dateien einzuchecken. ## Entscheidung (Holm 2026-08-13) **Nicht ins public Repo.** Stattdessen ein zentraler Asset-Host `assets.mueller.network`, von dem *alle* Projekte die Fonts einbinden. Das ist genau der Fall, den eine Webfont-Lizenz typischerweise abdeckt (Ausliefern von einer eigenen Web-Property), vermeidet die dauerhafte Weitergabe ĂŒber die Git-History und entfernt die Font-Duplikate aus jedem einzelnen Repo. ## Projekt-seitige Umsetzung `@font-face` mit **zwei Quellen** in dieser Reihenfolge: ```css src: url('assets/BerkeleyMono-Regular.woff2') format('woff2'), url('https://assets.mueller.network/fonts/berkeley-mono/BerkeleyMono-Regular.woff2') format('woff2'); ``` Damit gilt: | Situation | Quelle | Netz nötig | |---|---|---| | Holms Arbeitskopie (Dateien liegen in `assets/`) | lokal | nein | | frischer Clone / Handy | Host | ja | | beides nicht erreichbar | System-Monospace | nein | Die Offline-first-Zusage des Projekts bleibt damit intakt — der Font ist die einzige optionale Netz-Ressource, und das Layout trĂ€gt nachweislich auch ohne (verifiziert bei 320 px mit Fallback-Fonts). ## Infra-seitig (Holm, außerhalb dieses Repos) - Host anlegen, Fonts unter `/fonts/<family>/` ablegen - **CORS ist Pflicht**: Fonts werden per `@font-face` immer im CORS-Modus geladen. Ohne `Access-Control-Allow-Origin` verweigert der Browser sie, auch bei HTTP 200. Von `file://` ist der Origin `null` → `*` nötig. - lange Cache-Zeiten, Dateinamen beim Austausch versionieren - optional Referer-basierte Hotlink-Bremse; das schrĂ€nkt aber `file://` (Origin `null`) mit ein DNS wurde **absichtlich nicht abgefragt** — deSEC hat fixe TTL 1h, eine negative Antwort vor der Anlage wĂŒrde bis zu einer Stunde kleben. > đŸ€– angelegt von Claude v00 (API/Token holm)
Author
Owner

Lizenzrecherche — PrimĂ€rquellen, und sie stĂŒtzen die Host-Lösung

Berkeley Mono, gekauft als MX-012. Die Produktseite weist aus: License Tier Developer, Commercial Use No, License Grant LR-02 Website License Grant. Maßgeblich ist damit die unter usgraphics.com/legal/licenses als Developer License verlinkte EULA (Berkeley Graphics LLC, DX-100-05, April 2023).

§1.08 „Web Font Use" — means any Web Server that uses the Licensed Software exclusively for displaying fonts on websites using the Cascading Style Sheet (CSS) @font-face rule. CSS @font-face rule must link to WOFF and WOFF2 font files (as part of the Font Package) hosted on a Web Server.

§5 Unauthorized Access — Licensee is obligated to take reasonable precautions and measures to prevent unauthorized access or copying of the Licensed Software. Licensed Software shall never be shared publicly using an HTML link or otherwise except for permitted use in the context of Web Font Use.

Tabelle 2.1 der EULA: Web Font Use = Yes, Users = 1. Und §1.15 definiert, was ein „User" im Serverkontext ist: „If a system administrator installs Licensed Software on 5 Web Servers, that constitutes 5 Users."

Daraus folgt dreierlei:

  1. Der ursprĂŒngliche Plan, die Dateien ins public Repo zu committen, wĂ€re ein Verstoß gegen §5 gewesen. Gut, dass wir es nicht getan haben.
  2. fonts.assets.mueller.network ist exakt der in §1.08 beschriebene erlaubte Fall.
  3. Ein Asset-Host ist gedeckt — 1 User = 1 Web Server. Ein zweiter Font-Host brĂ€uchte eine zweite Lizenz. Das spricht zusĂ€tzlich fĂŒr die zentrale Lösung statt Kopien pro Projekt.

PragmataPro (FSD), fsd.it/shop/terms:

  • 2.2 Web License — deckt eine (1) Website: „a single domain name and its subdomains", bis 100.000 Page Views pro Monat und Font.
  • 7.1 Technical Requirements — @font-face, WOFF2/WOFF, und: „Access must be restricted through at least one of the following methods: Referrer checking · IP restriction · User authentication". Das ist Pflicht, nicht Empfehlung.

Folgen fĂŒr die Domainwahl — und die sind gĂŒnstig: alles unterhalb mueller.network zĂ€hlt FSD-seitig als eine Site. Ein Web-License-Kauf deckt damit sĂ€mtliche Projekte, solange sie unter mueller.network laufen. fonts.assets.mueller.network ist selbst eine Subdomain davon.

Aber: der nach 7.1 verpflichtende Referrer-Check blockt file:// (Origin null, kein Referer). Die App will also ĂŒber eine URL unterhalb mueller.network geöffnet werden, nicht per Doppelklick auf die lokale Datei. FĂŒr Holms Arbeitskopie ist das egal — dort greift die erste @font-face-Quelle (assets/, lokal vorhanden).

Umgesetzt

@font-face nennt jetzt zwei Quellen je Schnitt (lokal → Host), Host-Name gemĂ€ĂŸ Holm: fonts.assets.mueller.network. Pfade: /berkeley-mono/
 und /pragmatapro/
.

Offen bei Holm (Infra, außerhalb dieses Repos)

  • Host anlegen, CORS setzen (@font-face lĂ€dt immer im CORS-Modus; ohne Access-Control-Allow-Origin verweigert der Browser die Datei auch bei HTTP 200)
  • Referrer-Check konfigurieren — Lizenzpflicht aus FSD 7.1, zugleich die „reasonable precautions" aus Berkeley §5
  • kein Directory-Listing, lange Cache-Zeiten, Dateinamen beim Austausch versionieren
  • zu prĂŒfen: ob die vorliegende PragmataProLiga-Bold.woff2 aus einer Web-Lizenz stammt. FSD 5.2 untersagt „File format conversion between desktop, web, and app versions" — eine selbst aus einer Desktop-OTF erzeugte WOFF2 wĂ€re nicht gedeckt. Das kann ich nicht von außen feststellen.

DNS wurde weiterhin nicht abgefragt (deSEC, fixe TTL 1h).

đŸ€– Kommentar von Claude v00 (API/Token holm)

## Lizenzrecherche — PrimĂ€rquellen, und sie stĂŒtzen die Host-Lösung **Berkeley Mono**, gekauft als `MX-012`. Die [Produktseite](https://usgraphics.com/catalog/MX-012) weist aus: License Tier *Developer*, Commercial Use *No*, License Grant *LR-02 Website License Grant*. Maßgeblich ist damit die unter [usgraphics.com/legal/licenses](https://usgraphics.com/legal/licenses) als *Developer License* verlinkte EULA (Berkeley Graphics LLC, `DX-100-05`, April 2023). > **§1.08 „Web Font Use"** — means any *Web Server* that uses the *Licensed Software* exclusively for displaying fonts on websites using the Cascading Style Sheet (CSS) @font-face rule. CSS @font-face rule must link to WOFF and WOFF2 font files (as part of the *Font Package*) hosted on a *Web Server*. > > **§5 Unauthorized Access** — *Licensee* is obligated to take reasonable precautions and measures to prevent unauthorized access or copying of the *Licensed Software*. **Licensed Software shall never be shared publicly using an HTML link or otherwise except for permitted use in the context of Web Font Use.** Tabelle 2.1 der EULA: *Web Font Use* = **Yes**, Users = **1**. Und §1.15 definiert, was ein „User" im Serverkontext ist: „If a system administrator installs Licensed Software on 5 Web Servers, that constitutes 5 Users." **Daraus folgt dreierlei:** 1. Der ursprĂŒngliche Plan, die Dateien ins public Repo zu committen, wĂ€re ein **Verstoß gegen §5** gewesen. Gut, dass wir es nicht getan haben. 2. `fonts.assets.mueller.network` ist **exakt** der in §1.08 beschriebene erlaubte Fall. 3. **Ein** Asset-Host ist gedeckt — 1 User = 1 Web Server. Ein zweiter Font-Host brĂ€uchte eine zweite Lizenz. Das spricht zusĂ€tzlich fĂŒr die zentrale Lösung statt Kopien pro Projekt. **PragmataPro** (FSD), [fsd.it/shop/terms](https://fsd.it/shop/terms/): - **2.2 Web License** — deckt **eine (1) Website: „a single domain name and its subdomains"**, bis 100.000 Page Views pro Monat und Font. - **7.1 Technical Requirements** — @font-face, WOFF2/WOFF, und: „Access must be restricted through at least one of the following methods: Referrer checking · IP restriction · User authentication". Das ist **Pflicht, nicht Empfehlung**. **Folgen fĂŒr die Domainwahl** — und die sind gĂŒnstig: alles unterhalb `mueller.network` zĂ€hlt FSD-seitig als **eine** Site. Ein Web-License-Kauf deckt damit sĂ€mtliche Projekte, solange sie unter `mueller.network` laufen. `fonts.assets.mueller.network` ist selbst eine Subdomain davon. **Aber**: der nach 7.1 verpflichtende Referrer-Check blockt `file://` (Origin `null`, kein Referer). Die App will also ĂŒber eine URL unterhalb `mueller.network` geöffnet werden, nicht per Doppelklick auf die lokale Datei. FĂŒr Holms Arbeitskopie ist das egal — dort greift die erste `@font-face`-Quelle (`assets/`, lokal vorhanden). ## Umgesetzt `@font-face` nennt jetzt zwei Quellen je Schnitt (lokal → Host), Host-Name gemĂ€ĂŸ Holm: **`fonts.assets.mueller.network`**. Pfade: `/berkeley-mono/
` und `/pragmatapro/
`. ## Offen bei Holm (Infra, außerhalb dieses Repos) - Host anlegen, **CORS** setzen (`@font-face` lĂ€dt immer im CORS-Modus; ohne `Access-Control-Allow-Origin` verweigert der Browser die Datei auch bei HTTP 200) - **Referrer-Check** konfigurieren — Lizenzpflicht aus FSD 7.1, zugleich die „reasonable precautions" aus Berkeley §5 - kein Directory-Listing, lange Cache-Zeiten, Dateinamen beim Austausch versionieren - zu prĂŒfen: ob die vorliegende `PragmataProLiga-Bold.woff2` aus einer **Web**-Lizenz stammt. FSD 5.2 untersagt „File format conversion between desktop, web, and app versions" — eine selbst aus einer Desktop-OTF erzeugte WOFF2 wĂ€re nicht gedeckt. Das kann ich nicht von außen feststellen. DNS wurde weiterhin **nicht** abgefragt (deSEC, fixe TTL 1h). > đŸ€– Kommentar von Claude v00 (API/Token holm)
Author
Owner

Offene Frage zur Font-Herkunft: geklÀrt

Holm 2026-08-13: Die vorliegenden WOFF2-Dateien sind die aus dem Lizenzkauf heruntergeladenen Originale — nicht re-encoded, nicht konvertiert, nicht modifiziert.

Damit entfĂ€llt der letzte offene Punkt aus dem vorigen Kommentar. FSD 5.2 („File format conversion between desktop, web, and app versions") ist nicht berĂŒhrt, weil keine Konvertierung stattgefunden hat. Ebenso Berkeley Mono §1.12/§8 (Derivative Work): die Dateien werden unverĂ€ndert ausgeliefert.

Zur Abgrenzung, weil es in der Zusammenfassung missverstĂ€ndlich nebeneinanderstand: Das Modifikationsverbot betrifft ausschließlich das Erzeugen eines Subsets (#9) — dabei entstĂŒnde eine neue, verĂ€nderte Datei. Das Ausliefern der gekauften Originale per @font-face ist der ausdrĂŒcklich erlaubte Fall (Berkeley Mono §1.08 Web Font Use, FSD 2.2 Web License).

Offen bleibt fĂŒr dieses Issue nur noch die Infrastruktur: Host anlegen, CORS, ZugriffsbeschrĂ€nkung nach FSD 7.1.

đŸ€– Kommentar von Claude v00 (API/Token holm)

## Offene Frage zur Font-Herkunft: geklĂ€rt Holm 2026-08-13: Die vorliegenden WOFF2-Dateien sind die **aus dem Lizenzkauf heruntergeladenen Originale** — nicht re-encoded, nicht konvertiert, nicht modifiziert. Damit entfĂ€llt der letzte offene Punkt aus dem vorigen Kommentar. FSD 5.2 („File format conversion between desktop, web, and app versions") ist nicht berĂŒhrt, weil keine Konvertierung stattgefunden hat. Ebenso Berkeley Mono §1.12/§8 (*Derivative Work*): die Dateien werden **unverĂ€ndert** ausgeliefert. Zur Abgrenzung, weil es in der Zusammenfassung missverstĂ€ndlich nebeneinanderstand: Das Modifikationsverbot betrifft ausschließlich das **Erzeugen eines Subsets** ([#9](https://forgejo.mueller.network/holm.tools.public/oui-decode/issues/9)) — dabei entstĂŒnde eine neue, verĂ€nderte Datei. Das Ausliefern der gekauften Originale per `@font-face` ist der ausdrĂŒcklich erlaubte Fall (Berkeley Mono §1.08 *Web Font Use*, FSD 2.2 *Web License*). Offen bleibt fĂŒr dieses Issue nur noch die Infrastruktur: Host anlegen, CORS, ZugriffsbeschrĂ€nkung nach FSD 7.1. > đŸ€– Kommentar von Claude v00 (API/Token holm)
Sign in to join this conversation.
No description provided.