Fujimod
Try your camera firmware in the browser and build Fujimod SD boot files.
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ö
Translation pending
LifestyleTypeScript · CSSGitHub @delijasanarajOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
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.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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.Read the full 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.