Widgets and Live Activities
WidgetKit brings current stories to Home Screen and Lock Screen widgets. ActivityKit can surface new story drops on the Lock Screen and expanded Dynamic Island, then open the story in Ripple.
People who do not follow the news often ask the same question: why should I care? Most coverage explains who, what, where, when, and why. It rarely explains how an event might affect the person reading about it.
I built Ripple for busy, phone-first readers who want to stay informed but do not have time to work through a full article. Each story starts with a short synopsis. The reader can open the source for more detail or ask Ripple to connect the story to their own location, work, and household.
I downloaded and tested more than ten news apps before building Ripple. Their presentation differed, but most stopped after helping readers discover what happened. I wanted to explore the next step: what does this story mean for me?
The first version was not a news app. It was a local website where people could see what was happening nearby. As I worked through the idea, I saw the operational burden behind it: business submissions, community posts, moderation, and eventually a message board I would have to referee. I narrowed the concept, moved from the web to React Native, and then focused on a native iOS app. Each change brought the product closer to the problem I actually wanted to solve.
I built and shipped Ripple solo using SwiftUI, n8n, Supabase, and OpenAI's API. The work included the news pipeline, onboarding, subscription flow, and the streaming personalized response.
Once I narrowed Ripple to iOS, I stopped treating the phone as just another place to display the product. I built it in SwiftUI and used Apple frameworks when they made the news easier to reach or the app easier to use.
WidgetKit brings current stories to Home Screen and Lock Screen widgets. ActivityKit can surface new story drops on the Lock Screen and expanded Dynamic Island, then open the story in Ripple.
App Intents can open Ripple, saved stories, a news category, or search without making someone navigate through the app first.
The system share sheet handles story links and shareable cards generated from a completed Ripple analysis.
RevenueCat manages monthly and annual plans, purchase state, account identity, and restored purchases.
The SwiftUI interface reads a server-sent event stream from the Edge Function and reveals the analysis as it arrives instead of waiting for the full response.
In progress / not yet released
The current accessibility pass adds non-gesture navigation, clearer spoken story cards, accessible actions, larger tap targets, and quieter motion. It still needs hands-on VoiceOver testing.
During onboarding, Ripple asks for context such as the reader's location, work, and household. That profile becomes the basis for the personalized analysis.
Tapping “See the Ripple” sends the story and profile context to a Supabase Edge Function. The response explains the possible effects in sections and streams into the app as it is generated. It is a personal impact analysis, not another summary.
Onboarding includes a guided example, followed by three free analyses on stories the reader chooses. One example did not feel like enough for someone to understand an unfamiliar feature, but unlimited free use would create ongoing API costs. I have not yet tested whether three is the right number.
“This app is so legit. I want to consume all my content in this form. ‘See the Ripple’ is so fresh, and an amazing use of my info and location.”
Share the context Ripple uses for personalization, including your location, work, and household.
Read a short synopsis, save the story, or open the original reporting for more detail.
Ask how the story could affect your life and begin reading the analysis as it is generated.
Runs every three to four hours
01
Selected outlets supply the shared story pool.
02
Fetches stories, checks for duplicate coverage, and synthesizes coverage across sources while reducing overt editorial framing.
03
Stores the normalized stories and short briefings.
04
Loads the shared briefing into the native iOS app.
Runs when someone taps See the Ripple
01
Combines the selected story with the context given during onboarding.
02
Builds the request, checks for a cached result, and calls the model when needed.
03
Generates the personal impact analysis in structured sections.
04
Streams text into the app as it arrives and stores the completed result for repeat requests.
I chose 11 sources that are generally regarded as relatively neutral. The n8n workflow synthesizes coverage across sources and reduces overt editorial framing before creating the synopsis, then checks for different publishers covering the same event. An occasional duplicate still gets through, and I do not claim the system eliminates bias completely.
People can use Ripple as a news reader for free. Onboarding shows one guided analysis, then each user can try three stories of their choice before the paywall. A subscription is $9.99 a month or $79.99 a year. I based the initial price on comparable news products and Ripple's API and infrastructure costs, but the volume is still too low to call the price validated.
I spent weeks building a water shader that spread from the See the Ripple button. Once it worked in the product, it was clear that the effect added spectacle to a news utility and delayed the information people wanted. The code still exists, but the shipped app does not use it.
The first version waited 13 to 14 seconds for the entire analysis before showing anything. I changed it to stream the response into the modal, which brings the first text on screen in about two or three seconds. I also worked through merged words, invented terms, hashtags, and inconsistent sections until the response became reliably readable.
The news workflow first ran every 30 minutes, then hourly. No one treated Ripple as a breaking-news product or complained about freshness, so I moved it to every three or four hours. The product still delivers current stories while running the most expensive workflow roughly six to eight times per day instead of 48.
When the same profile requests the same story again, Ripple returns the completed analysis instead of making another API call. A meaningful profile change creates a fresh result. That keeps repeat taps fast and avoids spending money without giving the reader anything new.
The clearest signal after people began using Ripple was what they did not ask for: breaking news. No one complained when stories were a few hours old, so I reduced the ingestion workflow from 48 runs a day to roughly six to eight. That lowered the most expensive part of the product without changing the experience people came for.
The current iteration is accessibility. Changes in development let VoiceOver users move forward and backward through the feed without dragging, expose card actions and the category picker through the rotor, read each story as one useful sentence, and respect larger text and Reduce Motion. The code has built successfully, but I have not yet tested it with VoiceOver or released it. I am treating that work as unfinished until I do.
Ripple took about seven months to reach the App Store. It began as a different product, changed platforms twice, and included time spent on features that did not survive. I shipped other apps during that period, but Ripple was still the longest and hardest product I had taken from an idea to release.
The larger unresolved problem is distribution. I have divided my time across several products and have not marketed Ripple consistently. The sample is still too small to explain the low paid conversion or separate a pricing problem from an onboarding, retention, or demand problem.
I would spend the next six weeks on distribution rather than new features. Ripple does not yet have enough usage to tell me why free readers are not subscribing. I would market it more consistently, bring in a larger group of the phone-first readers it was designed for, and measure where they stop between onboarding, their three free analyses, the paywall, and repeat use.
I would let that evidence decide the next move. The answer could be a change to onboarding, the trial allowance, pricing, or the product itself. It could also show that the idea is not wanted strongly enough to support a subscription. I built Ripple because I could not find anyone else approaching news this way, but being different does not guarantee that people need it.
Ripple is free to download on the App Store. Briefings are a subscription: $9.99 a month or $79.99 a year.