How this site is built
A zero-cost personal site on Astro, Cloudflare Workers and GitHub Actions, with a weekly OTT roundup that publishes itself.
- Astro
- Cloudflare Workers
- GitHub Actions
- Claude
- TMDB API
- Node.js
This site runs entirely on free tiers. The only thing I pay for is the domain.
The stack
| Piece | What it does |
|---|---|
| Astro | Builds static HTML from Markdown. No server, nothing to patch. |
| Cloudflare | DNS, CDN, SSL, and Workers static assets for hosting. |
| GitHub Actions | Builds and deploys on every push, and runs the weekly OTT job. |
| Claude scheduled task | Researches the week’s OTT releases and commits them as JSON. |
| TMDB API | Posters and links for each title. |
How a change goes live
- I write a Markdown file and push to
main. - GitHub Actions runs
npm ciandnpm run build. wrangler deployuploadsdist/to Cloudflare Workers.- The site is live on
mrvitej.inwithin a minute or two.
The weekly OTT pipeline
My first version pulled the list straight from TMDB. It was fully automatic but not very good: TMDB only knows “digital release” dates, so it listed old Hollywood films and missed most Indian OTT premieres, dubbed versions and regional platforms like Aha or ETV Win.
The current pipeline:
- Thursday evening, a scheduled Claude task searches the week’s OTT release coverage (Sacnilk, FilmiBeat, IWMBuzz and others) across 28 platforms, cross-checks dates, and keeps titles available in Telugu, Tamil, Hindi, Malayalam or English.
- It writes the week as one JSON file (format in
docs/ott-format.md), checks it withscripts/validate-ott.mjs, and pushes it tomain. - The push triggers two workflows: Deploy publishes the list right away, and OTT posters looks up each title on TMDB, adds posters and links, commits, and deploys again.
A bad file can’t break the site: the Deploy workflow validates every week file before building, and a failed build leaves the previous version live.
What I’d add with a budget
- A small VPS for dynamic features, such as a searchable OTT archive.
- A newsletter so readers hear about new stories.