← Back to selected work
02 / Engineering storyIndependent product · Agent and platform architecture

Agenvik

Conversations with a memory.

Document-grounded conversational agents across WhatsApp, Slack and the web. Product UI meets the engineering of reliable, stateful conversations.

LangGraphTypeScriptPostgreSQLAgent systems
Multi-channelWhatsApp Business API + Slack
Durable statePostgresSaver checkpoints
Tenant isolationPer-organisation context
01 / The challenge

A product problem, not just a screen.

A useful support or lead-capture agent needs more than a prompt. It needs the right organisation’s context, a stable identity across incoming messages, and conversation state that survives a process restart. The surrounding product also needs to make knowledge and agent configuration understandable.

What I owned

I architected the LangGraph-based conversational platform and built its channel-identity, tenant-isolation and durable-state foundations. The platform uses Bun, Elysia, Drizzle and PostgreSQL, with WhatsApp Business API and Slack integrations.

The system, made visible

Trace a conversation through the system

Conceptual architecture based on the implemented platform. The public dashboard image below contains demo workspace data.

  1. 01Receive
  2. 02Resolve
  3. 03Run
  4. 04Persist
01

Receive

Messages arrive through WhatsApp Business API or Slack, with each channel’s own identity format.

02

Resolve

Channel identities are normalized and the organisation boundary supplies the appropriate tenant context.

03

Run

LangGraph runs the conversation workflow, including intent detection and entity handling with safeguards.

04

Persist

PostgresSaver checkpoints keep multi-turn state durable across process restarts.

02 / Engineering decisions
01

Normalize identity before running the agent

What I built

I implemented channel-identity normalization and per-organisation tenant isolation.

Why it matters

A channel-specific sender ID is only one part of the conversation context. Organisation and identity boundaries need to be established before the agent handles the message.

02

Persist the conversation, not just the transcript

What I built

I used LangGraph with PostgresSaver checkpointing for durable multi-turn state across restarts.

Why it matters

Checkpointed execution gives subsequent turns a persistent state foundation. Conversation continuity does not depend on one in-memory process staying alive.

03

Treat extracted data as untrusted input

What I built

I designed intent-detection and entity-injection pipelines with prompt-injection safeguards for LLM-extracted user data.

Why it matters

Model output can carry user-controlled content. The boundary between extracted entities and agent instructions deserves explicit handling.

03 / Evidence & results

An agent platform that combines channel integrations with persistent, organisation-scoped conversations.

The public product page and developer guide provide a view into the product. The pictured Northstar Help Desk workspace is published demo content, not a customer account. No customer-volume, accuracy or latency figures are claimed.

Agenvik published demo showing knowledge sources and agent configuration
Published product demo · Illustrative workspace
Explore Agenvik ↗Read the developer guide ↗
Keep exploringInvestSky↗

A better feel for finance.