Files
dogfather-universe/workspace/dateien.html
T
DogFatherGitandClaude Opus 5 80639d0bab Abnahme vor der Vorstellung: eine tote Kachel gefunden und geschlossen
Morgen wird die Seite als Produkt vorgestellt. Deshalb eine Pruefung,
die es bisher nicht gab: server/pruef-live-abnahme.mjs geht gegen die
ECHTE Domain statt gegen einen Server auf diesem Rechner.

Der Unterschied ist nicht theoretisch. Zwischen "laeuft bei mir" und
"laeuft im Netz" liegen Caddy, Cloudflare, der Cache-Stempel, das
Zertifikat und der Dienst-Neustart -- genau dort ist am 18.08. und am
22.08.2026 schon zweimal etwas haengengeblieben, das lokal tadellos war.

Sie geht 26 Seiten in DREI Gestalten durch:
  RECHNER      1440 px
  HANDY        390 px, mit Fingerbedienung
  INSTALLIERT  als App vom Startbildschirm -- ohne Adresszeile und ohne
               Zurueck-Knopf des Browsers. Dort faellt auf, was man mit
               Browserleiste nie merkt.

Gemessen je Seite: Konsolenfehler, fehlgeschlagene Anfragen, seitlicher
Ueberlauf, tote Verweise, fehlende Bilder, ueberhaupt Inhalt, Titel.
Dazu die App selbst: Manifest, Name, Start ohne Browserleiste, alle vier
Startbildschirm-Symbole einzeln abgefragt, Hintergrunddienst angemeldet
und aktiv.

DER EINE ECHTE FUND: Auf links.html war die Kachel "Merchandise / Shop"
ein <a href="#"> -- sie sah aus wie ein Verweis, liess sich anklicken
und tat nichts. Auf der Kachel steht "Folgt in Kuerze"; genau dann darf
sie nicht klickbar sein. Ein Knopf, der nichts tut, ist schlimmer als
gar keiner: Man drueckt ihn zweimal und haelt die Seite fuer kaputt.
Jetzt ein <div> mit denselben Klassen -- gleiches Aussehen, kein
Versprechen mehr, das die Seite nicht halten kann.

ZWEI FEHLALARME, beide in MEINER Pruefung, beide aufgeschrieben:
  * Sie meldete "fehlende Bilder" auf zwei Seiten. Es waren versteckte
    Platzhalter (<img hidden> ohne src), die JavaScript erst fuellt --
    der Normalzustand. Jetzt zaehlen nur sichtbare Bilder mit Quelle.
  * Sie meldete "manifest.json nicht ladbar", waehrend curl gleichzeitig
    200 lieferte. Die Probe stand noch auf about:blank und holte von
    dort -- fremde Herkunft, der Browser lehnt ab. Sie hat also nicht
    die Seite geprueft, sondern sich selbst. Erst navigieren, dann
    messen.

Die beiden anderen href="#" auf der Seite (index.html, streamplan.html)
bleiben: Sie sind versteckt und werden von JavaScript gefuellt, sobald
es etwas zu verlinken gibt. Geprueft wird nur, was man auch sieht.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-03 09:48:38 +02:00

102 lines
4.5 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<title>Dateien · Creator Workspace</title>
<meta name="robots" content="noindex, nofollow" />
<meta name="theme-color" content="#05070d" />
<link rel="icon" href="assets/img/favicon.png" />
<link rel="stylesheet" href="assets/css/gate.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/start.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609030948" />
<link rel="stylesheet" href="assets/css/dateien.css?v=202609030948" />
</head>
<body class="start">
<!-- Der Schleier ueber der Buehne (Casper und HasiDog in den unteren
Ecken, siehe start.css). Ein eigenes Element statt eines dritten
Pseudo-Elements -- body hat nur ::before und ::after. -->
<div class="schleier" aria-hidden="true"></div>
<header class="kopfleiste">
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
<path d="M14.5 5.5 8 12l6.5 6.5" />
</svg>
<span class="zurueck-knopf__text">Zurück</span>
</button>
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Creator&nbsp;Workspace</a> · Dateien</span></p>
<div class="kopfleiste__rechts">
<span class="wer" id="wer">…</span>
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
</div>
</header>
<main class="inhalt inhalt--breit">
<section class="kopf-zeile">
<div>
<p class="marke">Ablage</p>
<h1 class="titel">Dateien &amp; Freigaben</h1>
<p class="unterzeile">Entwurf → Review → Freigabe. Die aktuelle Version ist immer klar erkennbar.</p>
</div>
</section>
<!-- Hinweis für alle, die nicht ablegen dürfen (Creator). Steht statt
des Ablegefeldes, damit klar ist warum -- ein einfach fehlendes
Feld wirkt wie ein Fehler. -->
<p class="nur-lesen" id="nur-lesen" hidden>
Hier siehst du die Dateien deines Bereichs. <strong>Abgelegt werden sie
von DogFather oder von Scouts</strong> – du kannst sie öffnen, aber nichts hochladen.
</p>
<!-- Ablegefeld. Klick öffnet die Dateiauswahl, Ziehen funktioniert
ebenso -- beides landet im selben Ablauf. -->
<div class="ablage" id="ablage" tabindex="0" role="button"
aria-label="Datei auswählen oder hierher ziehen">
<svg class="ablage__zeichen" viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 16V4m0 0L7.5 8.5M12 4l4.5 4.5" />
<path d="M4 15v3.5A1.5 1.5 0 0 0 5.5 20h13a1.5 1.5 0 0 0 1.5-1.5V15" />
</svg>
<p class="ablage__text">Datei hierher ziehen oder <strong>auswählen</strong></p>
<p class="ablage__klein" id="ablage-grenze">bis 25 MB</p>
<input type="file" id="feld-datei" hidden />
</div>
<div class="hochlade-zeile" id="zuordnung" hidden>
<div class="feld feld--breit">
<label class="feld-schild" for="f-creator">Ablegen im Bereich von <span class="leise">(optional)</span></label>
<select id="f-creator"><option value="">— kein Bereich —</option></select>
</div>
<!-- Wer die Datei sehen darf. Mehrfachauswahl: dieselbe Datei kann
an mehrere Personen gehen, ohne sie mehrfach hochzuladen. -->
<div class="feld feld--breit">
<label class="feld-schild">Wer darf sie sehen?</label>
<p class="leise" id="wahl-hinweis">Niemand ausgewählt – dann sieht sie nur DogFather.</p>
<div class="wahl" id="wahl"></div>
</div>
</div>
<p class="fortschritt" id="fortschritt" hidden><span id="fortschritt-text"></span></p>
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
<div class="filter" id="filter">
<button type="button" class="schritt" data-status="" aria-pressed="true">Alle</button>
<button type="button" class="schritt" data-status="entwurf" aria-pressed="false">Entwurf</button>
<button type="button" class="schritt" data-status="review" aria-pressed="false">Review</button>
<button type="button" class="schritt" data-status="freigegeben" aria-pressed="false">Freigegeben</button>
</div>
<div id="liste" aria-busy="true"><p class="leise">Dateien werden geladen …</p></div>
</main>
<script src="assets/js/wahl.js?v=202609030948" defer></script>
<script src="assets/js/bereiche.js?v=202609030948" defer></script>
<script src="assets/js/kopf.js?v=202609030948" defer></script>
<script src="assets/js/dateien.js?v=202609030948" defer></script>
</body>
</html>