About this project

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.

MCP server designTypeScript / Next.js 16Electron + IPCSupabase + Postgres RLSOAuth fan-outLLM tool calling

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.