DEV Community

Cover image for Ripple: One Blog Post, Every Social Platform, Written by Gemma in Your Browser
Tanya Mott
Tanya Mott

Posted on

Ripple: One Blog Post, Every Social Platform, Written by Gemma in Your Browser

Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle Submission 💸

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle

What I Built

This week I hit two years sober and relaunched my Substack. I wrote the post I'd been waiting two years to write, hit publish, and then realized I wasn't done. I still had to rewrite it as a Substack Note, an Instagram caption, a LinkedIn post and a short post. Each app wants a different length, a different tone, and a different place for the link.

So I built Ripple. You paste a blog post or newsletter, pick your tone, and get four ready-to-post drafts:

  • 📝 Substack Note: 2–4 sentences that make people open the post
  • 📸 Instagram caption: a scroll-stopping first line, emojis, "Link in bio," your sign-off and hashtags
  • 💼 LinkedIn post: a hook, short lines, a question at the end, and the link ready to paste as the first comment
  • 💬 X / Threads / Bluesky: one punchy line that fits in 280 characters, link included

The writing is done by Gemma, running entirely in your browser. Your unpublished post never leaves your device.

Who would pay for it: indie writers, newsletter creators and small business bloggers. Basically anyone who publishes and then dreads the "now share it everywhere" part. There's no server and no API bill, so it can stay cheap: a small monthly subscription, a few dollars, instead of the pricey social media tools.

Demo

Live app: https://ripple-nxxz.onrender.com/
(Chrome or Edge on a laptop works best. Click "Try a sample" if you don't have a post handy.)

Ripple with a post pasted in and all four drafts written

Ripple with a close-up of the ⚠️

Code

GitHub logo tmott13 / ripple

One post, every platform. Turns a blog post into a Substack Note, Instagram caption, LinkedIn post and short post, with Gemma running privately in your browser.

✨ Ripple

One post. Every platform. Written privately in your browser.

Paste a blog post or newsletter and get a Substack Note, an Instagram caption, a LinkedIn post and a short post for X, Threads or Bluesky. The drafts are written by Gemma running in your browser with WebLLM, so your unpublished writing never leaves your device.

Built for the DEV Hacktoberfest Open-Source AI Challenge, Week 2: Side Hustle.

Who it's for

Indie writers, newsletter creators and small business bloggers who publish a post and then spend another hour rewriting it for every app.

How it works

  • Gemma does the writing. Each platform gets its own short, focused prompt, because small models do best with one clear job.
  • The app owns the facts. Gemma never writes links, hashtags or sign-offs. The app adds the link where each platform wants it ("Link in bio" on Instagram, a ready-to-copy first comment…

How I Built It

  • Open model: Gemma 2 2B (gemma-2-2b-it-q4f16_1-MLC) on laptops, with Gemma 3 1B as the lighter option and the only one that fits on an iPhone.
  • Runs in the browser: WebLLM runs Gemma on the device's GPU with WebGPU. The model downloads once and is cached, so after that it even works offline.
  • Frontend: Angular 22 with signals. Drafts stream in word by word, and everything you type is saved in your browser only.
  • Hosting: a free static site on Render. There's no backend at all.

The most important design decision came from my last project. In Off-Grid Trails, I learned that a small model is great with words and shaky with facts. So in Ripple, Gemma writes the words and the app owns the facts:

  1. Links: Gemma is told not to write links, and the app strips any it sneaks in. Then the app puts your link exactly where each platform wants it.
  2. Hashtags: Gemma suggests topics, and the app turns them into clean hashtags and caps them per platform.
  3. Limits: the app enforces each platform's character limit and cuts at a full sentence, never mid-word. On X, it saves 23 characters for your link.
  4. Made-up numbers: if a draft includes a number that isn't anywhere in your post, the app flags it with a ⚠️ so you can check it before posting. Small models love to invent stats.
  5. Cleanup: "Sure! Here's your caption:" preambles, quote marks and repeated sentences get stripped automatically.

Each platform also gets its own short prompt instead of one giant one. A 2B model does much better with one clear job at a time.

I was surprised by how well Gemma generated the text for the post using the correct tone for each.

I built this with Claude as my pair programmer. I picked the problem from my own week, made the product calls, and tested it on my own posts.

Why Open Innovation Matters

  • Your drafts stay private. Unpublished writing is personal. Mine was about my sobriety. With an open model running locally, nothing is uploaded to anyone's server.
  • It costs nothing to run. There's no per-request API bill, so a side hustle like this can stay cheap for creators.
  • It works offline. Once Gemma is downloaded, you can write your captions on a plane.
  • I control the whole pipeline. I can shrink the model's memory, rewrite the prompts, and add my own safety checks around it. A closed API would be a black box in the middle.

My First User

I was my first user for Ripple. I took my most recent post on my Substack and pasted it in along with the title and URL to the post. I chose "warm" for the tone and my name as the sign-off. I kept all four platforms selected.

Gemma was able to generate four wonderful captions with the correct tone for each platform along with helpful hashtags. I even like the emojis it included in each response.

Ripple showing my responses for Substack and Instagram

Ripple showing my responses for LinkedIn and X/Threads

I like that I can regenerate the text if I don't particularly like or agree with the response.

I don't think I would change anything currently. It works as expected and does an excellent job. I'm so glad I had this idea and to be able to bring it to life! This is definitely a tool I can see myself using and expanding on in the future for my own blogging.

I would pay a small subscription fee per month to use it. I think it is worth it, especially if you write often.

One thing I would add for the future of the app is the ability for Ripple to scrape the article text from the URL so you don't have to paste in the entire article. I probably would also add more social platforms like Facebook, Medium, and Wordpress.

Prize Categories

  • Gemma: Gemma 2 2B and Gemma 3 1B run fully in the browser with WebLLM, and the app is built around keeping their output trustworthy.
  • Render: the app is deployed as a free Render static site from a render.yaml blueprint.

Thanks to DEV, the Hacktoberfest team, and the MLC/WebLLM and Gemma teams for making on-device AI this easy to try. ✨

Top comments (0)