Skip to content
← All projects

ExtensionReach

Lead discovery and growth platform: four runtimes on one database, three AI agents with 31 tools.

Role
Sole developer, internal tool
Period
January to May 2026
  • React 18
  • TypeScript
  • Supabase
  • Deno
  • Chrome MV3
  • OpenAI
  • Claude auf AWS Bedrock
  • Vercel
  • GitHub Actions

What it does

Beyond the first paragraph this page is still in German. A full translation is on its way.

Built to solve my own distribution problem: who are the right people to talk to, what about them can be backed by a source, and how does that become a message that is not a mail merge. Four runtimes share one database: a PWA, two Chrome extensions and fifteen Edge Functions, plus eight GitHub Actions workflows. Three agents with 31 function-calling tools research, check claims against sources and draft messages. The core is not the AI but the boundary around it: the agents may prepare everything and send nothing, every message to a real person needs a release in the interface, and every generated claim gets a second, independent check before it is stored.

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.

Numbers

runtimes on one database
4 runtimes on one database
function-calling tools
31 function-calling tools
platforms leads come from
9 platforms leads come from

Screenshots

Batch Review. Der Kern des Ablaufs: jeder Lead mit aufklappbarer Recherche, drei bewerteten Entwürfen und der Freigabe, ohne die keine Nachricht das Haus verlässt.
Lead Discovery, LinkedIn. Suchprofil mit Titel, Region und Firmen, dazu die gefundenen Leads, einzeln oder gesammelt freizugeben.
Community Alerts. 626 Treffer aus fünf Plattformen, davon 462 aus Trigger-Begriffen, je mit Quelle, Priorität und Stichwort.
Email Outreach. Anreichern, erzeugen, prüfen, exportieren; Apollo.io holt Adressen zu Leads, die nur ein LinkedIn-Profil haben.
Carla. Das Tagesbriefing als gerendertes Markdown, mit Pipeline-Tabelle, Gesprächshistorie und Schnellaktionen.

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

Runtimes
  • React 18
  • TypeScript
  • PWA
  • zwei Chrome-Extensions nach Chrome MV3
  • Service Worker mit Job-Queue
  • Seitenpanel
  • Vercel
Database
  • 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
AI and research
  • Claude auf AWS Bedrock
  • OpenAI
  • Perplexity
  • 31 Function-Calling-Tools
  • Fact-Check als zweiter Aufruf
External services
  • Apify
  • RapidAPI
  • Apollo.io
  • Telegram
  • HubSpot
  • Smartlead
Operations
  • GitHub Actions als Zeitsteuerung
  • Playwright als Renderer auf dem Runner

Status and reading

Development stopped in May 2026 and not continued. Repository private, access on request.