Ironparts

Stand der Arbeiten

Marktplatz für gebrauchte Fahrzeugteile · Meilensteine 1–7 stehen · vollständig in Betrieb · neu gestaltet · Stand 17. September 2026

Live ansehen

ironparts.ironparts.workers.dev
Die Anwendung selbst — auf Cloudflare Workers, Daten aus PostgreSQL bei Supabase über Hyperdrive.

Zum Ausprobieren ohne Registrierung. Zwei Demo-Konten sind angelegt, beide mit dem Passwort ironparts-demo:

Die Konten und ihre acht Inserate sind erfunden und jederzeit rückstandslos entfernbar (npm run demo:daten -- --entfernen). Ihre Bilder liegen in R2 wie jeder echte Upload; als Motiv sind es weiter erkennbare Platzhalter, weil mir keine Teilefotos vorliegen.

Du kannst dich jetzt auch selbst registrieren. Die Bestätigungsmail kommt wirklich an — Absender noreply@calestai.com. Und du kannst eigene Inserate mit eigenen Fotos einstellen.

Was die Vorschau zeigt

Suche nach Fahrzeug

Fahrzeugtyp → Marke → Modell → Baujahr, auf jeder Seite ganz oben. Die Auswahl bleibt in der Sitzung. Probier Motorrad → Yamaha → MT-07 → 2018–2020.

Drei getrennte Trefferblöcke

„Passt zu deinem Fahrzeug“ (belegt), „Passt vermutlich“ (mit Prüfhinweis), „Weitere Treffer“ (Volltext, ohne Fahrzeugbezug). Kein Inserat steht in zwei Blöcken.

Keine Passung ohne Beleg

Auf der Inseratsseite steht „vom Verkäufer bestätigt“ oder „vermutet“ — nie eine Zusage, die kein Fitment-Eintrag deckt.

Konto, Inserate, Nachrichten

Registrierung mit E-Mail-Bestätigung, Anmeldung, Profil, eigene Inserate verwalten, Gespräche, Bewertungen, Meldefunktion.

Teilenummern

Unleserliche Stellen bleiben als ? stehen und werden nie ergänzt — siehe die Bremsscheibe mit 1WS-F581T-00 und den Scheinwerfer mit B4C-84?00-00.

Gesperrte Kategorien

Airbagmodule, Gurtstraffer, pyrotechnische Batterietrenner und die Airbagweste lassen sich nicht einstellen. 27 der 95 Kategorien sind als sicherheitsrelevant markiert, 5 sind gesperrt.

Infrastruktur

BausteinStandEinzelheiten
Workerläuft ironparts auf der Subdomain ironparts.workers.dev, per API angelegt
Datenbankläuft PostgreSQL 17.6 bei Supabase, Region eu-west-1 — 16 Tabellen, 12 CHECK-Bedingungen, 4 Migrationen
Stammdatengeladen 28 Fahrzeuge, 95 Kategorien, 8.298 Postleitzahlen mit Koordinaten
Hyperdriveläuft Verbindungs-Pool vor dem Supabase-Pooler (Session-Modus, Port 5432)
Datenbankrolleangelegt ironparts_app mit eigenem Passwort — das postgres-Passwort blieb unangetastet
Geheimnissegesetzt APP_GEHEIMNIS, S3_ZUGRIFFSSCHLUESSEL, S3_GEHEIMSCHLUESSEL
R2 (Bilder)läuft Bucket ironparts-bilder (WEUR), öffentlich über pub-…r2.dev, CORS für den Direktupload aus dem Browser gesetzt
E-Mail-Versandläuft Resend über die verifizierte Domain calestai.com, Absender noreply@calestai.com
KI-Vorbefüllungaus KI_ANBIETER="aus" — ohne Schlüssel erscheint der Vorschlagsknopf gar nicht erst.

Geprüft, nicht behauptet

30 Prüfungen laufen gegen die deployte Instanz grün.

16 lesende (npm run test:live): Startseite, Fahrzeugleiste, Anmeldung mit Demo-Konto, eigene Inserate, Inseratsseite mit Preis, Passung und Teilenummer, Profil, alle vier Rechtstexte, keine Schlüssel im ausgelieferten Browser-JavaScript, keine JavaScript-Laufzeitfehler.

14 schreibende (npm run test:live-schreibend) decken genau das ab, was von den beiden externen Diensten abhängt: Registrierung mit echtem Versand, der Bestätigungslink aus der tatsächlich zugestellten Mail gelesen, Anmeldung, Bildupload direkt aus dem Browser nach R2 und der öffentliche Abruf des hochgeladenen Bildes. Der Link kommt bewusst aus der Mail und nicht aus der Datenbank: Dort liegt nur sein SHA-256-Hash, im Klartext steht er nirgendwo sonst. Registriert wird auf delivered@resend.dev, Resends Testadresse — echter Versandweg, kein fremdes Postfach.

Die drei Suchblöcke wurden einzeln gegen die Live-Instanz nachgemessen: Bei gewählter MT-07 2018–2020 stehen Bremsscheibe und Scheinwerfer in Block 1, das Kettenkit in Block 2, und Spiegelpaar, Stahlflex-Leitung und Auspuff landen in Block 3 — ohne Überschneidung.

Die 214 Prüfungen der sieben Meilenstein-Suiten brauchen dagegen eine direkte Postgres-Verbindung, um sich ihre Testdaten selbst einzurichten. Die gibt es in dieser Umgebung nicht; gelaufen sind sie zuletzt in der Entwicklungsumgebung.

Neue Gestaltung

Die Oberfläche sieht jetzt aus wie ein Marktplatz: helle Warenfläche, dunkles Kopf- und Fußband, Signalorange für alles, was zum Handeln auffordert. Der Inhalt trägt die Seite — Bild, Titel, Preis, Zustand, immer an derselben Stelle, damit sich Inserate vergleichen lassen.

Zwei Dinge sind dabei aufgefallen und mitrepariert worden. Die Suchleiste schickte ihr Formular an die aktuelle Adresse, solange die Seite noch nicht hydriert war — aus einem Klick auf der Anmeldeseite wurde /anmelden?q= statt einer Suche; jetzt steht action="/suche" daran, und die Suche funktioniert auch ganz ohne JavaScript. Und die neuen Kategorielinks hätten still ins Leere gezeigt: Die Suche kannte Kategorien nur als Id aus der Filterspalte, jetzt versteht sie auch einen Slug.

Vorher dazugekommen

Die zwei Dinge, die vorher am Konto hingen, sind erledigt — beide Wege laufen und sind nachgemessen.

Weiterhin offen