ExtensionReach
Lead-Discovery- und Growth-Plattform: vier Laufzeitumgebungen auf einer Datenbank, drei KI-Agenten mit 31 Werkzeugen.
- Rolle
- Alleinentwickler, internes Werkzeug
- Zeitraum
- Januar bis Mai 2026
- React 18
- TypeScript
- Supabase
- Deno
- Chrome MV3
- OpenAI
- Claude auf AWS Bedrock
- Vercel
- GitHub Actions
Worum es ging
Gebaut, um das eigene Distributionsproblem zu lösen: Wer sind die passenden Ansprechpartner, was ist über sie belegbar, und wie kommt daraus eine Nachricht, die keine Serienmail ist.
Vier Laufzeitumgebungen teilen sich eine Datenbank: eine PWA, zwei Chrome-Extensions und fünfzehn Edge Functions, dazu acht Workflows in GitHub Actions. Drei Agenten mit insgesamt 31 Function-Calling-Tools recherchieren, prüfen Aussagen gegen Quellen und schreiben Entwürfe; einer davon streamt über SSE durch einen zweifach authentifizierten Bedrock-Proxy. Die Ansprache auf LinkedIn läuft manuell und in menschlichem Tempo; die Agenten bereiten vor, ein Mensch gibt jede Nachricht frei.
Der Kern ist nicht die KI, sondern die Grenze um sie herum: Die Agenten dürfen alles vorbereiten und nichts absenden. Jede Nachricht an einen echten Menschen braucht eine Freigabe in der Oberfläche, jede erzeugte Behauptung einen zweiten, unabhängigen Prüfschritt, bevor sie gespeichert wird. Ein Sprachmodell erzeugt Plausibles, nicht Wahres, und die Prüfung gehört deshalb nicht in denselben Aufruf.
Zahlen
- Laufzeiten auf einer Datenbank
- 4 Laufzeiten auf einer Datenbank
- Function-Calling-Tools
- 31 Function-Calling-Tools
- Plattformen, aus denen Leads kommen
- 9 Plattformen, aus denen Leads kommen
Einblicke





Eine fremde Oberfläche ist keine Schnittstelle
LinkedIn ist eine React-Single-Page-App mit gehashten Klassennamen, und ein .click() löst dort nichts aus: Die Handler hängen an Pointer- und Mausereignissen mit echten Koordinaten. Die Extension sendet deshalb die vollständige Folge aus pointerdown, mousedown, pointerup, mouseup und click mit den Koordinaten des Zielelements, und erkennt Schaltflächen über aria-label statt über Klassennamen, weil semantische Attribute länger halten. Der Schritt, der am meisten gelehrt hat, kam danach: Ein Dropdown liess sich nicht auslesen, weil zwei Skript-Einspritzungen, eine zum Öffnen und eine zum Lesen, den Zustand dazwischen verlieren. Die Lösung war ein einziger injizierter Aufruf, der innerhalb der Seite auf das Rendering wartet und erst dann zurückmeldet. Aus einer Schleife mit Timeouts wurde ein Aufruf mit einer Antwort. Die Grenze zwischen zwei Ausführungen ist eine echte Grenze; wer sie übersieht, sucht den Fehler in der eigenen Logik.
Stack
- Laufzeiten
- React 18
- TypeScript
- PWA
- zwei Chrome-Extensions nach Chrome MV3
- Service Worker mit Job-Queue
- Seitenpanel
- Vercel
- Datenbank
- Supabase
- Postgres mit 34 Tabellen
- 38 Migrationen
- Row Level Security je Rolle
- Realtime
- Storage
- Edge Functions
- 15 Funktionen in Deno
- Bedrock-Proxy mit SSE
- Signaturprüfung für Webhooks
- pg_cron
- KI und Recherche
- Claude auf AWS Bedrock
- OpenAI
- Perplexity
- 31 Function-Calling-Tools
- Fact-Check als zweiter Aufruf
- Externe Dienste
- Apify
- RapidAPI
- Apollo.io
- Telegram
- HubSpot
- Smartlead
- Betrieb
- GitHub Actions als Zeitsteuerung
- Playwright als Renderer auf dem Runner
Status
Entwicklung im Mai 2026 eingestellt und nicht weitergeführt. Repository privat, Einsicht auf Anfrage.