Inspiration
I save far more articles than I ever read. Read-later apps turn into guilt lists. I wanted the opposite: a place where a saved link becomes something you actually want to open, a two-minute story you can watch, read or listen to, without losing the original writing behind it.
What it does
- Save links from any app (share sheet and the web; a Chrome extension is coming next) into your Queue.
- Spark it. Sparkles reads the whole article and turns it into a short video story: a cover shot plus a few scenes, each carrying one clear idea, narrated with word-by-word Read Along.
- Pick a look from 16 visual styles (ink wash, vintage film, motion graphics, paper cut, whiteboard and more), or let Sparkles choose one that fits the content.
- Ask about any card and follow the answer back to the exact passage in the source.
- Watch Mode (Sparkles Plus) plays the story full screen in portrait with subtitles inside the frame.
- Explore public Sparks, people and 30 topic Constellations; like, respark and comment.
- Keep it fresh: when the generation pipeline improves, creators get an email and can regenerate their older Sparks from the original link for free.
How we built it
- App: React Native (Expo SDK 57, New Architecture, expo-router) on iOS and Android, plus a React/Vite PWA at trysparkles.app sharing the same domain packages.
- Backend: Firebase (Auth, Firestore, Cloud Functions v2, Cloud Tasks, App Check with App Attest / Play Integrity), with a durable, resumable generation pipeline.
- AI: Gemini on Vertex AI writes and grounds the story; a planner (v1.9) directs a cover shot and 2–4 scenes; Gemini Omni shoots each clip; Gemini TTS narrates; forced alignment drives Read Along. A style pass reads the article (text and images) to suggest a style, with a variety guard so a creator's feed doesn't all look the same.
- Spend safety: every paid step is metered against per-Spark, per-creator and global daily caps, with "never resubmit if acceptance is uncertain" semantics so a flaky provider can't double-bill.
- Monetisation: RevenueCat across both stores (details below).
- Ops: an internal Labs app shows live generation health, cost and failures in plain English; an Admin app handles moderation and lifecycle email.
Monetisation (RevenueCat)
- Free: 3 starter Sparks, reading, Read Along, Ask and Explore.
- Sparkles Plus: $8.99/month or $59.99/year (Founding Annual). 30 Sparks every month, Watch Mode, and voice and style choices.
- Spark packs: 10 Sparks for $5.99, 30 Sparks for $12.99 (consumables).
- RevenueCat powers the paywall offerings, entitlement checks on both platforms, and server-side webhooks that grant credits only after verified delivery. One RevenueCat project serves the App Store and Google Play apps.
Challenges we ran into
- Video that tells the truth. Generated clips love to invent details. We added a grounding review on the plan, made frame review advisory (it blocked too many good shots), and kept narration as the source of truth for what a scene claims.
- Narration alignment. Read Along has to land word by word on a narrated clip. Early alignment gates failed whole Sparks over one misheard word; we moved to a tolerant reader that degrades to estimated cues instead.
- Provider quotas. Our first route to the video model capped us at 20 requests a day. In the final week we moved Omni to Vertex AI, which removed the daily cap, and made the provider a live setting frozen per run.
- Cost. Each video Spark costs real money; per-Spark ceilings and a spend ledger keep a viral day from becoming a bill.
Accomplishments that we're proud of
- A full pipeline from a pasted link to a narrated, styled video story in a few minutes.
- 30 public video Sparks so far, including older Sparks that creators rebuilt with Spark Updates in better-fitting styles.
- Same product on iOS, Android and the web.
What we learned
Shipping AI video is mostly about the boring parts: idempotent retries, honest failure reasons, spend ceilings and quality gates. The model is the easy bit.
What's next for Sparkles
Background playback and offline Sparks, YouTube and podcast sources, Constellation digests by email, and creator analytics.
Store status
Sparkles 1.0 was submitted to the App Store and Google Play on 25 September 2026 and is still in review on both stores. It is live on the web at https://trysparkles.app in the meantime.
Built With
- app-check
- cloud-functions
- expo.io
- ffmpeg
- firebase
- firestore
- gemini
- gemini-omni
- google-cloud
- pwa
- react
- react-native
- revenuecat
- text-to-speech
- typescript
- vertex-ai
- vite

Log in or sign up for Devpost to join the conversation.