Zum Inhalt springen
Bernhard Götzendorfer
Hinter den Kulissen

FotoDrop: 20 Stunden vom ersten Commit zum ersten Deploy

Ein Familienalbum mit Coding-Agenten: vom diktierten Prompt am Donnerstagabend bis zum ersten Production-Deploy am Freitag. Und was danach noch fehlt.

Kontaktbogen aus der Design-Session: Landingpage-Entwürfe für FotoDrop und mehrere Varianten der Bildmarke
Screenshot mit KI-generierten Fotos

TL;DR

Donnerstagabend diktiere ich einen Prompt. Freitagnachmittag läuft der erste Production-Deploy, 20 Stunden und 32 Minuten nach dem ersten Commit. Das Produkt heißt FotoDrop, ein Familienalbum für iPhone und Android. Parallel entstand das Design, und meine Vorab-Wahl hielt der ersten echten Runde nicht stand. Fertig ist bisher das Fundament, der Start ist für 1. November geplant.

Donnerstag, 18:15, ein diktierter Prompt

Um 18:07 kaufe ich die Domain picturecatch.app. Acht Minuten später diktiere ich den Startprompt.

Der Auftrag: "Ziel ist es, dass wir aus diesem Repo jetzt einen Abkömmling machen, um nicht die Features in EventDrop tot zu ballern, sondern einen zweiten, separaten guten Weg einzuschlagen." Gemeint ist ein Abkömmling von EventDrop. Dort laden die Gäste einer Feier ihre Fotos über einen QR-Code hoch, ohne App und ohne Login. Wie es dort mit den ersten zahlenden Nutzern läuft, hab ich schon aufgeschrieben. Im Prompt heißt es dazu: "EventDrop ist gut, so wie es ist, aber ich glaube, da kann man noch was Besseres daraus machen."

Die neue Idee: ein gemeinsames Album für Familien, in denen einer ein iPhone hat und die andere ein Android-Handy. So ähnlich wie iCloud, nur für beide. Am Schluss steht das Ziel, gleich nach einem "Let's go!": "Ziel ist es, dass wir mit diesem Projekt am 01.11. online sind."

Neun Agenten in zwei Minuten

Zwischen 18:19 und 18:21 starte ich neun Recherche-Agenten parallel. Einer zerlegt die Architektur von EventDrop, die anderen schauen auf Marke, Markt, Technik, Recht und Infrastruktur. Um 18:24 steht der erste Commit, ein Bootstrap aus meiner Projektvorlage.

Um 18:27 schiebe ich zum Design nach: shadcn raus, gut durchdacht soll es sein, simpel, reduziert, aber stark. So, wie eine gute Grafikerin es angehen würde. Eine Minute später ist das Standard-UI-Kit per Commit draußen.

Um 18:33 meldet der Infrastruktur-Agent eine Vorhersage. Der erste Vercel-Build wird mit einem 401 scheitern, weil ein privates npm-Paket ein Token braucht. Um 18:56 scheitert er genau daran.

Nach einer halben Stunde kippt die Idee

Nach knapp 30 Minuten Recherche liegt ein Befund am Tisch, der die Prämisse umwirft. Laut Apple lassen iCloud-Alben seit iOS 27 auch Verwandte mit Android oder Windows im Browser mitschauen und hochladen. iOS 27 ist am 14. September erschienen, zehn Tage vorher. Der Haken: Jeder Upload zählt auf den Speicher dessen, der das Album angelegt hat.

Als Versprechen trägt die Brücke zwischen iPhone und Android damit nicht mehr. Um 18:47, noch bevor es Produktcode gibt, entscheide ich das neue Versprechen: "Das Album gehört der Familie."

26 Entscheidungen, eine Rückfrage nach der anderen

Um 19:30 steht der erste PRD-Entwurf. Ein Analyse-Agent geht ihn in drei Runden durch. Um 19:48 gebe ich das PRD frei: 26 Entscheidungen von mir, 12 Epics, Launch-Ziel 1. November. Jede Entscheidung kommt als Rückfrage mit Optionen, ich klicke eine an oder schreibe etwas dazu.

Zwischendurch stoppt das Session-Limit die Agenten mitten in der Arbeit. Meine Antwort darauf: "resume, continue. all limits reset".

Freitag, 08:15: 98 Issues in drei Minuten

Um 08:15 schreibe ich: "Alle 98 anlegen." Rund drei Minuten später stehen 98 Issues in GitLab, dazu 12 Epics und 6 Meilensteine bis Ende März 2027.

