Fouad Boudouhi
← zurück zur Startseiteback to the home page

Investment-Plattform für ImmobilienReal estate investment platform

Aus einem Lastenheft in drei Wochen gebaut, mit Agenten in nummerierten Runden. Built from a requirements specification in three weeks, with agents in numbered rounds.

Oktober 2026October 2026 Privater AuftraggeberPrivate client TypeScript Playwright

UmfangSize
688 Quelldateien, 14 Migrationen688 source files, 14 migrations
TestsTests
317 Vitest-Dateien, 81 Playwright-Szenarien317 Vitest files, 81 Playwright scenarios
ZeitraumPeriod
3. bis 24. Oktober 2026, 434 Commits3 to 24 October 2026, 434 commits
BetriebOperation
eigener Server, Docker, tägliche Sicherungdedicated server, Docker, daily backups

Ein privater Auftraggeber investiert in Immobilien und wollte seine Arbeit vom ersten Exposé bis zum Bestand in einer Anwendung haben: Deals in einer Pipeline führen, Unterlagen in einem Datenraum ablegen, Kennzahlen rechnen, entscheiden, das Portfolio verwalten. Dafür gab es ein Lastenheft. Daraus habe ich einen Plan mit dreizehn Phasen gemacht, von Fundament und Rechten über Rechenkern und Entscheidung bis zu Portfolio, Posteingang und Deal-Suche. Code und Anwendung gehören dem Auftraggeber und sind nicht öffentlich.

A private client invests in real estate and wanted the whole workflow, from the first listing to the portfolio, in one application: deals in a pipeline, documents in a data room, the numbers calculated, decisions recorded, the portfolio managed. He had written a requirements specification. From it I made a plan with thirteen phases, from foundation and permissions through calculation core and decision support to portfolio, inbox and deal sourcing. Code and application belong to the client and are not public.

Gebaut habe ich in nummerierten Runden mit Agenten, jede Runde ein abgegrenztes Stück aus dem Plan: Umsetzung, Prüfung, Merge. 434 Commits in drei Wochen. Die Anwendung ist ein TypeScript-Monorepo mit Rechenkern, Domänenschicht und Datenbank als eigenen Paketen und der Weboberfläche darüber. Der Rechenkern ist gegen die Tabellenkalkulation abgeglichen, mit der der Auftraggeber bisher gerechnet hat; drei Referenzfälle daraus laufen als Golden-Tests mit.

I built it in numbered rounds with agents, each round a bounded slice of the plan: build, check, merge. 434 commits in three weeks. The application is a TypeScript monorepo with the calculation core, the domain layer and the database as separate packages and the web front end on top. The calculation core is reconciled against the spreadsheet the client had been using; three reference cases from it run as golden tests.

Funktionstest Ende-zu-Ende — vier Agenten, jede Funktion einmal durchEnd-to-end functional test — four agents, every function once
QA-Runden — sechs Prüf-Agenten in festen Rollen, Desktop und HandyQA rounds — six test agents in fixed roles, desktop and mobile
Playwright — 81 Szenarien, Desktop und 375 pxPlaywright — 81 scenarios, desktop and 375 px
Vitest — 317 Testdateien in Rechenkern, Domäne und Web, darunter die Golden-TestsVitest — 317 test files across calculation core, domain and web, golden tests included
Vier Ebenen. Unten die Menge, oben das Urteil: Je höher, desto weniger Läufe und desto mehr Kontext je Lauf. Four levels. Volume at the bottom, judgement at the top: the higher the level, the fewer runs and the more context per run.

Die QA-Runden sind der Teil, der aus dem Testen kommt. Sechs Agenten mit festen Rollen, von Akquise über Analyst und Investor bis Admin, gehen die Anwendung auf Desktop und Handy so durch, wie ihre Nutzergruppe sie benutzen würde, und schreiben jeden Befund mit Beleg auf. Die zweite Runde brachte 92 Befunde, von Dezimaleingaben über Rechteprüfungen bis zu Handy-Layouts; alle sind umgesetzt. Danach haben vier Agenten jede Funktion Ende-zu-Ende geprüft, und aus dem, was sie fanden, ist eine dauerhafte E2E-Suite geworden.

The QA rounds are where my testing background shows. Six agents with fixed roles, from acquisition through analyst and investor to admin, work through the application on desktop and mobile the way their user group would, and write down every finding with evidence. The second round produced 92 findings, from decimal input through permission checks to mobile layouts; all of them resolved. After that, four agents checked every function end to end, and what they found became a permanent E2E suite.

Die Anwendung hat selbst Agenten. Einer ordnet eingehende E-Mails den Deals zu, legt Anhänge im Datenraum ab und stößt die Extraktion an; ein zweiter liest Inserate aus Suchauftrags-Mails und prüft sie gegen die Buy Box. Beide laufen über ein Gateway mit drei Freigabestufen, die der Auftraggeber je Aktionstyp einstellt. Was Geld bewegt, also Kaufangebote, Provisions- und Widerrufsbestätigungen, ist fest auf menschliche Freigabe kodiert und lässt sich in den Einstellungen nicht lockern.

The application has agents of its own. One assigns incoming emails to deals, files attachments in the data room and triggers extraction; a second reads listings from search-alert emails and checks them against the buy box. Both run through a gateway with three approval levels that the client sets per action type. Anything that moves money, meaning purchase offers, commission and withdrawal confirmations, is hard-coded to require human approval and cannot be relaxed in the settings.

Betrieben wird die Anwendung auf einem eigenen Server in Nürnberg: ein Docker-Stack mit Reverse-Proxy und HTTPS, Postgres, dem Worker im Prozess und einer täglichen Sicherung, für rund fünf Euro im Monat. Die Einrichtung ist ein Skript, die Daten bleiben in Deutschland.

The application runs on a dedicated server in Nuremberg: a Docker stack with reverse proxy and HTTPS, Postgres, an in-process worker and daily backups, for about five euros a month. Setup is a single script, and the data stays in Germany.