Building · 6 min read

Stack diary: how Idukki actually works

AI profanity filtering, product tagging, in-video checkout. A walk-through of the pipeline.

This is mostly for the engineers and founders who keep asking. Skip if neither.

Idukki is a UGC platform for DTC brands. People film themselves with your product on TikTok, Instagram, YouTube. We pull that content, tag products inside the videos, attach checkout, and embed the result on the brand's homepage, PDP or cart. The point is to compress the distance between 'I saw a video I liked' and 'I paid for the thing in it.'

Here's what's under the hood, more or less truthfully.

The ingest pipeline

Brands give us hashtags, handles, mentions. We poll the platforms (Instagram Graph, TikTok Display, YouTube Data) on a cadence. Webhooks where we can. New content lands in a moderation queue.

The AI moderation layer

Not all UGC is brand-safe. We run every clip through a profanity / safety classifier (audio + on-screen text + caption text), then visual moderation (frames + scene). The default is 'flag, don't reject.' A human still presses approve. We learned not to over-trust the classifier the hard way — which is to say, by way of a weekend incident I do not want to describe in writing.

Product tagging

Every video can be tagged with N products at M timestamps. Tagging is part-AI (visual product detection on a brand's catalog), part-human (a quick approve/edit by the brand). The output is a JSON timeline that drives the in-video shopping overlay.

The widgets

Six layouts: grid, carousel, story, slider, popup, full-screen. Each is a small embeddable web component. Lazy-loaded. CDN-served. The widget itself is under 30KB gzipped because adding 800ms to a homepage's first-paint will get you uninstalled before lunch.

In-video checkout

The hardest bit, and the one I'm proudest of. Tap a tagged product mid-video → see the variant picker → pay → close out → the video keeps playing. No redirect. No new tab. We integrate Shopify, Magento, BigCommerce, custom storefronts. The trick is making it feel like the brand's own checkout, not a third party. (Trust dies in the redirect.)

Analytics

For the brand: which video drove which add-to-cart, which conversion, which lifetime customer. We attribute at the video × product × creator level. This is what makes the difference between 'neat content' and 'we just paid for our last marketing hire from UGC alone.'

The stack, boringly

Next.js for the dashboard. Edge functions for the embed bootstrap. PostgreSQL for everything that has to be true on Tuesday. Object storage for clips. A small army of background workers for ingestion. AI runs as a separate service so we can swap models when something better lands. (We swap models more than I expected.)

The bit that actually matters

The stack is not what makes Idukki work. The stack is table stakes. What makes it work is:

  • Latency on the embed
  • Trust in moderation
  • Friction in checkout (less is more)
  • Honesty in the analytics

Every one of those is a posture, not a feature. We argue about them weekly. We will be arguing about them long after this post is forgotten.

If you're building something similar, optimise the four postures above before you optimise anything else. Everything else is just typing.

Liked this?

I post weekly-ish on LinkedIn.

SAP, Idukki, AI, the messy intersection of enterprise UX and consumer SaaS, and the occasional kitchen photo. Follow if it sounds useful (or amusing).

Follow on LinkedIn ↗