Hey IH 👋
I got tired of opening the news and feeling heavier by the minute so I built JoyPulse.
What it is
A simple daily reader of real positive stories, with Singapore first, then the rest of Asia, then the world. No accounts required. No tracking. Just the good stuff.
🔗 https://ohkariku-boop.github.io/JoyPulse/
Why I built it
Most “good news” sites are either US-centric, fluffy, or buried under ads. I wanted something I could open with coffee in Asia short, calm, and actually uplifting.
How it works
Pulls from real RSS feeds (CNA, regional outlets, BBC/Guardian/NYT sections, dedicated positive-news sites, etc.)
Keyword filters strip out crime, disaster, markets noise, pure scoreboard sports, etc.
An optional AI pass scores genuine uplift (when it runs)
Stories open as a preview; full article stays on the publisher’s site
What’s live today
Today’s lead + Today’s 3 (morning brief)
Category + region filters + search
Bookmarks & reactions (local only)
Newsletter signup
Support via Ko-fi
Policies / Terms / Contact
Stack (boring on purpose)
Next.js static export → GitHub Pages
GitHub Actions scrape → feed.json
Formspree for email · Ko-fi for support
$0 hosting
Honest status
This is a public beta / v1. Filtering isn’t perfect yet (mainstream feeds still let some borderline items through; AI doesn’t score every story). Images can be uneven. I’m shipping anyway to learn if people actually want this habit.
What I’m looking for from IH
Would you open this in the morning?
Any story that felt not uplifting?
Singapore / Asia balance — too thin on SG?
Newsletter: daily Today’s 3 vs few times a week?
If this resonates, try it, break it, and tell me what to fix next.
Thanks ☀️
The calm-with-coffee framing is right, and the keyword filter is exactly where I'd watch closely. Blocklists on RSS tend to be brittle in one specific way: the most genuinely uplifting stories often contain the very words you're stripping, "cancer survivor", "rebuilt after the flood", "lost everything, then", so a naive filter quietly kills your best material while neutral fluff sails through untouched. The signal you actually want isn't the absence of dark words, it's the arc: did the story end better than it started. Have you looked at how many good stories your keyword pass is dropping as false negatives, or is it only tuned on what slips through the wrong way?
You’re right and this is the part I’ve been least rigorous about. Right now the keyword layer is mostly a blocklist + positive score, then a smaller set goes to an LLM for a real “is this genuinely uplifting?” pass. I have not systematically measured false negatives (good recovery arcs that die on words like “cancer survivor” or “after the flood”). I’ve mostly tuned on what still slips through looking wrong on the homepage. The signal I actually want is closer to what you said: did the story end better than it started, not “contains zero hard words.” The LLM is meant to capture that, but it only sees stories that already survived the keyword gate so the blocklist can quietly kill the best material before the model ever runs.
Next improvement on my list: soften or exception the hard negatives for clear recovery/uplift frames, and/or let more borderline items reach the LLM instead of dying on a single token. If you’ve seen a clean pattern for that without letting pure tragedy back in, I’m all ears.