Schritt 4 von 4 -- damit sind beide Wuensche vom 22.08.2026 vollstaendig:
"wenn sie drauf druecken sollen sie auch sehen was ich schon gemacht habe
von dem was im plan war" und "die kunden sollen mir auch nachrichten
hinterlassen koennen".
AUFGABENLISTE IM PROJEKT
Bisher sah der Kunde nur die Phase ("Design . 3/7") -- eine Zahl ohne
Inhalt. Sie beantwortet die eigentliche Frage nicht: WAS ist denn fertig?
Die Liste steht GANZ OBEN, direkt nach dem Projektkopf, noch vor
Zahlungen und Dateien. Die sind wichtig, aber sie sind nicht der Grund
fuer den Klick.
Zwei Entscheidungen praegen die Ansicht:
1. Offene Kundenpunkte stehen in einem EIGENEN Kasten ganz oben ("Das
brauche ich noch von dir"), nicht nur farblich markiert irgendwo
mittendrin. Wer eine lange Liste sieht, liest sie als Bericht ueber
fremde Arbeit und ueberliest seinen eigenen Teil -- genau daraus
entstehen die meisten Verzoegerungen. Ist nichts offen, steht das
auch da: "Von dir wird gerade nichts gebraucht." Eine gute Nachricht
darf ausgesprochen werden.
2. Der Kunde hakt seine eigenen Punkte selbst ab. Nur diese haben einen
Knopf; bei fremden Punkten ist das Zeichen reine Anzeige. Ein Knopf,
der nichts tut, laesst die Seite kaputt wirken. Geprueft: 4 Knoepfe
bei 2 offenen eigenen Punkten (sie erscheinen zweimal), 5 feste.
Grosse Zahl statt Prozent: "2 von 6 erledigt" ist greifbar, "33 %" ist
eine Rechnung, die niemand fuehlt. Der Balken traegt die vier
Prozessfarben -- dieselben wie auf der Ablaufseite und in der Verwaltung.
Der Ton ist bewusst gewaehlt. Der Kunde liest die Liste, wenn er unsicher
ist -- also im Zweifel schon angespannt. "Wir warten auf dich" waere
Druck, "Das brauche ich noch von dir" ist eine Bitte.
POSTFACH AUF DER UEBERSICHT
Bewusst auf der Uebersicht, nicht im Projekt: Wer kein Projekt hat -- oder
eine Frage, die zu keinem gehoert -- konnte vorher gar nicht schreiben und
musste zur E-Mail greifen. Damit war der Verlauf weg, sobald man ihn
brauchte.
Niedrigschwellig: kein Betreff, kein Pflichtfeld, der Projektbezug ist
freiwillig. Wer glaubt, eine Nachricht muesse eine "richtige" Anfrage
sein, schreibt gar nicht erst -- und genau die kurzen Fragen sollen hier
landen. Wird nachgeladen, damit die Uebersicht sofort dasteht.
Projekt- und Aufgabendaten werden gleichzeitig angefordert statt
nacheinander -- sonst waere die Wartezeit die Summe beider Anfragen. Die
Aufgabenliste darf dabei fehlschlagen, ohne die Seite mitzureissen: Wer
wegen einer leeren Liste seine Zahlungen nicht mehr saehe, waere
schlechter dran als vorher.
EIN SICHTBARER FEHLER GEFUNDEN
Auf dem Screenshot stand "Ideen & Aenderungswuensche". Ursache ist
eine Falle mit zwei Wegen: Texte ueber data-i18n landen als HTML in der
Seite, dort ist "&" richtig. Derselbe Text im JavaScript laeuft aber
durch die Absicherung und wird ein zweites Mal kodiert. Derselbe Baustein
ist also je nach Verwendungsort richtig oder falsch.
Das kann man nicht im Kopf behalten -- deshalb neu pruef-texte.mjs mit
ZWEI Pruefungen:
Anzeige: alle 11 Seiten x 5 Sprachen = 55 Kombinationen, sichtbarer
Text darf keine Kodierungsreste enthalten.
Quelltext: welcher Baustein mit "&" wird irgendwo abgesichert
eingesetzt?
Beide sind noetig. Gegengeprueft: Die Anzeigepruefung allein haette den
Fehler NICHT gefunden, weil die Ideen-Karte erst nach einer Anmeldung
erscheint. Die Quelltextpruefung findet ihn ohne Anzeige.
Auch die Quelltextpruefung selbst wurde zweimal gegengeprueft: Zuerst
meldete sie zusaetzlich po_senden ("Senden", voellig harmlos) -- ihre
Blockerkennung lief bis zum naechsten Schluessel und schluckte dabei
einen Kommentar mit "&". Jetzt zaehlt sie geschweifte Klammern. Ein
Fehlalarm im Pruefwerkzeug ist fast so schaedlich wie ein uebersehener
Fehler: Man gewoehnt sich daran, ihn wegzusehen.
GEPRUEFT
32 Pruefungen im Portal (Computer und Handy), alle bestanden. Darunter:
114 Texte in allen fuenf Sprachen vollstaendig, Kundenpunkte stehen vor
der langen Liste, Aufgaben vor den Zahlungen, Abhaken meldet den
richtigen Punkt, alle Kaestchen mindestens 24 px, keine Fehler im
Protokoll. Dazu 55 Seiten-Sprach-Kombinationen ohne Kodierungsreste.
Ein Fehler im Test selbst gefunden und behoben: Die Adressabfrage prueft
jetzt den PFAD statt der ganzen Adresse. Der API-Server heisst
"postfach.dogfather-universe.com" -- ein includes("/postfach") traf den
HOSTNAMEN und damit jede Anfrage, auch die Uebersicht.
Versionsstempel und Cache-Name auf v5.
Co-Authored-By: Claude Opus 5 <[email protected]>
134 lines
7.9 KiB
HTML
134 lines
7.9 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de" data-i18n-titel="seiten_titel">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Über Dogfather — Dogfather Webdesign</title>
|
|
<meta name="description" content="Keine Agentur, keine Ticketnummer: wer hier baut, wie gearbeitet wird und woran das gelernt wurde." />
|
|
<meta name="robots" content="noindex, nofollow, noarchive" />
|
|
<link rel="icon" type="image/png" href="/assets/img/favicon.png" />
|
|
<meta name="theme-color" content="#05070b" />
|
|
<link rel="manifest" href="/webdesign/app.webmanifest" />
|
|
<link rel="apple-touch-icon" href="/assets/img/wd-app-180.png" />
|
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
<meta name="apple-mobile-web-app-title" content="Dogfather Webdesign" />
|
|
<link rel="stylesheet" href="/assets/css/main.css?v=20260823wd5" />
|
|
<link rel="stylesheet" href="/assets/css/webdesign.css?v=20260823wd5" />
|
|
<style>
|
|
.ue-kopf { display: grid; grid-template-columns: minmax(0, .85fr) minmax(0, 1.15fr); gap: clamp(1.5rem, 4vw, 3rem); align-items: center; }
|
|
/* Auf dem Handy zuerst der Text, dann das Bild: sonst schiebt ein
|
|
hohes 4:5-Porträt die Überschrift komplett aus dem ersten Bildschirm. */
|
|
@media (max-width: 860px) {
|
|
.ue-kopf { grid-template-columns: 1fr; }
|
|
.ue-kopf-bild { order: 2; margin-top: .5rem; }
|
|
.ue-kopf-text { order: 1; }
|
|
}
|
|
.ue-portrait {
|
|
width: 100%; max-width: 400px; border-radius: var(--wd-r-gross);
|
|
aspect-ratio: 4 / 5; object-fit: cover;
|
|
border: 1px solid var(--wd-rand-stark);
|
|
box-shadow: var(--wd-schatten-tief);
|
|
}
|
|
.ue-fliess p { font-size: clamp(1.02rem, 1.6vw, 1.14rem); max-width: 72ch; }
|
|
</style>
|
|
</head>
|
|
<body class="wd">
|
|
|
|
<div id="wd-kopf"></div>
|
|
|
|
<main id="wd-inhalt">
|
|
|
|
<section class="wd-abschnitt" style="padding-top:clamp(2.4rem,6vw,4rem)">
|
|
<div class="wd-container">
|
|
<div class="ue-kopf">
|
|
<div class="ue-kopf-bild">
|
|
<img class="ue-portrait wd-auf" src="/assets/img/wd-dogfather-portrait.jpg"
|
|
alt="Dogfather" width="900" height="1125" fetchpriority="high" decoding="async"
|
|
data-i18n-attr="alt:ue_foto_alt" />
|
|
</div>
|
|
<div class="ue-kopf-text">
|
|
<span class="wd-eyebrow" data-i18n="ue_eyebrow">Über Dogfather</span>
|
|
<h1 data-i18n="ue_h1">Wer hier eigentlich baut</h1>
|
|
<p class="wd-lead" data-i18n="ue_lead">Keine Agentur, kein Callcenter, keine Ticketnummer. Eine Person, die dein Projekt von der ersten Nachricht bis zur Übergabe begleitet — und die danach noch erreichbar ist.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="wd-abschnitt wd-abschnitt--eng" style="padding-top:0">
|
|
<div class="wd-container wd-container--schmal ue-fliess">
|
|
<p class="wd-auf" data-i18n="ue_text1">Dogfather ist der Name, unter dem ich seit Jahren im Netz unterwegs bin — als Streamer, als Teil einer Community und mittlerweile auch als jemand, der Webseiten baut. Das eine ist aus dem anderen entstanden: Irgendwann brauchte das eigene Projekt eine richtige Seite, dann brauchte jemand aus dem Umfeld eine, dann noch jemand.</p>
|
|
<p class="wd-auf" data-i18n="ue_text2">Dadurch sind die Seiten hier nicht am Reißbrett entstanden, sondern an echten Problemen: Eine Shop-Inhaberin, die ihre Artikel selbst pflegen können muss, ohne Angst etwas kaputtzumachen. Ein Team, das seine eigenen Inhalte ändern will, ohne jedes Mal jemanden zu fragen. Genau daran messe ich, ob eine Seite gut ist — nicht daran, wie sie auf einem Werbebild aussieht.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ---------------- Arbeitsweise ---------------- -->
|
|
<section class="wd-abschnitt wd-abschnitt--gehoben">
|
|
<div class="wd-container">
|
|
<h2 class="wd-auf" data-i18n="ue_werte_h2">Wie ich arbeite</h2>
|
|
<div class="wd-grid wd-grid--2" style="margin-top:1.8rem">
|
|
<div class="wd-karte wd-karte--kappe wd-auf">
|
|
<h3 data-i18n="ue_w1_h3">Ehrlich vor gefällig</h3>
|
|
<p data-i18n="ue_w1_p">Wenn ein kleineres Paket reicht, sage ich das — auch wenn ich damit weniger verdiene. Wenn etwas technisch nicht sinnvoll ist, sage ich das vorher, nicht wenn die Anzahlung schon da ist.</p>
|
|
</div>
|
|
<div class="wd-karte wd-karte--lila wd-karte--kappe wd-auf">
|
|
<h3 data-i18n="ue_w2_h3">Handy zuerst</h3>
|
|
<p data-i18n="ue_w2_p">Die meisten Besucher kommen mit dem Handy. Deshalb wird dort zuerst geprüft, nicht zuletzt — und zwar auf echten Bildschirmgrößen, nicht nur in einem verkleinerten Fenster am Computer.</p>
|
|
</div>
|
|
<div class="wd-karte wd-karte--lila wd-karte--kappe wd-auf">
|
|
<h3 data-i18n="ue_w3_h3">Fertig heißt fertig</h3>
|
|
<p data-i18n="ue_w3_p">Keine halb fertigen Unterseiten, keine Platzhalter und keine Links, die ins Leere führen. Eine Seite gilt erst als fertig, wenn jedes Formular, jeder Zugang und jeder Fehlerfall wirklich durchgespielt wurde.</p>
|
|
</div>
|
|
<div class="wd-karte wd-karte--kappe wd-auf">
|
|
<h3 data-i18n="ue_w4_h3">Augenschonend</h3>
|
|
<p data-i18n="ue_w4_p">Dunkel, kontraststark genug zum Lesen, aber ohne grelle Neonfarben und ohne flackernde Effekte. Wer in den Systemeinstellungen weniger Bewegung wünscht, bekommt sie auch nicht.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ---------------- Erfahrung ---------------- -->
|
|
<section class="wd-abschnitt">
|
|
<div class="wd-container">
|
|
<h2 class="wd-auf" data-i18n="ue_erfahrung_h2">Woran ich das gelernt habe</h2>
|
|
<div class="wd-grid wd-grid--2" style="margin-top:1.8rem">
|
|
<div class="wd-karte wd-karte--kappe wd-auf">
|
|
<h3 data-i18n="ue_e1_h3">Dogfather Universe</h3>
|
|
<p data-i18n="ue_e1_p">Eine Plattform mit fünf Sprachen, Teamseiten, Bewerbungssystem, Supporter-Abo mit Zahlungsanbindung und einem Verwaltungsbereich, in dem Inhalte ohne Programmierkenntnisse gepflegt werden. Öffentlich seit August 2026, auf einem eigenen Server.</p>
|
|
</div>
|
|
<div class="wd-karte wd-karte--lila wd-karte--kappe wd-auf">
|
|
<h3 data-i18n="ue_e2_h3">Van's DIY & Bastelbedarf</h3>
|
|
<p data-i18n="ue_e2_p">Ein vollständiger Onlineshop mit Warenkorb, Gutscheincodes und Versandabläufen — und einem Adminbereich, der so gebaut ist, dass die Inhaberin ihn ohne Technikkenntnisse bedient. Genau daran habe ich gelernt, wie viel Aufwand in „einfach zu bedienen“ steckt.</p>
|
|
</div>
|
|
</div>
|
|
<div class="wd-btn-reihe wd-auf" style="margin-top:1.4rem">
|
|
<a class="wd-btn wd-btn--zweit" href="/webdesign/portfolio.html" data-i18n="ue_projekte">Projekte ansehen</a>
|
|
</div>
|
|
|
|
<div class="wd-notiz wd-auf" style="margin-top:1.6rem">
|
|
<p><strong data-i18n="ue_team_titel">Nicht allein, aber verantwortlich</strong><br />
|
|
<span data-i18n="ue_team_text">Bei Rückfragen, Gegenlesen und der Abnahme hilft VanVan mit — sie hat auf diese Vorabversion dieselben Rechte wie ich. Deine Ansprechperson für dein Projekt bleibe trotzdem ich, damit du nie erklären musst, was du letzte Woche schon erklärt hast.</span></p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="wd-abschnitt wd-abschnitt--gehoben">
|
|
<div class="wd-container wd-container--schmal" style="text-align:center">
|
|
<h2 data-i18n="ue_cta_h2">Klingt das nach jemandem, mit dem du arbeiten willst?</h2>
|
|
<p class="wd-lead" data-i18n="ue_cta_p">Dann erzähl mir von deinem Vorhaben. Das Formular dauert ein paar Minuten und verpflichtet dich zu nichts.</p>
|
|
<div class="wd-btn-reihe" style="justify-content:center">
|
|
<a class="wd-btn wd-btn--haupt" href="/webdesign/anfrage.html" data-i18n="nav_anfrage">Projekt anfragen</a>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
</main>
|
|
|
|
<div id="wd-fuss"></div>
|
|
|
|
<script src="/assets/js/i18n-wd-ueber.js?v=20260823wd5"></script>
|
|
<script src="/assets/js/wd-core.js?v=20260823wd5"></script>
|
|
</body>
|
|
</html>
|