AI Sales Platform

NetworkChains:
AI sales & relationship platform

A network relationship-management platform where I built the AI layer — a sales copilot, a realtime call assistant, a relationship graph and conversational image editing, over a shared retrieval stack.

~96K → ~2K tokens/turn6 vector collections4 subsystems
VIEW PRODUCT
Closed source
Commercial product — the AI features sit behind sign-in.

Architecture

No product screenshots — this is a backend system. The diagrams below are the system itself.

Four AI subsystems over one retrieval layer

Figure 01 — Four AI subsystems over one retrieval layer.

Open full size ↗
Dual-stream capture and per-source transcription

Figure 02 — Dual-stream capture and per-source transcription.

Open full size ↗

FOUR SUBSYSTEMS

01EarnGPT

Agentic sales copilot

Standing relationship model

The persistent model of how this seller sells.

Memory slots

Bounded, structured facts carried between turns.

Working memory

Verbatim recent context for the active thread.

RAG — chat history

Retrieval pass over prior chat messages.

RAG — documents

Retrieval pass over uploaded documents.

RAG — enriched profile

Retrieval pass over the org-global contact profile.

Deterministic blocks

Sequence state, rebuttal library, strategies and pipeline stage.

Two tools, five rounds

search_catalog, where the model writes its own query, and draft_pitch — capped at five tool rounds.

Model allowlist

Anything outside the allowlist is silently coerced back to the default, so a stale client cannot escalate cost.

~96,000 → ~1,500–2,500 tokens

Worst-case prompt input per turn, after the layered assembly replaces naive context stuffing.

02EarnGPT Live

Realtime call assist

Dual-stream capture

The host microphone and a mix of every remote LiveKit participant, captured as two separate streams.

AudioWorklet downsampling

48kHz to 16kHz mono PCM16, shipped in 250ms batches off the main thread.

One socket per source

A dedicated Deepgram nova-3 socket per stream, so speaker attribution comes from the transport rather than a diarization model.

KeepAlive every 5s

Deepgram closes idle sockets, so silent streams are kept warm.

Two-tier hash dedupe

Separate cache keys per loop, so the suggestion interval can run at one second with roughly flat cost.

Token-streamed output

Chat streams token by token over the WebSocket back to the client.

Three independent loops

Suggestions every 1s, rolling summary every 60s, action items every 30s — a slow summary never stalls the hot loop.

03Synapse

The relationship graph

Objective vs subjective

Person facts are stored once; each user's read on the relationship is stored separately against them.

Closeness scoring

A score over the relationship, derived from the accumulated signal.

Background summariser

An LLM keeps a per-relationship summary current under debounce, a TTL and daily caps.

Verified quotes

Quotes are checked by exact substring match, with a cosine fallback when the match fails.

04Image Editor

Conversational image editing

Edits as versions

Every edit produces a new version rather than mutating the image, so any step is revertible.

Async job queue

Edits are driven through a BullMQ queue rather than held open on the request.

Conversational surface

The user describes the change, and the version history is the record of what was asked.

The copilot's seven prompt layers include three separate RAG passes — chat history, uploaded documents and the enriched profile — assembled alongside deterministic blocks, so each pass carries its own filters instead of sharing one index.

Shared layer

One retrieval stack under all four

SIX QDRANT COLLECTIONS

voice_memos

Recorded seller voice notes.

earngpt_messages

Chat-message memory for recall across turns.

earngpt_documents

Filtered on userId AND contactId — a strict double filter as the security primitive.

axon_profile

Org-global enriched contact profile.

synapse_replica

The standing relationship model.

webinar_transcripts

Transcript corpus for supporting material.

Each 1536-d, text-embedding-3-small.

RETRIEVAL BEYOND kNN

Contextual retrieval

An LLM-written blurb is prepended before embedding, improving recall on terse turns.

HyDE expansion

A hypothetical answer is embedded instead of the bare query.

Reciprocal rank fusion

Fuses ranked lists under a 14-day exponential recency half-life.

Hybrid search

Dense vectors combined with lexical matching.

LLM rerank

Final reranking over the fused candidate set.

TECHNICAL ARCHITECTURE

backend

  • Node + TypeScript

    Express contacts-backend

  • MongoDB

    Primary datastore

  • BullMQ on Redis

    Async job fan-out and image-edit queue

realtime

  • Python + FastAPI

    Copilot service

  • LangGraph

    Orchestrates the background loops

  • Deepgram + LiveKit

    One nova-3 socket per audio source

retrieval

  • Qdrant

    Six purpose-scoped collections

  • text-embedding-3-small

    1536-dimensional across all six

  • FastAPI catalog index

    Serves the search_catalog tool