Um 08:39 fällt der Name: FotoDrop, auf fotodrop.at, als Schwester von eventdrop.at. Das ist die deutsche Marke zum Start, der englische Name kommt später.

"Ich muss jetzt afk"

Um 09:49 gebe ich der ersten Umsetzungs-Session das Go. Mein Auftrag: "ich muss jetzt afk und will nicht, dass du dann wartest. arbeite autonom, eigenständig und wie geplant durch die issues durch."

Die Session arbeitet allein, mit einer Grenze: Den Production-Deploy legt sie als Entwurf an und wartet auf meine Freigabe. Gesteuert werden solche Sessions über den session-orchestrator, mein Open-Source-Werkzeug dafür.

Einem grünen Build glaube ich erst, wenn ich gesehen habe, dass er rot werden kann. Also baut die Session vier absichtlich kaputte Merge-Requests, und jeder scheitert am richtigen Prüfschritt. Einer weicht eine Datenbank-Zugriffsregel so auf, dass jeder alles lesen darf. Die Integrationstests werden rot, "1 failed, 77 passed". Ein eingeschmuggeltes Fake-Token fällt der Secret-Erkennung auf.

Das Skript sagt rot, die Seite läuft

Um 14:42 wird die Deploy-Kette gemergt. Um 14:51 ist der Deploy rot, wieder ein 401, derselbe Token-Typ wie am Vorabend. Per Rückfrage gebe ich ein neues Deploy-Token frei: "ja wie empfohlen. du autonom".

Um 14:56 meldet das Deploy-Skript rot: "production was not changed". Das stimmt nicht. Vercel hat das Deployment schon selbst auf Production gelegt, weil eine Projekteinstellung Domains automatisch zuweist. Der Health-Check um 14:57 liefert 200, mit dem richtigen Commit. Das ist 20 Stunden und 32 Minuten nach dem ersten Commit.

Danach wird die Einstellung abgedreht und das Skript repariert. Um 15:35 läuft der erste Deploy sauber durch alle Schritte: Kandidat, Smoke-Test, exakte Commit-Prüfung, Freischalten, Health-Check.

Was nach 20 Stunden wirklich steht

Bis zum Deploy sind es 36 gemergte Merge-Requests, am Ende der Session 426 Unit-Tests in 43 Dateien. Der End-to-End-Test des Familienablaufs findet trotzdem einen echten Fehler: Die Login-Mails kommen ohne den 6-stelligen Code an, mit dem man sich ohne Passwort anmeldet.

Im ersten Deploy steckt das Fundament: Login per Code, Familien mit Rollen, Einladungen per Link und QR-Code. Dazu die Upload-Pipeline, die Metadaten und GPS-Daten entfernt und Duplikate erkennt. Die Startseite ist zu dem Zeitpunkt noch der Platzhalter meiner Vorlage.

Parallel dazu: ein Design, das noch niemand gesehen hatte

Am Vorabend hatte ich per Rückfrage schon eine Designrichtung gewählt, "Abzug". Auf Empfehlung der Recherche, ohne ein einziges Bild gesehen zu haben. Die Idee: ein frischer Stapel Abzüge auf dem Küchentisch, das Datum in der Ecke, orange wie der Datumsstempel einer Kompaktkamera aus den 90ern.

Um 15:02 starte ich die Design-Session in Pencil, einem Design-Tool mit .pen-Dateien, das die Agenten direkt bedienen. Der Auftrag: Varianten machen, an Personas denken, vor dem Festlegen mit mir abstimmen. Das erste Testbild ist zu glatt, Stockfoto-Look, also gilt ab da ein amateurhafter Handy-Look. Im ersten Foto-Set zeigt das Hero-Bild ein Kind. Es wird neu erzeugt, jetzt mit leerem Kinderwagen.

Um 15:48 liegen drei Richtungen mit je sechs Screens am Canvas. X1 "Abzug" mit Orange und Datumsstempel. X2 "Kühlschranktür" in Senfgelb, mit Magnet und Kinderzeichnung. X3 "Geschwister" in Tannengrün, mit schwebenden Fotokarten, sichtbar verwandt mit EventDrop. Der Text ist in allen dreien gleich.

Drei mobile Landingpage-Entwürfe für FotoDrop nebeneinander: Abzug, Kühlschranktür und Geschwister, mit gleichem Text Drei Richtungen, gleicher Text: X1 Abzug, X2 Kühlschranktür, X3 Geschwister. Fotos KI-generiert.

15:51: "ich seh aktuell noch nichts"

