Nikhil Deshpande

building

Bobhata 2.1: moving a ten-year-old Marathi site to video

·Published here

The Bobhata logo beside three phones showing the new site: the Shorts feed in front, with the video page and the series page behind it.

Bobhata is a Marathi infotainment site I have co-run since 2016. It has over 7,000 articles, a Facebook page which brings most of its reach, and a YouTube channel of about 6,400 subscribers.

Yatin Godse has been Bobhata’s technical backbone from inception, and he built the Drupal version the site ran on for its first ten years. Bobhata 2.0 was the move from Drupal to Next.js and Strapi in January 2026, with an AI writer behind it. Bobhata 2.1 is the move to video. There is a pipeline which makes the videos, and the site is rebuilt so they have somewhere to live. The UX fixes came along with it, and they come second in this piece as well.

I built this with Claude Code, so the “we” below is me and an agent.

What Before After
Making a reel Manual edit Plan in, MP4 out. About 80 finished reels since 8 October
Video on the site None Shorts feed, film stage, 54 series pages
Paid API spend on reels n/a About $1.30 since 14 October
New articles on the site 31 in all of 2025 Over 450 in 2026 so far

Why video

The site had gone quiet. Posts per year fell from 1,228 in 2021 to 161 in 2023, 10 in 2024 and 31 in 2025. The newest post before October was from 12 February 2026.

The work had not stopped. It had moved. Bobhata was putting several photo stories a day on Facebook and a reel a day on YouTube, Facebook and Instagram, and none of it reached the website.

The first idea was to embed videos inside articles. I rejected it as cosmetic. What I wrote back was “I’m asking for a plan for real structural changes.” So the work became two things: an engine to make video every day, and a site with a proper place for it.

The reel engine

The engine takes a JSON plan and gives back a finished, mastered video. It is one repo shared by every channel. Today that is Bobhata. The reel work started inside the AI writer’s repo on 8 October and moved to its own repo on 14 October. It has made about 80 finished Marathi reels so far.

Eight stages in order: fact sheet, JSON plan, lint, pictures, narration, word timing, Remotion render, and master to minus 14 LUFS.
From fact sheet to mastered MP4.
  • Research first. Every reel starts from a fact sheet. Each claim gets a confidence grade and a source, and anything graded low is never said.
  • The plan. Written by hand, or drafted from an article by Gemini. It holds the scenes, the narration, the words on screen and the visual template for each scene.
  • Lint. This catches what used to reach my review: reels over 90 seconds, which is Facebook’s limit, text overlapping on whiteboard scenes, icons which do not exist, and too many type-only scenes in a row.
  • Pictures. Named people get a licensed photo with a credit, from Wikimedia Commons or the press. A generated likeness of a real person is never used. Other pictures come from Flux running locally or from fal.ai.
  • Narration. One Gemini TTS call per reel, so the voice keeps one take.
  • Word timing. A Marathi forced aligner (MMS, language mar) times every word for the captions. It also cuts the narration at the pauses between scenes.
  • Render and master. Remotion renders 1080×1920 at 30 fps. A two-pass loudnorm then masters the audio to −14 LUFS, the level Reels and Shorts expect.

AI pictures lost the viewers

The first reels leaned on AI images. Retention data showed those reels lost viewers in 3 to 10 seconds, and a code-drawn explainer did best. So the templates are now mostly code. The engine grew a whiteboard with a drawing hand, a physics lab, maps, timelines, scoreboards and bar charts, a survey form for satire, a paper-cut style and a 3D diorama rendered in Blender.

GLSL cuts, parallax from depth maps and beat-snapped sound effects add motion, each used once per reel as the signature of a series.

No two series alike

That was my rule. Each series has its own voice, picture style, music mood and opener. गुन्ह्याची फाईल is crime noir with the Charon voice. परमवीर is a comic halftone with a citation opener. मैदान is a retro sports poster with a scoreboard. व्हायरल विज्ञान is physics drawn in code.

Long films on a free quota

Setting format: landscape renders 16:9 documentaries of up to 40 minutes, recorded chapter by chapter. So a long film can be recorded over several days of free TTS quota. The 22-minute Telgi documentary was made this way.

What it costs

Gemini runs on the free tier and most pictures are made locally. The engine logs every paid call at list price. The reels since 14 October come to about $1.30. All the paid calls in that time come to about $7.60, and $5.78 of that was one test of talking-head avatars.

