AGdev
AGdev

Property Decision Support

Immobilienberatung · Serviceplattform

Von der passenden Leistung bis zum vorbereiteten Vor-Ort-Termin.bis zum vorbereiteten Vor-Ort-Termin.

Ich habe Property Decision Support für einen unabhängigen Immobilienberater entwickelt, der Käufer und Verkäufer auf Malta und Gozo begleitet.

Website besuchen
Property Decision Support mit Leistungsauswahl und Vorbereitung der Buchung
Rolle
Full-Stack Product Engineer
Verantwortung
End-to-End-Serviceplattform
Status
Produktion
Kernprozess
Auswählen → Bezahlen → Buchen → Vorbereiten
ProjektüberblickDie Herausforderung01 Käufer und Verkäufer02 Zahlung und Buchung03 Inhalte und private Daten04 TerminvorbereitungProduktionZusammenhangDas ErgebnisMein AnteilTechnologien

[ Projektüberblick ]

Problem

Gute Immobilienberatung hängt stark vom Kontext ab. Käufer und Verkäufer brauchen unterschiedliche Unterstützung, während der Berater die wichtigsten Informationen vor dem Termin benötigt.

[ Zusammenarbeiten ]

Sie planen einen Service, bei dem die wichtige Arbeit vor dem Termin beginnt?vor dem Termin beginnt?

Ich kann helfen, den Weg hinter der Leistung in ein Produkt zu übersetzen, das von Anfang bis Ende funktioniert.

AGdev
ImpressumDatenschutzerklärung
ImpressumDatenschutzerklärung

© 2026 Aleksandar Gjurchevski. Alle Rechte vorbehalten.

© 2026 Aleksandar Gjurchevski. Alle Rechte vorbehalten.

Was ich gebaut habe

Eine kommerzielle Serviceplattform mit getrennten Käufer- und Verkäuferprozessen, Online-Zahlung, geschütztem Buchungszugang, verfügbaren Terminen in Echtzeit, strukturiertem Intake, privaten Dokumenten-Uploads und transaktionaler Kommunikation.

Meine Verantwortung

Produktabläufe und UX/UI, Frontend und Backend, Buchungsarchitektur, Zahlungen, private Daten, Zugriffssicherheit, Terminplanung, Formulare, CMS-Architektur, Integrationen, SEO, Infrastruktur und Produktion.

[ Die Herausforderung ]

Die Website musste die Leistung verständlich machen, ohne sie zu vereinfachen.

Property Decision Support ist bewusst keine Immobilienagentur, keine Maklerleistung, kein formelles Wertgutachten und keine technische Gebäudeprüfung. Der Berater arbeitet unabhängig für eine Seite der Entscheidung.

Ein Käufer möchte vielleicht verstehen, was vor einem Angebot noch unklar ist. Ein Verkäufer möchte wissen, was vor dem Marktstart vorbereitet werden sollte oder warum ein laufender Verkauf an Dynamik verliert.

Die Website musste deshalb die Leistung erklären, die passende Unterstützung zeigen, die Zahlung abwickeln und gleichzeitig genug Kontext in den eigentlichen Termin tragen. Ich habe die Buchung als durchgängigen Prozess gebaut und nicht als getrennte Website-, Checkout-, Kalender- und Formularfunktionen.

Die Buchung verbindet das, was der Kunde kauft, mit dem, was der Berater für die Leistung braucht.
01

[ Käufer und Verkäufer brauchen unterschiedliche Abläufe ]

Sie nutzen dieselbe Plattform, treffen aber unterschiedliche Entscheidungen.

Die einfachste Lösung wäre ein allgemeines Immobilienformular gewesen, bei dem einige Felder je nach Leistung ein- oder ausgeblendet werden. Dagegen habe ich mich bewusst entschieden.

Bei einem Käufer sind die Immobilie, der Angebotspreis, die Finanzierung, ein bereits abgegebenes Angebot, der aktuelle Stand im Kaufprozess, offene Fragen und persönliche Bedenken relevant.

Ein Verkäufer bringt einen anderen Kontext mit: Eigentumsverhältnisse, Verkaufsstatus, Angebotspreis, bekannte Probleme, frühere Einwände von Interessenten, bereits ausgeführte Arbeiten und das gewünschte Ergebnis.

