Anindya Chowdhury Senior Software Engineer
I find the useful bit in sports feeds, news archives and hours of video.
Swipe the timeline for earlier years
Best matches for video
25 Sept 2026Post 1.69Building a Local-First Search Engine for CCTV FootageTriloch, part 1: why I'm building search over hours of recorded camera footage, running entirely on my own…
3 Nov 2026Post 1.59Live Sport for Phones: 9:16 Streams with AWS Elemental InferenceElemental Inference, part 1: a smart-cropped 9:16 copy of a live match from MediaLive, set up from code,…
18 Oct 2026Post 1.28Getting My CCTV Captions Ready for SearchTriloch, part 5: the search box works on older captions. I built a local path from new clips to traceable…
Where I’ve worked
- Video startup (stealth)Software Engineer2026-07 to now
- VideoverseSenior Software Engineer2024-01 to 2026-07
- Built the Partner Layer, an event-driven API that gave broadcasters self-serve access to stream ingestion, metadata and webhooks, with retries and an audit log built in. Onboarding went from a week to a day, at 300K+ events a day.
- Led a three-person partner engineering team across inbound broadcaster integrations and outbound publishing, and worked out API contracts and failure handling directly with broadcaster engineers. That work supported more than $1M in partner deals.
- Built a connector framework for publishing integrations. A new connector went from over a month of custom code to about three weeks, fully tested, and the team shipped 20+ of them, from OneDrive, Dropbox and Slack to custom builds for media partners.
- Lets DiveSoftware Engineer I2021-08 to 2024-01
- Built webhook-based calendar sync for Google Calendar and Outlook across 1,000+ connected calendars, covering reschedules, cancellations, attendee changes and conferencing updates.
- Built HubSpot and ClickUp integrations that auto-published the AI meeting summaries, adopted by 20+ workspaces.
- Built an AI companion from the first commit, with architecture guidance from the seniors: you texted a Telegram bot, an SQS and Lambda pipeline ran the message through an LLM, ElevenLabs turned the reply into speech, and Stripe handled billing. That one was genuinely fun to build.
On the side
| Project | What it does | State |
|---|---|---|
| Triloch | A local-first search engine for my own CCTV footage. | Building now |
| useQR | Fifteen free QR generators for small businesses, covering UPI payments, WhatsApp, Wi-Fi and restaurant menus, plus a scanner. | Live |
| Roast My Plate | Upload a food photo and one of 30 grandmothers roasts you. | Archived |
| Samvad News Harvester | A Go pipeline that pulled Indian news into Samvad. | Open source |
| Indiclang Fraud Shield | A bot for WhatsApp and Telegram that checks whether a message is a scam, and it understands Indic languages. | Live |
From live feed to search result
A broadcaster’s live feed comes in at one end. Someone typing “walks” comes in at the other. Here are the stops in between, and what I built at each.
Which leaves the hard part: finding the right clip once it’s all in there.
-
#EXTM3U #EXT-X-TARGETDURATION:6 #EXT-X-MEDIA-SEQUENCE:1042 #EXTINF:6.000, seg_1042.ts #EXTINF:6.000, seg_1043.ts … a sample, and it keeps growing
01 IngestStreamForge
A Fargate container per live stream pulls raw segments from a broadcaster’s asset manager and writes a live HLS playlist.
50+concurrent live streams Read the case study -
02 TranscribeNear-live transcription
Rolling chunk transcription for a client, so a live event’s transcript was searchable within minutes.
Read the post -
03 ReframeLive sport for phones
A smart-cropped 9:16 copy of a live match from MediaLive, set up from code, without risking the 16:9 feed.
Read the post - 300K+events a day, in production1 dayto onboard a broadcaster, down from a week04 Deliver
The Partner Layer
Clips and metadata out to broadcasters through a separate partner service, with signed webhooks, retries and a record of every delivery.
Read the case study - ~300fields in one MongoDB document<100msp95 replication lag into PostgreSQL05 Store
Clip variants, moved live
Pulled clip variants out of an overloaded document into normalized PostgreSQL models, with zero downtime.
Read the case study -
06 SearchTriloch
Search over my own CCTV footage, on my own machines. Two local models described 698 October clips in three days.
Read part 6
Three ways I’ve found the right evidence
Search is only as good as what it pulls back. I’ve had to get that right three times, and each time it took a different trick.
-

Samvad
News search that showed how Indian outlets covered the same story. I rebuilt retrieval around full article search and ranked evidence, then took the model out of the retrieval path. It ran for two months with payments, and I shut it down when the market wasn’t there.
369Knews articles from 24 outlets -

Context without a vector store
A policy file and a keyword scorer decide what the model sees, from several backend services. It holds until two topics tie and it withholds the wrong half.
259prompt tokens, against 416 for dumping in everything it fetched -

Triloch’s keyword search
BM25 over caption claims from my own footage. It matches the exact word typed, so the words the captions use decide what you find. Try one.
92of 2,739 claims contain “walks”
Other write-ups
All 17 postsOn my shelf
- Competing Against LuckClayton M. ChristensenReading now
- Clean ArchitectureRobert C. Martin
- The Mom TestRob Fitzpatrick
- The Psychology of MoneyMorgan Housel
I build AI agents that keep working after the demo.
Open to freelance projects, remote across EU and US hours, from Kolkata.