Overview
NovaEdge News pulls from RSS sources, runs each item through OpenRouter to produce clean Hindi copy, and publishes on a schedule. Once it is deployed nobody has to operate it.
The engineering is almost entirely failure handling. Feeds go down, return malformed XML, or repeat items they already sent. Model calls time out or come back unusable. A pipeline written for the happy path stops publishing in week one.
- Role
- Sole engineer and designer: ingestion pipeline, model layer, front end.
- Year
- 2026
- Stack
- Next.jsTypeScriptOpenRouter APICronMongoDB
Engineering
The decisions that mattered.
- 01
Deduplication before generation
Items are fingerprinted on normalised title and source URL before any model call. Regenerating an article you already published is a correctness bug and an invoice at the same time.
- 02
Every external call fails safely
Dead feeds, malformed XML and model timeouts are caught per item. One bad source degrades that source, and the run still finishes.
- 03
Cron is the only trigger
Publishing needs no admin action. Scheduled runs are idempotent, so a retry after partial failure picks up where it stopped instead of duplicating.
Design decisions
Why it looks and behaves the way it does.
I designed this as well as built it. These are the interface calls I made and the reasoning behind each one.
Devanagari needs its own type scale
Hindi set at a Latin-tuned size and line-height reads cramped, because the script has taller ascenders and matras sitting above the baseline. Size and line-height were retuned for Devanagari rather than inherited from the body scale.
Reading width capped hard
Measure holds near 65 characters whatever the viewport does. Full-width news text on a desktop monitor is unreadable however good the typeface is.
Timestamps carry visible weight
In news, freshness is the main quality signal a reader has. Publish time sits directly under the headline instead of tucked into a byline.
Outcomes
What shipped.
- Publishes on schedule with nobody intervening
- Duplicate articles caught before they cost model spend
- A failing feed degrades one source and never the whole run