Skip to content
The index
App Store/ 2026

Ripple

A news app that answers the question most coverage leaves open: how does this affect me?

Ripple showing a personalized analysis of a news story
A completed Ripple analysis
Role
Solo product lead and builder
Scope
Product strategy, UX, AI pipeline, subscriptions, release, and iteration
Stack
SwiftUI, Supabase, n8n, OpenAI API, RevenueCat
Outcome
Shipped to the App Store after seven months

The problem

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.

About

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.

Designed for iOS

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.

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.

Siri and Shortcuts

App Intents can open Ripple, saved stories, a news category, or search without making someone navigate through the app first.

Native sharing

The system share sheet handles story links and shareable cards generated from a completed Ripple analysis.

Subscriptions

RevenueCat manages monthly and annual plans, purchase state, account identity, and restored purchases.

Streaming interface

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

VoiceOver and Reduce Motion

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.

The core idea

The Ripple Effect

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.”
Josh Holtz RevenueCat

From story to personal impact

01 / Start with a short synopsis, then open the source or ask how the story affects you.
02 / The response appears as it is generated, so reading can begin within a few seconds.
03 / The completed analysis connects the story to the profile and explains the bottom line.

Screens

Onboarding
Daily briefing
See the Ripple
Subscription

How it works

01

Build your profile

Share the context Ripple uses for personalization, including your location, work, and household.

02

Scan the news

Read a short synopsis, save the story, or open the original reporting for more detail.

03

See the Ripple

Ask how the story could affect your life and begin reading the analysis as it is generated.

How it's built

Shared briefing pipeline

Runs every three to four hours

  1. 01

    11 news sources

    Selected outlets supply the shared story pool.

  2. 02

    n8n ingestion

    Fetches stories, checks for duplicate coverage, and synthesizes coverage across sources while reducing overt editorial framing.

  3. 03

    Supabase story store

    Stores the normalized stories and short briefings.

  4. 04

    SwiftUI feed

    Loads the shared briefing into the native iOS app.

On-demand personal analysis

Runs when someone taps See the Ripple

  1. 01

    Story + reader profile

    Combines the selected story with the context given during onboarding.

  2. 02

    Supabase Edge Function

    Builds the request, checks for a cached result, and calls the model when needed.

  3. 03

    OpenAI API

    Generates the personal impact analysis in structured sections.

  4. 04

    SSE stream + cache

    Streams text into the app as it arrives and stores the completed result for repeat requests.

Key decisions

01

Synthesize coverage instead of trusting one source

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.

02

Let people try the product before paying

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.

03

Cut the animation after building it

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.

04

Design around the wait instead of hiding 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.

05

Match the refresh rate to the job users hired Ripple to do

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.

06

Do not pay twice for the same answer

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.

After launch

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.

What went wrong

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.

Results

Limited marketing
The sample is still too small to validate conversion, retention, or pricing.
13–14s → 2–3s
The time before readers see the first personalized text after the response was changed to stream.
48 → 6–8 runs/day
The news pipeline now runs every three or four hours, with no user complaints about freshness.
7 months
from the original local-web concept to the native iOS release.

With more resources

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.

Get it

Ripple is free to download on the App Store. Briefings are a subscription: $9.99 a month or $79.99 a year.

Privacy PolicyTerms of Service