Fujimod
브라우저에서 카메라 펌웨어를 시험하고 Fujimod SD 부팅 파일을 만든다
차량 손상 사진을 업로드하면 AI 기반 초기 견적을 받으며, 전문가인 Stefan Witmaier에게 전문 평가를 받을 수 있습니다
Laden Sie Fotos Ihres Fahrzeugschadens hoch und erhalten Sie eine unverbindliche KI-gestützte Ersteinschätzung. Für eine professionelle Schadenbewertung steht Ihnen Kfz-Gutachter Stefan Witmaier persö
라이프스타일TypeScript · CSSGitHub @delijasanaraj온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Laden Sie Fotos Ihres Fahrzeugschadens hoch und erhalten Sie eine unverbindliche KI-gestützte Ersteinschätzung. Für eine professionelle Schadenbewertung steht Ihnen Kfz-Gutachter Stefan Witmaier persönlich zur Verfügung.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Kleine, eigenständige Next.js-Anwendung für die echte KI-gestützte Fahrzeugschaden-Ersteinschätzung. Läuft bewusst außerhalb von Onepage, weil der API-Schlüssel serverseitig sicher gespeichert werden muss – dafür bietet Onepage MCP kein Werkzeug.README 전문 보기 ↗
Kleine, eigenständige Next.js-Anwendung für die echte KI-gestützte Fahrzeugschaden-Ersteinschätzung. Läuft bewusst außerhalb von Onepage, weil der API-Schlüssel serverseitig sicher gespeichert werden muss – dafür bietet Onepage MCP kein Werkzeug.
sharp - gilt für Schadenfotos
UND den Fahrzeugscheinclaude-opus-5) mit striktem, validiertem
JSON-Ergebnis und Anweisung zu gründlicher, vollständiger Schadenserfassung. Analyse-Aufwand
standardmäßig medium (Regler: ANTHROPIC_EFFORT) - high führte bei mehreren Fotos zu echten
Server-Timeouts, siehe "Bekannte technische Grenzen"COST_ESTIMATE_MULTIPLIER, siehe unten) sowie
ein geschärfter Prompt, der die Spanne bewusst am oberen realistischen Rand ansetzt (Erfahrungswert:
Fotobasierte Schätzungen unterschätzen echte Reparaturkosten systematisch) und enger fasst (Ziel:
Spannbreite ca. 30-50 % des Mittelwerts statt beliebig breit)app/error.tsx, app/global-error.tsx), damit ein
unerwarteter Fehler eine verständliche Meldung statt einer weißen/abgestürzten Seite zeigt@vercel/analytics, seit 02.10.2026): zählt
Ereignisse wie "Tool geöffnet", "Upload gestartet", "Analyse gestartet/erfolgreich/fehlgeschlagen",
"Fahrzeugschein hochgeladen", "Kontaktbereich angezeigt" und "Kontakt angeklickt" (nach Kanal:
Telefon/WhatsApp/E-Mail) - sichtbar im Vercel-Dashboard unter "Analytics". Enthält keine Fotos,
Namen, Telefonnummern oder sonstige personenbezogenen Daten, nur Zähler/Kategorien. Beantwortet "wie
oft wird das Tool benutzt und wo brechen Nutzer ab", aber NICHT "wer genau hat es benutzt" - dafür
wäre eine echte Lead-Erfassung nötig (siehe nächster Punkt).app/api/analyze/route.ts erzwungen (ohne gültige Kontaktdaten
keine Analyse, keine Schadenssumme), nicht nur im Browser. Jede Nutzung löst eine E-Mail-Benachrichtigung
an den Gutachter aus (lib/notify.ts, Resend): E-Mail 1 "Neuer KI-Lead" mit Kontaktdaten und Fahrzeugdaten
(wird VOR der Analyse gesendet, kommt also auch bei einem Timeout an), E-Mail 2 "KI-Ergebnis" mit
angezeigter Schadenssumme und Zusammenfassung. E-Mail 1 enthält die (bereinigten, EXIF-/GPS-freien) Schadenfotos als Anhang
(Foto-01.jpg …); scheitert der Versand mit Anhängen, wird die Mail einmal ohne Fotos wiederholt. Es wird nichts in einer
Datenbank gespeichert. Voraussetzung: LEAD_NOTIFY_EMAIL plus entweder SMTP_USER/SMTP_PASSWORD (z. B. Gmail mit App-Passwort, ohne DNS, mehrere Empfänger, hat Vorrang) oder RESEND_API_KEY in Vercel setzen (siehe
.env.example). Ohne diese Werte wird NICHTS versendet - der Lead steht dann nur als
[LEAD-NICHT-ZUGESTELLT] im kurzlebigen Vercel-Laufzeit-Log. Mit der Standard-Absenderadresse
[email protected] liefert Resend nur an die E-Mail des eigenen Resend-Kontos; für andere Empfänger
(z. B. den Gutachter) muss bei Resend eine Domain verifiziert werden. Rechtlich zu klären: Resend
(USA) wird zusätzlicher Auftragsverarbeiter, die Datenschutzerklärung auf stefan-witmaier.de muss um
Kontaktdaten/Lead-Verarbeitung ergänzt werden.NTFY_TOPIC gesetzt, geht bei jeder Nutzung zusätzlich eine
Push-Nachricht über ntfy (https://ntfy.sh, kostenlos) raus, z. B. "Neuer KI-Lead – Audi A6 · 5 Fotos". Sie enthält
bewusst keine Kontaktdaten, da ein ntfy-Thema nur durch seinen (langen, zufälligen) Namen geschützt ist; die Daten
stehen nur in der E-Mail. WhatsApp-Benachrichtigungen sind nicht eingebaut (siehe Projekt-Notizen: erfordert
WhatsApp-Business-API mit Freigabe und Kosten, Kontaktdaten würden zusätzlich über Meta laufen).npm install
cp .env.example .env.local
.env.local öffnen und ANTHROPIC_API_KEY eintragen (siehe unten, wie man einen bekommt).npm run dev
Dann http://localhost:3000 öffnen.Ich darf keine Konten anlegen oder Zahlungsdaten hinterlegen – das musst du selbst tun.
claude-opus-5, effort: high und bis zu 15 Fotos pro Analyse liegt eine realistische Spanne bei
ca. 0,05–0,25 € pro Analyse, je nach Fotoanzahl - deutlich mehr als die ursprüngliche Schätzung mit
claude-sonnet-5 und 8 Fotos (ca. 0,01–0,03 €). Das Fahrzeugschein-Auslesen (separates, günstiges
Modell claude-haiku-4-5) kostet nur Bruchteile eines Cents pro Vorgang. Nach den ersten echten
Analysen im Anthropic-Dashboard die tatsächlichen Kosten prüfen und ggf. ein Ausgabenlimit setzen..env.local bzw. später in den Umgebungsvariablen des Hosting-Anbieters eintragen,
niemals in Code oder Chat teilen.ANTHROPIC_API_KEY,
ANTHROPIC_MODEL, ANTHROPIC_EXTRACTION_MODEL, ANTHROPIC_EFFORT, COST_ESTIMATE_MULTIPLIER,
RATE_LIMIT_PER_HOUR im Vercel-Projekt unter "Settings → Environment Variables" eintrageneffort: high brauchten >60s). Behoben durch effort: medium als neuen Standard
(siehe "Bekannte technische Grenzen"). Sollte es trotzdem wieder zu Zeitüberschreitungen kommen, ist der
nächste Schritt ein Wechsel auf den kostenpflichtigen Vercel-Pro-Plan (erlaubt längere Funktionslaufzeiten)
fahrzeug-schadenrechner.stefan-witmaier.de. Im Vercel-Projekt
bereits angelegt. Die Domain stefan-witmaier.de liegt bei Strato (Nameserver *.rzone.de), der DNS-Eintrag
muss dort gesetzt werden: A-Record fahrzeug-schadenrechner → 76.76.21.21 (alternativ CNAME auf
cname.vercel-dns.com). Die bestehenden Einträge der Hauptseite (Onepage) nicht anfassen.cname.vercel-dns.com) gesetzt, Zertifikat ausgestellt, Domain live.robots: index/follow in app/layout.tsx),
Canonical und Open-Graph zeigen auf https://fahrzeug-schadenrechner.stefan-witmaier.de (TOOL_URL in
lib/site.ts), app/robots.ts (sperrt nur /api/), app/sitemap.ts, und next.config.mjs leitet die alte
Adresse schaden-ki-tool.vercel.app dauerhaft (308) auf die neue Domain weiter. Einreichen bei Google:
Domain in der Google Search Console als Property hinzufügen und die Sitemap eintragen (macht der Kunde, braucht
sein Google-Konto).ctaHref) wurde auf die neue Domain umgestellt (siehe Projekt-Notizen).robots steht seit 19.10.2026 auf index: true (Google-Freigabe, siehe Abschnitt Domain)Der Gutachter hat zurückgemeldet, dass die reine KI-Schätzung tendenziell zu niedrig lag. Statt die KI anzuweisen, sich selbst zu "belügen", wurde das zweigleisig gelöst:
lib/prompt.ts) wurde geschärft: Die KI soll jetzt explizit reale Kostenfaktoren
einbeziehen, die auf Fotos nicht sichtbar sind (Ersatzteile, Lackierung angrenzender Teile,
Sensor-Kalibrierung, Arbeitszeit, Mehrwertsteuer), die Spanne bewusst am oberen realistischen Rand
ansetzen (statt niedrig zu "ankern") und dabei enger fassen (Zielbreite ca. 30-50 % des Mittelwerts
statt einer beliebig breiten Spanne wie z.B. 2.000-8.000 EUR).COST_ESTIMATE_MULTIPLIER, Standard 3.0 = +200 %) wird
danach auf die von der KI gelieferte Spanne angewendet - dokumentiert, nachvollziehbar im Code und
jederzeit über die Umgebungsvariable nachjustierbar, sobald echte Vergleichsdaten vorliegen. Die KI
selbst schätzt weiterhin unabhängig und ehrlich; die Kalibrierung ist eine separate, bewusste
Geschäftsentscheidung des Gutachters, begründet mit dessen fachlicher Praxiserfahrung, dass
fotobasierte Schätzungen echte Reparaturkosten strukturell unterschätzen.Verifiziert (09.09.2026):
Empfehlung, möglichst bald umsetzen: Faktor 3.0 wurde auf Zuruf ohne echte Vergleichsdaten festgelegt. Sobald 2-3 reale Fälle mit tatsächlicher Reparaturrechnung vorliegen, den Faktor entsprechend nachjustieren (hoch oder runter) statt ihn dauerhaft auf 3.0 zu belassen - eine Zahl, die bei echten Kunden im Vergleich zu späteren Werkstatt-Rechnungen absurd hoch wirkt, schadet dem Vertrauen genauso wie eine zu niedrige.
MAX_TOTAL_UPLOAD_BYTES in lib/schema.ts) - bei 20 sehr detailreichen Fotos kann es dennoch knapp
werden, dann bitte einzelne Fotos entfernen.maxDuration = 60, vom Server erzwungen, nicht nur ein Richtwert). Ein echter
Nutzer erlebte dadurch die Fehlerseite, weil mehrere Fotos bei effort: high >60s brauchten. Behoben:
Analyse-Aufwand auf medium reduziert (Regler: ANTHROPIC_EFFORT) und Fotos werden serverseitig auf
1400px statt 1600px verkleinert - im Test danach 5 Fotos in ~38s, 10 Fotos in ~37s, also mit deutlichem
Puffer unter 60s. Bei >10 Fotos zeigt die Oberfläche zusätzlich einen Warnhinweis. Der clientseitige
65-Sekunden-Timeout ist nur noch ein Rückfallnetz; bei einem echten Server-Timeout (Status 502/504 oder
keine gültige JSON-Antwort) zeigt die App jetzt eine spezifische Meldung ("hat zu lange gedauert") statt
der generischen Fehlermeldung. Sollte es trotzdem wieder zu Timeouts kommen: ANTHROPIC_EFFORT ist
bereits auf dem niedrigsten sinnvollen Wert für gute Qualität - nächster Schritt wäre dann tatsächlich
der Vercel-Pro-Plan (siehe oben), nicht eine weitere Prompt-Anpassung.app/api/analyze/route.ts reduziert jetzt automatisch den Analyse-Aufwand auf
low UND die Fotoauflösung auf 1100px (statt 1400px), sobald mehr als HIGH_VOLUME_PHOTO_THRESHOLD
(Standard 10) Fotos hochgeladen werden - konfigurierbar über die gleichnamige Umgebungsvariable. Bei ≤10
Fotos bleibt es beim bisherigen Verhalten (ANTHROPIC_EFFORT, 1400px). Lokal verifiziert: 18 Fotos mit
dem neuen Low-Effort-Pfad in ~25s statt zuvor 30-46s - deutlich mehr Puffer. Diese Maßnahme reduziert das
Restrisiko, beseitigt es aber nicht vollständig, da die Hobby-Plan-Obergrenze von 60s weiterhin ein hartes
Plattformlimit ist - der zuverlässigste nächste Schritt bleibt der Vercel-Pro-Plan (deutlich höheres
-Limit, kostenpflichtig, vorher mit dem Kunden zu besprechen).POST /api/analyze kann von Partner-Apps mit einem API-Schlüssel genutzt werden (Header X-API-Key oder
Authorization: Bearer). Schlüssel stehen in der Vercel-Variable PARTNER_API_KEYS (name:schluessel,
kommagetrennt, Änderung wirkt erst nach Redeploy). Ohne Schlüssel läuft alles wie bisher für die Webseite;
ein falscher Schlüssel ergibt 401. Mit Schlüssel gilt das Limit pro Partner (RATE_LIMIT_PARTNER_PER_HOUR,
Standard 300) statt pro IP, Antworten tragen CORS-Header, und der App-Name steht in den Lead-Mails
(„Neuer KI-Lead (Crash Assist): …“). Kontaktdaten und Einwilligung bleiben Pflicht (lead mit consent: true).
Die Anleitung für Entwickler steht in docs/PARTNER-API.md. Neuen Schlüssel erzeugen: openssl rand -hex 24,
in Vercel ersetzen, redeployen, Partner informieren. Der tägliche Healthcheck prüft, dass ein falscher Schlüssel abgewiesen wird.
scripts/healthcheck.mjs (npm run healthcheck, mit -- --ai zusätzlich ein lokaler KI-Test ohne E-Mail-Versand)
prüft: Startseite/Google-Freigabe, robots.txt, sitemap.xml, Weiterleitung der alten Adresse, Schnittstellen,
SSL-Zertifikat, letztes Vercel-Deployment, Pflicht-Env-Variablen, Laufzeit-Logs der letzten 24 h (Timeouts,
fehlgeschlagene Mails, nicht zugestellte Leads), npm audit und den Git-Stand. Ein geplanter Auftrag in der
Claude-App führt das täglich aus (läuft nur, wenn die App geöffnet und der Mac an ist) und darf einfache, klar
abgegrenzte technische Fehler selbst beheben (Sicherheitsupdates ohne Major-Sprung, Konfigurationsfehler,
eindeutige Code-Bugs), jeweils mit Build + Test vor und Healthcheck nach dem Deployment und automatischem
Zurückrollen bei Misserfolg. Nicht selbstständig angefasst werden: Texte/Einwilligungen, Kostenfaktor, Prompts,
Modelle, Domain/DNS, Zugangsdaten, Onepage, Preise/Tarife.
Bei ungültigen Gmail-Zugangsdaten (Log: 535 ... Username and Password not accepted) hilft bash scripts/mail-setup.sh:
es prüft Adresse und App-Passwort direkt bei Google und trägt sie nur bei Erfolg in Vercel ein.
severity.level: "leicht"analysis_status: "insufficient_images" mit konkreten Foto-WünschenANTHROPIC_API_KEY gesetzt bzw. ungültiger Key → erwartet: Fehlerzustand mit der definierten
Fehlermeldung, kein Absturz der SeiteCOST_ESTIMATE_MULTIPLIER=1 in .env.local vs. Standard 3.0 vergleichen,
um die Kalibrierung sichtbar zu machenapp/
page.tsx Hero + 3 Schritte + Wizard
error.tsx / global-error.tsx Fehlerseiten statt Absturz bei unerwarteten Fehlern
api/analyze/route.ts Server-Route: Validierung, EXIF-Entfernung, KI-Aufruf, Kostenkalibrierung
api/extract-vehicle/route.ts Server-Route: Fahrzeugschein auslesen (nur Hersteller/Modell/Baujahr)
components/
DamageWizard.tsx Der eigentliche Ablauf (Upload → Daten → Einwilligung → Ergebnis)
lib/
schema.ts Zod-Schemas (Ergebnis-Struktur, Fahrzeugdaten, Limits)
prompt.ts System-Prompts (Schadenanalyse + Fahrzeugschein-Extraktion)
vehicleData.ts Kuratierte Hersteller/Modell-Liste, Baujahr-Optionen
compressImage.ts Client-seitige Bildverkleinerung vor Upload
Automatisch verbunden mit Vercel via GitHub.
maxDurationlib/vehicleData.ts, ca. 32 Marken) abgeglichen; bei Nichttreffer wird automatisch
"Sonstiger Hersteller"/"Sonstiges Modell" gewählt und der roh erkannte Text separat angezeigt - der
Nutzer sollte die Felder immer kurz prüfen.claude-haiku-4-5 (bewusst günstig gewählt, da die Aufgabe "einfach" wirkte)
ohne Bedenkzeit (effort) bei kleinem, dichtem Formulartext in Kombination mit zu geringer Auflösung
(Client-Kompression auf 1400px, serverseitig erneut komprimiert). Behoben:
ANTHROPIC_EXTRACTION_MODEL jetzt standardmäßig claude-opus-5 (wie die Schadenanalyse) mit
ANTHROPIC_EXTRACTION_EFFORT=high, Auflösung für den Fahrzeugschein auf 2200px/Qualität 92 erhöht
(eigene, höhere Werte als bei Schadenfotos - ein Dokument mit kleinem Text braucht mehr Schärfe als
eine allgemeine Schadensübersicht), und der Prompt (lib/prompt.ts) explizit angewiesen, ein Feld
bei auch nur einem unklaren Zeichen komplett leer zu lassen statt einen bekannten/plausiblen Wert zu
raten. Mit zwei synthetischen Testdokumenten (Daihatsu Sirion 2009, Audi A6 2024) lokal verifiziert -
beide korrekt gelesen. Einschränkung: nur mit synthetischen Testbildern geprüft, nicht mit den
echten, vom Nutzer gemeldeten Fotos (lagen mir nicht vor) - bei erneuten Fehllesungen mit echten
Fahrzeugscheinen bitte zeitnah zurückmelden, idealerweise mit dem Originalfoto.