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.
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.