Diese Unterschiede enden nicht im Frontend. Käufer- und Verkäuferdaten werden auch im Backend getrennt validiert und modelliert. Die öffentliche Kommunikation folgt derselben Logik: fundierter entscheiden für Käufer, bessere Vorbereitung und mehr Kontrolle für Verkäufer.

  1. Verifizieren
02

[ Eine Zahlung musste die richtige Buchung freischalten ]

Eine erfolgreiche Stripe-Zahlung ist ein Ereignis – nicht die gesamte Buchung.

Bevor der Checkout startet, legt die Anwendung eine eigene Buchungsreferenz mit Leistung und erwartetem Betrag an. Diese Referenz wird an Stripe weitergegeben.

Die Rückkehr des Browsers vom Checkout reicht nicht aus, um eine Buchung als bezahlt zu behandeln. Der Server muss prüfen, welche Buchung bezahlt wurde und ob die Zahlung zu den erwarteten Daten passt.

Der Stripe-Webhook prüft Buchungsreferenz, Zahlungsstatus, Betrag und Währung, bevor der Buchungsstatus geändert wird. Bereits verarbeitete Webhook-Events werden berücksichtigt, weil Stripe dasselbe Event erneut senden kann. Zustandsänderungen sind zusätzlich gegen konkurrierende Requests geschützt.

Erst nach bestätigter Zahlung wird der nächste Teil des Ablaufs freigeschaltet.

Leistung auswählen

03

[ Inhalte und Kundendaten brauchen eine klare Trennung ]

Private Immobilieninformationen gehören nicht in dasselbe System wie Website-Texte.

Eine Buchung kann Kontaktdaten, Immobilienadressen, Preisvorstellungen, Finanzierungsstatus, den Stand der Transaktion, persönliche Bedenken und Zugangsinformationen enthalten. Zusätzlich können Kunden Dokumente für die Vorbereitung des Termins hochladen.

Resend
Anwendung
Sanity

Öffentliche Inhalte

Website & CMS

Neon

Private Vorgänge

Buchungs- und Kundendaten

Private Dateien

Kundendokumente

Anwendung
Resend
Sanity

Öffentliche Inhalte

Website & CMS

Neon

Private Vorgänge

Buchungs- und Kundendaten

Private Dateien

Kundendokumente

Öffentliche Inhalte und private Kundendaten bleiben bewusst voneinander getrennt

Stripe verarbeitet Zahlungen, Cal kümmert sich um Verfügbarkeiten und Termine, Resend um transaktionale E-Mails. Jeder Dienst bleibt auf seine Aufgabe begrenzt.

Sanity darf die Website verändern. Dafür braucht es keinen Zugriff auf die privaten Unterlagen eines Kunden.
04

[ Die Vorbereitung beginnt vor dem Vor-Ort-Termin ]

Das Formular sorgt dafür, dass der bezahlte Termin mit Kontext beginnt.

Nach bestätigter Zahlung und verifiziertem Zugriff sieht der Kunde die verfügbaren Termine und wählt einen passenden Slot. Danach folgt je nach Leistung der Käufer- oder Verkäufer-Intake.

Das Formular ist bewusst ausführlich, weil jede Information einen konkreten Zweck erfüllt. Der Berater soll vor dem Termin wissen, wo der Kunde im Prozess steht, was bereits geklärt ist, wo Unsicherheit besteht und worauf besonders geachtet werden sollte.

Uploads werden nicht nur im Browser geprüft. Auch auf dem Server werden Dateigröße und Formate validiert. Zusätzlich wird der tatsächliche Dateiinhalt geprüft, statt nur Dateiname oder MIME-Type zu vertrauen.

Nach erfolgreicher Übermittlung wird der Termin mit Buchung, Kundendaten und Intake verknüpft. Wenn der Berater den Termin öffnet, sollte der organisatorische Teil bereits erledigt sein.

Das Formular sammelt nicht einfach mehr Daten. Es sorgt dafür, dass der bezahlte Termin mit Kontext beginnt.

[ Was in Produktion zusätzlich passieren kann ]

Ein sauberer Buchungsprozess wird mit echten Nutzern weniger sauber.

  • Stripe sendet denselben Webhook erneut.
  • Ein Checkout läuft vor der Zahlung ab.
  • Ein Bestätigungscode läuft ab.
  • Ein Formular wird doppelt gesendet.
  • Eine Datei hat die richtige Endung, aber den falschen Inhalt.
  • Nach einer Zahlung wird eine Rückerstattung angefragt.