How a reel goes out

One reel a day goes out at 7:30 in the evening to YouTube Shorts, Facebook Reels and Instagram Reels from a single Buffer queue. A topical extra goes at 1 PM when the news calls for it. Buffer’s free plan holds 10 posts per channel, so the queue runs about ten days ahead.

One CSV holds every slot: date, series, episode, caption, AI label, approval status and early metrics. “Approved” and “in Buffer” are tracked separately, after the two were mixed up once.

Each caption ends with its sources and an “AI-assisted pictures and voice” credit.

Where the video lives on the site

Every upload reaches bobhata.com through an hourly Strapi cron job, which reads the channel’s Videos and Shorts tabs. It adds new uploads and refreshes view counts, and it never overwrites an editor’s changes. I wanted everything the site shows to come from the web stack, so I can edit it myself.

So every phone screen now has a five-tab bar: होम (home), शॉर्ट्स, व्हिडिओ, मालिका (series) and शोध (search).

  • शॉर्ट्स. A full-screen vertical feed. Swipe for the next Short, tap for sound, and a पूर्ण गोष्ट वाचा button goes to the matching article. It uses the YouTube IFrame API with one live player at a time. /shorts/<id> gives each Short its own URL, so a WhatsApp share opens the site.
  • व्हिडिओ. Long-form on a dark stage, with chapters and a link to the story. Only real films are indexed, which means an upload date plus a description, chapters or a linked article.
  • मालिका. 54 series pages. Start at episode 1 and keep going, whether an episode is an article, a Short or a film. Progress is kept in the browser, so no login is needed.

Series and Video are new Strapi collections, so all of this runs from the admin.

The UX fixes

This is the second half of 2.1, and it is smaller work.

  • Home. One lead story in place of the old slider, with rails below it for Shorts, a series you were reading, this week’s film, latest and most read.
  • Colour. An audit found one orange hardcoded 60 times in 21 files. Now there is one colour per section, taken from the logo: orange for reading, pink for Shorts, blue for series, gold for video. The same audit removed letter-spacing, which breaks Devanagari conjuncts.
  • Search. It takes English letters too. “itihas” finds इतिहास and “telgi” finds तेलगी.
  • Reading. A native share button on phones, three text sizes applied before first paint, and a “watch this story” card when a film or Short was made from the article. A table of contents bug is also gone. Heading ids never reset between renders, so links pointed at the wrong headings.
  • SEO. Every migrated canonical from 2.0 pointed at a www URL which redirected back, and article pages ignored their Marathi meta titles. Both are fixed. There are also topic hubs, year archives with crawlable pagination and a media sitemap.

The front end has 48 automated tests.

How everything reaches the site

Nothing reaches the site except through Strapi’s API. Each source has one path in, and every path can be re-run without making duplicates.

Facebook page, AI writer and YouTube channel each publish into Strapi, which holds posts, series and videos. A webhook then updates bobhata.com. The reel engine reaches YouTube through Buffer.
Every source publishes into Strapi and the site reads only Strapi. The archive has grown past the number in this figure.

About 450 Facebook stories which had never been on the website are now there, each with its original date. Each post carries a source key in a field the site never shows, so a re-run updates the post instead of copying it.

What I rejected on the way

Most of the lessons came from me rejecting a first attempt. Each rejection became a written rule which the tools now enforce.

Decision What was tried first What changed
Structure before style Embedding videos inside articles The site was rebuilt around read, Shorts, video and series
The CMS is the source of truth Series defined in the AI writer’s files Moved into Strapi, so I edit the site without a developer
Style is a treatment, not a filter A lookbook of the same photos with different filters Each style starts from the topic, with new drawing and animation
Code-drawn beats AI pictures AI-image reels Viewers dropped in 3 to 10 seconds, so the engine grew drawing kits
Topics need mass appeal A niche viral clip, festival-only slates Pick what most viewers already know or face this week
Check every frame Rendering, then reviewing by eye Contact sheets at 1 fps, and lint rules for every bug found
One story, one page New articles on topics the archive already had Check for a duplicate first, then refresh the old article and link the video

What I do not know yet

2.1 launched on 4 November, so I have no results to report. Three numbers will tell me whether it worked: page views and where they come from, plays from the site’s Shorts feed, and how far readers get into a series.

The engine still runs on my Mac. The Facebook export is still a one-off, and it needs to become a weekly job.