Sandesh is a portfolio piece, not a startup.
It's built and dogfooded by Amar Gupta to demonstrate end-to-end ownership of a cross-platform publishing system — OAuth fan-out across LinkedIn, Threads, Instagram, and YouTube, a Claude Code answerer driving the composer, and a custom MCP fabric shared with four sibling products. Signup stays gated so the live platform tokens don't leak.
About the builder
Amar Gupta
AI-powered full-stack engineer · 7+ years · building agent-native software
Sandesh is part of a five-product portfolio that shares infrastructure: a custom MCP fabric, Supabase with RLS, channel-based wakes, and a desktop Electron relay. I built every layer — the OAuth flows for four platforms, the publish pipeline, the structured preview envelopes, and the Claude Code integration that makes the system actually do work.
What Sandesh demonstrates
Six skills, one running system.
01
Per-platform OAuth fan-out
Independent OAuth flows + token stores for LinkedIn, Threads, Instagram, and YouTube. Each publisher handles platform-specific quirks (URN shapes, media-IDs, video-ID extraction) behind a uniform "publish" interface.
02
Structured preview envelopes
Every assistant reply carries a JSON envelope validated against a schema duplicated in three places (Vercel, Sutra, Sandesh skill). CI hashes all three — drift = red build. Browser renders a real LinkedIn-style preview before publish.
03
Cross-origin Bearer auth
Sandesh and Setu share Supabase project so a Setu JWT validates as the same `auth.uid()` here. CORS+Bearer on `/api/sandesh-chat/{send,confirm}` lets the Setu dashboard drive ideate without a token exchange — RLS still binds.
04
Twin MCP servers, deliberate split
Vercel `/api/mcp` registers post + schedule tools. Chat-respond family lives only in Sutra (Electron) because Vercel serverless can't hold a persistent answerer. External Claude Code clients can publish via Vercel; chat answers come from the desktop.
05
Postgres + RLS at the boundary
Single Supabase project with row-level security on every table. `pa_scheduled_posts`, `sandesh_chat_messages`, `pa_observability_events` all RLS-bound; service-role only used at the MCP boundary with manual `user_id` filtering.
06
Real-time streaming UX
Browser composer subscribes to `sandesh_chat_messages` Realtime UPDATEs (streaming) and INSERTs (final). Preview envelope hydrates as Claude streams — operator sees the post taking shape live, not after a 30-second wait.
Sibling products
Sandesh is one of five.
Setu, Sandesh, Sankalp, Swayam, and Sathi share the same Supabase project, the same MCP fabric, and the same channel-based wake protocol. Each lives at its own subdomain and demonstrates a different end-to-end use case.
Hiring?
Open to AI / full-stack roles — and contract work.
Full-time, contract, or consulting — AI engineering, MCP / agent infra, full-stack TypeScript. Grab my résumé below or watch the demo, then I'll happily walk a hiring panel through any layer of this system live: the OAuth flows, the preview envelope schema, the publish pipeline, or the Claude Code integration that makes it actually work.