Skip to content
mdr
All work
beta2025·personal

Network Intelligence OS

Import LinkedIn contacts, ask natural-language questions, get ranked answers with evidence.

Screenshot of Network Intelligence OS

TL;DR

  • CSV-only ingestion, server-side normalized.
  • Natural-language ranked search with evidence.
  • pgvector embeddings for semantic recall.
  • Hardened: row caps, escaped rendering, restricted CORS, least-privilege DB user.

Architecture

Flow
CLIENTINGESTQUERYSTORAGEDashboard UISupabase realtimeCSV uploadsize + header capsNormalizerserver-side onlyEmbedderper-contactOpenAINLQ rankerwith evidencePostgres+ pgvector

Single-tenant. No external fetches. Embeddings precomputed on import.

sync · HTTP / RPCdata · read / write

Problem

Personal LinkedIn networks are searchable by name only. Asking 'who do I know in SF interested in AI infra?' is impossible without exporting a CSV and grep'ing manually. The data is sitting there; the interface is missing.

Approach

CSV importer with server-side normalization (size caps, header validation, no external image fetching, escaped rendering). NLP-driven query layer ranks people with supporting evidence. Built on Next.js 16 + Supabase realtime + pgvector for embedding search. Hardened from the start, not retrofitted.

Deep dive

Why hardening from day one

A network tool is exactly the kind of app that becomes a juicy target — full of personal data with a single user. Designing for least-privilege, no external image fetching, and transactional snapshot replacement from the first commit keeps the threat surface tiny without slowing iteration later.

Evidence-ranked search

Embedding-only ranking gives you uncanny results without explainability. Each hit comes with the field that matched (title, summary, mutual, tag) so the user sees why someone surfaced. Cheap to build, huge trust difference.

Outcome

MVP. Security review documented. Threat model in /docs. Tests at unit (Vitest), integration (Pytest), and e2e (Playwright) levels.

Related

More in ai.