Skip to content
View parbhatkapila4's full-sized avatar
🎯
Focusing
🎯
Focusing

Block or report parbhatkapila4

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
parbhatkapila4/README.md

Parbhat Kapila

AI Systems Engineer. I build retrieval and agent systems on Postgres, and I care more about what they do when they fail than what they do in the demo.

parbhat.dev · LinkedIn · X · parbhat@parbhat.dev

Open to full-time remote roles. If the team builds in one room, I'd rather be in it.


Five systems, deployed

All five are mine. I built them, deployed them, and still run them, which is why the notes below are about trade-offs rather than features.

VectorMail. Autonomous email agent. Read and write are separate rails on purpose: search returns cited sources, and the write path is double-gated (topic gate, then outbound moderation) before anything leaves. The model sits upstream of the gate and is never trusted to be the gate. Automation is dry-run by default and every action carries an idempotency key, so a double send is a database constraint violation rather than a duplicate email in someone's inbox. Embeddings live as a vector(768) column on the email row, which means tenancy is enforced in the same WHERE clause as retrieval and there's no second store to keep in sync.

Sentinel. CRM as a permission layer. Ingestion from Gmail, Calendar and Slack is fail-closed: nothing enters the system unless it matches a CRM contact, and the default is deny. HubSpot and Salesforce OAuth. The repo is public and MIT licensed, so this one you can read instead of taking my word for it.

RepoDoc. Codebase RAG that embeds what each file means, not what it says. Every file gets an LLM summary capped at 100 words; the summary is what gets embedded (768d) and retrieved by pgvector cosine over an HNSW index. Postgres is also the job queue: indexing rows are claimed by atomic compare-and-swap under five-minute leases with cursored resume, so a job survives serverless 60-second timeouts instead of restarting. Per-project budget is checked in the hot path: over budget returns 402 and pauses indexing mid-job rather than discovering the overrun on the invoice.

CUTLINE. One sentence in, one finished MP4 out, through a twelve-stage deterministic pipeline. Pipeline over agent, deliberately: no templates, no creative knobs, no model deciding the control flow. Next.js control plane on Vercel with a separate long-running BullMQ worker and Redis as the coordination backbone. Image sourcing falls through four providers so a render never dies on a missing asset. Payment webhooks claim a processed_webhook_events row atomically before granting entitlement, which makes a double-grant structurally impossible rather than unlikely.

Visura. Versioned document processing. Chunks are keyed by SHA-256, so re-processing an updated document costs in proportion to what actually changed, not to the size of the file. Stuck versions are detected and replayed idempotently with partial progress preserved. Token limits are enforced atomically before work starts, not reconciled after.


Decisions that cost me something

  • Postgres and pgvector instead of a managed vector database, in all five. Costs stay predictable, queries stay inspectable, and tenancy lives in the same clause as retrieval. The trade is that I own index tuning and recall regressions myself.
  • Multi-provider routing, added after a single-provider outage took a build down. Fallback is cheap to write before you need it and expensive after.
  • Fail-closed defaults. Sentinel drops data it can't attribute rather than guessing at it. That makes the product feel stricter than tools that ingest everything, and I'd make the trade again.
  • In-memory idempotency for CUTLINE's job submits rather than a Postgres job-state table, because BullMQ already owns job lifecycle and two sources of truth is worse than one weaker one.
  • Shipped ahead of the right abstraction more than once and paid for it in refactors. Still the correct call while the usage shape was unsettled, but it was a bill, not a free lunch.

Stack

TypeScript · React · Next.js · Node · Large Language Models · Postgres · pgvector · Redis · BullMQ · Drizzle · Prisma · Docker · AWS · Vercel · OpenRouter · Clerk


parbhat@parbhat.dev. I answer fast.

Pinned Loading

  1. Sentinel Sentinel Public

    Enterprise Revenue Operations Intelligence Platform with predictive risk assessment, real-time deal monitoring, and AI-powered recommendations. Built with Next.js 16 Server Components, TypeScript, …

    TypeScript 1 1

  2. Cutline Cutline Public

    AI-directed video editing. One sentence in. Edited video out. Full pipeline: narrative, shots, voice, subtitles - no timeline, no tools, no you.

    TypeScript 1 1

  3. RepoDocs RepoDocs Public

    An AI-Powered Code Documentation Platform Automated documentation engine with hybrid search (BM25 + vector). Transformed 200+ repos into queryable knowledge bases, cutting onboarding time 80%

    TypeScript 3 1

  4. Vector-Mail Vector-Mail Public

    An AI Email Intelligence Platform Real-time email intelligence with multi-provider AI fallback, semantic search, OAuth integration. Handles incremental sync and streaming with 70% cold start reduct…

    TypeScript 2 2