Keines dieser Probleme gehört nur zu einem einzelnen Screen. Deshalb wird der Buchungsstatus zentral geführt. Das Backend entscheidet anhand dessen, was bereits passiert ist, welche Aktion als Nächstes erlaubt ist.

Dazu gehören Zahlungsstatus, Zugriff und Session, gebuchte Leistung, Terminstatus und der Stand der finalen Übermittlung. Für eine einmalige Beratung braucht der Kunde kein dauerhaftes Konto: Der Zugriff arbeitet mit zeitlich begrenzten Zugangsdaten und einer kurzen authentifizierten Session.

Rückerstattungsanfragen werden einer bestehenden Buchung zugeordnet und über die hinterlegte E-Mail verifiziert.

[ Das Ergebnis ]

Der Berater muss eine Buchung nicht aus fünf verschiedenen Tools zusammensuchen.

Ein Kunde kann die passende Leistung verstehen, bezahlen, einen Termin wählen und den Vor-Ort-Besuch vorbereiten, ohne dass zwischen jedem Schritt ein manueller Übergang nötig ist.

Der Berater erhält den Termin zusammen mit dem notwendigen Kontext, statt Zahlung, Kalendereintrag, E-Mail-Verlauf, Formular und Dokumente selbst zusammenzuführen.

Die öffentliche Website bleibt über Sanity editierbar. Private Buchungsdaten und Unterlagen bleiben davon getrennt im operativen Teil des Systems.

Weniger Zeit, um eine Buchung zusammenzusetzen. Mehr Zeit für die eigentliche Immobilienentscheidung.

[ Mein Anteil ]

Ich habe am gesamten Produkt gearbeitet.

Ich habe zunächst definiert, wie die Dienstleistung online funktionieren soll, und diesen Ablauf durch Produktdesign, Frontend, Backend, Datenarchitektur und Produktion umgesetzt.

Dazu gehörten Käufer- und Verkäuferprozesse, Zahlungs- und Buchungsstatus, das Modell für private Daten, sicherer Buchungszugriff, Kalenderintegration, strukturierter Intake, private Dateiablage, transaktionale E-Mails, Sanity-Content-Architektur, Recht und Consent, SEO sowie Deployment und Infrastruktur.

  • Produkt & UX/UI01
  • Frontend02
  • Backend & APIs03
  • Datenarchitektur04
  • Zahlungsabwicklung05
  • Buchung & Terminplanung06
  • Security & Access07
  • Formulare & Datei-Handling08
  • CMS & Content-Modellierung09
  • Transaktionale E-Mails10
  • SEO & Consent11
  • Infrastruktur & Produktion12
  • Produkt & UX/UI01
  • Frontend02
  • Backend & APIs03
  • Datenarchitektur04
  • Zahlungsabwicklung05
  • Buchung & Terminplanung06
  • Security & Access07
  • Formulare & Datei-Handling08
  • CMS & Content-Modellierung09
  • Transaktionale E-Mails10
  • SEO & Consent11
  • Infrastruktur & Produktion12

[ Technologien ]

Application
Termin wählen
  • Details
  • Käuferkontext

    • Finanzierungsstatus
    • Stand im Kaufprozess
    • Bedenken & offene Fragen
    • Entscheidungsprioritäten

    Verkäuferkontext

    • Angebots / Verkaufsstatus
    • Immobilienhistorie & Arbeiten
    Prüfen & absenden
    Ein Buchungsablauf, dessen Kontext auf die jeweilige Seite der Entscheidung zugeschnitten ist
    Käufer und Verkäufer nutzen dasselbe Produkt. Sie brauchen aber nicht dieselben Fragen.

    Sicher bezahlen

    Zahlung bestätigt

    Zahlung nicht abgeschlossen

    Kein Buchungslink

    Buchungslink erhalten

    Die serverseitige Prüfung – nicht die Browser-Rückkehr – schaltet den Buchungszugang frei
    Stripe bestätigt die Zahlung. Der Buchungsdatensatz entscheidet, was danach passieren darf.
    Wenn die Buchung problemlos läuft, bleibt der größte Teil dieser Arbeit unsichtbar. Genau so soll es sein.
  • Shadcn UI
  • Motion
  • Private Daten
    • Neon
    Private Dateien
    Content & Publishing
    • Sanity
    Zahlung & Termine
    Kommunikation & Schutz
    • Resend
  • Bekannte Probleme & Käufereinwände
  • Gewünschtes Ergebnis