The news cycle is a slot machine. You pull the lever, something flashes, you pull it again. ViralVault is the opposite: a tight, edited signal with zero hype, built for the people actually shipping the future.
ViralVault
is a free AI and tech briefing for developers that publishes twice a day, morning and evening, as a cinematic scroll on the web and a matching YouTube video.
One person runs it. Mostly, a pipeline runs it, and I run the pipeline. Here is how it works, and the one problem that turned out to matter more than all the automation.
Why hand-roll the small thing instead of installing the SDK?
ViralVault hand-rolls its small integrations because every SDK it skips is one less key, one less dependency, and one less upgrade to babysit. The site is Next.js 16, React 19, Tailwind v4, with Motion and Lenis doing the smooth cinematic scroll, deployed on Vercel.
Nothing about it is heavy, and that is on purpose.
| What it does | How it is wired | What that skips |
|---|---|---|
| Tweet embeds | react-tweet, rendered statically at build time | An X API key, and every client-side fetch |
| Stripe webhook | Signature verified by hand with node:crypto | The Stripe SDK, pulled in for exactly one endpoint |
| Freemium database | Supabase talked to over plain fetch | The Supabase client library |
None of this is heroic. It just keeps the thing small enough that one person can hold all of it in their head. It is the same instinct behind building AbleMakers on a deliberately boring, swappable stack: when you are the entire team, every dependency is one you debug alone.
An edition is a committed file, and that is the whole architecture
The most important decision in ViralVault is that an edition is a JSON file committed to git. The homepage always renders the latest one, every past edition is a permalink that lives in the archive forever, and the commit that adds the file is the deploy that ships it.
That single choice cascades into everything else. The site is fully static and cacheable. The archive is permanent and version-controlled.
The "cron" that publishes twice a day is not a serverless timer, it is a GitHub Action, because a Vercel Cron Job cannot write back to the repo. Using one would mean moving all the content into a database and giving up the git archive. So a scheduled Action generates the edition, commits it, and the commit is the deploy.
How does the twice-daily pipeline actually run?
The ViralVault pipeline runs in three phases — scrape, then rank and edit, then publish — and each phase has one thing it flatly refuses to do. It fires from a scheduled GitHub Action and ends by committing a file like content/editions/2026-07-01-pm.json.
| Phase | What happens | What it refuses to do |
|---|---|---|
| Scrape | About fourteen sources fire in parallel: Hacker News, Techmeme, TechCrunch and the rest of the tech press, a few subreddits, and Google News as the datacenter-friendly fallback for when Reddit blocks the server's IP. | Announce itself as a bot. It uses a browser-like user agent, because the bot-shaped ones get rejected. |
| Rank, then edit | Candidates are sorted by engagement, sliced to the top 70, trimmed lean, and handed to a language model with one job: be the executive editor. It picks the five stories that matter and writes each one up. | Let the model be the primary source. Its summaries get overwritten in the next step. |
| Publish | Validate the output, write the edition file, and commit it. | Ship a thin edition. If fewer than five real candidates survived, it bails. A quiet day is better than a padded one. |
The editor's instructions are the actual product thesis, in one line: bias toward actionable. The audience is software developers, so at least half the stories should be something a developer can use or has to react to. Excitement plus actionability beats raw size.
Every story ends with a "why you care" and a next step, because a headline you can't act on is just noise with better typography.
How do you keep an unattended AI newsroom from making things up?
ViralVault assumes its model will lie and builds around the assumption. The validator rejects any pull-quote that just parrots the headline and forbids inventing embed IDs, and after the five stories are picked the pipeline re-fetches each source URL and replaces the model's summary with the article's own paragraphs wherever it can reach them.
What you read on the page is the real publication's words, not a paraphrase of them. The model curates and frames. It does not get to be the primary source.
That is the same line I drew for Ember Coast, where the itinerary is assembled by deterministic code instead of written by a language model, and the same reason ResolveMesh refuses to invent a flattering score for a capability it has never observed. Fluent output is not evidence of anything.
There is also a fallback chain across several models with retries, because free-tier providers pin to overloaded routes and return truncated JSON under load. It is the scrappy cousin of the multi-provider routing that keeps Codelit's AI features up.
Production runs on Gemini through an OpenAI-compatible endpoint; my local runner prefers my Codex login and falls back to Gemini if it can't reach it. Running a real pipeline on free AI is mostly an exercise in expecting it to fail and not caring when it does.
How does the freemium gate work without an entitlement system?
ViralVault's gate is the Resend unsubscribed flag plus a small Supabase table that decides when to flip it. First five editions free, then five dollars a month, the price of one coffee. There is no entitlement service and no session state.
When you subscribe, your email goes into a Resend audience and a Supabase row that starts at zero editions received, and you get a one-time welcome email. There is a hidden honeypot field on the form so bots unsubscribe themselves silently.
After each broadcast, a Supabase function bumps every free reader's count and hands back anyone who just hit five. Those readers get flipped to unsubscribed in Resend, so future sends skip them. Pro readers are never counted.
The actual hard part was not the automation
The automation is the easy 80 percent of an automated content product. The hard 20 percent is not becoming slop, and slop is a policy problem well before it is a taste problem.
I wrote a long note to myself about this. YouTube spent early 2026 terminating and demonetizing faceless auto-news channels, and the policy language is precise. It targets content that is mass-produced, repetitive, or templated with no meaningful human input.
The fix is not technical. It is a genuine, recurring editorial point of view. Not headline read-outs, but an actual take on each story, the kind of thing a person who ships software would say out loud.
That "meaningful human input" is the whole difference between a briefing and slop, and it is the one part I refuse to fully automate. The AI does the grunt work: scraping, ranking, drafting, even generating the video and the kinetic captions from a per-word timing track. The point of view stays mine.
Where ViralVault is now
ViralVault has been publishing twice a day for weeks: web editions with permanent permalinks, per-edition social cards, an RSS feed, and a matching YouTube video rendered programmatically with Remotion into a long-form cut, two vertical shorts, and a thumbnail. Every upload goes out private-first so I can eyeball it before it goes public.
It started, embarrassingly, as a page I would literally screen-record by opening a hidden URL that auto-scrolled the edition at a cinematic pace. That still works. It just grew a real render pipeline around it.
One instruction, if you are attempting the same thing: automate the fetching, the ranking, the drafting and the rendering, and never automate the opinion. It is the only part a reader subscribes for, and the only part a policy reviewer can tell apart from every other auto-news channel.
If you ship software and you are tired of pulling the slot-machine lever, get briefed. Twice a day, signal only, and a human still decides what matters.
Questions people actually ask
- How does ViralVault publish twice a day without a CMS?
- Every ViralVault edition is a JSON file committed to the repository. A scheduled GitHub Action scrapes the sources, has a language model select and write the stories, validates the output, and commits the file. The commit triggers the deploy, so publishing and shipping are the same event. The homepage renders the newest file and every older edition stays reachable at a permanent link.
- Why use a GitHub Action instead of a Vercel Cron Job for scheduled publishing?
- A Vercel Cron Job can run code on a schedule but it cannot write back to the repository. Using one would mean moving all the content into a database and giving up the version-controlled archive. A scheduled GitHub Action can commit, so it generates the edition, commits the file, and lets that commit be the deploy. The archive stays in git and the site stays fully static.
- How do you stop an automated news pipeline from hallucinating?
- Assume the model will make things up, then check its work. A validator rejects pull-quotes that only repeat the headline and forbids invented embed identifiers. More importantly, once the model has picked its stories the pipeline re-fetches each source URL and replaces the model's summary with the publication's own paragraphs wherever it can reach them. The model curates and frames. It never becomes the primary source.
- Does YouTube demonetize automated news channels?
- YouTube spent early 2026 terminating and demonetizing faceless auto-news channels, and the policy language targets content that is mass-produced, repetitive, or templated with no meaningful human input. An automated briefing that emits the same layout and the same robotic voiceover over a swapped story list every twelve hours matches that description exactly. What keeps a channel on the right side of the line is a real editorial point of view, not a better renderer.
- How much does ViralVault cost?
- The first five editions are free. After that it is five dollars a month, the price of one coffee. The metering is deliberately dumb: a small table counts how many editions each free reader has received, and once a reader hits five they are flipped to unsubscribed in the email provider, so future sends skip them. Paying readers are never counted at all.