Nur sehe ich um 15:51 davon noch nichts: "gibts schon was zu sehen? öffne mir das bitte in den vordergrund." Pencil schreibt erst beim Speichern mit Cmd+S auf die Platte. Die Datei hat in dem Moment 315 Byte.

Um 15:55 wähle ich "Abzug" plus die Magnet-Idee. Die Agenten sollen ab da eigenständig und kritisch entscheiden, visuell und inhaltlich.

Drei Minuten später kommt die nächste Nachricht: "bin grad nochmal alles durchgegangen und finde in pencil c3 am ansprechendsten." Gemeint ist X3. Der Koordinator stoppt vier laufende Agenten und fragt nach, was mir genau gefällt. Um 16:01 schreibe ich es auf: Tannengrün als Markenfarbe, die Schrift Outfit mit runden Buttons, die schwebenden Fotokarten, ein dunkler Abschnitt für die Großeltern. Und: "alles mit dem kühlschrankstil fand ich aber auch gut, vielleicht lässt sich das noch kombinieren."

Daraus werden zwei Synthesen, S1 "Grün ruhig" und S2 "Grün + Senf". Um 16:14 wird S2 das Designsystem. Senf gibt es nur auf Werbeflächen, das ist die "Kühlschranktür". Ein ockerfarbener Magnet markiert neue Fotos. Vom "Abzug" bleibt genau ein Element, der Datumsstempel.

X3 Geschwister als Referenz neben den beiden Synthesen S1 Grün ruhig und S2 Grün + Senf Links X3 als Referenz, daneben S1 "Grün ruhig" und S2 "Grün + Senf". S2 wurde das Designsystem.

Eine Bildmarke nach Messung

Die Grundidee kommt von EventDrop, dort ist die Marke eine Karte mit Punkt. EventDrop steht für "unterwegs", FotoDrop für "angekommen". Sieben Varianten, V1 bis V7, werden gemessen. Wie viel Fläche deckt die Marke? Bleibt die Fuge bei 16 Pixel sichtbar? Sieht man beim Drehen oder Spiegeln plötzlich ein Gesicht? Und was liest ein anderes KI-Modell hinein?

V1 bis V3 werden als Benachrichtigungs-Punkt gelesen. V6 "Ecke als Punkt" gewinnt, bei 0 von 5 Lesarten als Badge. Die Restschwäche benennt der Agent gleich mit: Einfarbig bei 16 Pixel weicht die Silhouette nur um 2 Prozent von der EventDrop-Marke ab. Unterscheiden müssen sich die beiden also über die Farbe. Offen ist noch, was drei echte Menschen in der Marke sehen.

Messblatt mit den Bildmarken-Varianten V1 bis V7 neben der EventDrop-Marke, gerendert von 16 bis 180 Pixel Messblatt der Bildmarke: V1 bis V7 gegen EventDrop, von 16 bis 180 Pixel.

Ein Persona-Panel mit vier Rollen gibt viermal "warn", blockierend ist nichts davon. Die Großmutter braucht 64 Pixel große Tippflächen und die Zusage, dass sie nichts löschen, kaufen oder teilen kann. Der Datenschutz-Skeptiker findet, ein KI-Baby in der Werbung passe schlecht zu "ohne KI-Training".

Die Zweitmeinung von Codex, einem anderen Modell, ist deutlich: "Das Produkt ist im Marketing nicht zu sehen." Dazu sei die Bildwelt zu idyllisch, mit Alpen, Holz und Strick. Meine Zielgruppe ist Österreich, also sollen die neuen Motive aus österreichischen Städten kommen, mit Straßenbahn und Altbau. Das ist die nächste Runde.

Was ich aus den 20 Stunden mitnehme

"Abzug" hab ich am Vorabend auf Empfehlung gewählt, bevor es ein einziges Bild gab. Beim nächsten Mal wähle ich eine Richtung erst, wenn Entwürfe am Canvas liegen.

"production was not changed" war eine klare Meldung, die nicht gestimmt hat. Gezeigt hat das erst der Health-Check, weil er den Commit zurückliefert, der wirklich läuft. Auf den schau ich, egal was das Skript davor meldet.

Bis 1. November ist noch einiges zu tun, angefangen bei der Startseite. Ob sich der Termin ausgeht, zeigen die nächsten Wochen. Ich freu mich drauf.

EventDrop bleibt für den Anlass, FotoDrop soll das Album für den Alltag danach werden. Hochladen können alle vom eigenen Handy, die Großeltern schauen über einen Link zu.

Wie ich sonst mit Agenten arbeite, steht auf der Startseite. Und wenn du Fragen dazu hast, schreib mir.