DEV Community

Vivek Vishnoi
Vivek Vishnoi

Posted on Edited on

VoiceClone Writer: Posts that sound like you, not like ChatGPT

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

Everyone can spot a ChatGPT post now. It opens with "In today's fast-paced world", has three emoji bullet points and a rule of three, and ends with "What do you think?". Creators know it too. So they either spend 20 minutes rewriting every AI draft, or they post it anyway and watch engagement drop.

VoiceClone Writer fixes the actual problem. The problem isn't that the text is AI-written. It's that it doesn't sound like you.

  1. Teach it your voice. Paste 20 to 50 of your old posts. It builds a fingerprint of how you write: how long your sentences are, how much that length varies, the small words you lean on, whether you capitalise, how often you use emoji, dashes or line breaks, and the phrases you keep coming back to.
  2. Write. Give it a topic and a format (X post, thread, LinkedIn, caption, newsletter). Open-source Gemma writes four drafts.
  3. Proof, not vibes. Every draft gets a Voice Match score (0 to 100) and an AI Slop score, with the AI giveaways highlighted. The best match is on top.
  4. Fix anything. Paste a ChatGPT draft and hit "Rewrite in my voice".

Who pays: creators and founders who post every day, and ghostwriters and small agencies juggling five client voices. A plan at $15/month per creator or $49/month per agency seat pays for itself the first time a post doesn't sound like a robot.

Demo

πŸ”— Live: https://voiceclone-writer.onrender.com/#app (click "Try a demo voice" if you don't have posts handy)(Be patient render sleeps when not used)

Try it in 30 seconds:

  1. Open the site and hit Try a demo voice. The fingerprint card fills in: posts learned, words per sentence, traits like "starts sentences in lowercase", and the phrases the creator keeps repeating.
  2. Switch to Write, pick X post, type "why I raised my prices" and hit Write in my voice. Four Gemma drafts come back, ranked, each with a Voice Match ring and a Slop ring. The best match is on top.
  3. Switch to Check, hit Use a ChatGPT sample and Score it. It scores 29 on Voice Match and 100 on slop, with every AI tell highlighted. Hit Rewrite in my voice and Gemma rewrites it in the creator's voice, scored again side by side.

The UI is a light, Apple-style studio (with a dark mode for night owls), built so the scores are the first thing you see.

Code

VoiceClone Writer

Posts that sound like you, not like ChatGPT.

Paste your old posts. VoiceClone learns your writing fingerprint, writes new drafts with open-source Gemma, and scores every draft on how much it sounds like you, highlighting the phrases that give AI away.

Built for the DEV Hacktoberfest 2026 Open-Source AI Challenge, Week 2 ("Side Hustle"), started Oct 17, 2026.

How it works

  1. Voice fingerprint (stylometry). ~70 features per post: function-word frequencies (the classic authorship-attribution signal), sentence length mean and variance ("burstiness"), word length, vocabulary richness, line breaks, punctuation, emoji, casing, contractions, plus a character 3-gram TF-IDF centroid. The profile stores the mean and spread across your posts.
  2. Voice Match score (0-100). Distance of a text from your profile, calibrated with leave-one-out: each of your own posts is scored against a profile built from your other posts, so 85+ means "reads like an unseen post of yours".
  3. Retrieval. Your…

How I Built It

Stack: Python, FastAPI and a plain HTML/JS frontend, deployed as one Render web service. Gemma 4 (gemma-4-31b-it) runs through the Gemini API, and the same code runs Gemma locally through Ollama. The fine-tune runs on Tinker.

1. A voice fingerprint, with stylometry

Authorship attribution is an old problem. In 1963 Mosteller and Wallace worked out who wrote the disputed Federalist Papers by counting words like "upon" and "whilst". Topic words change from post to post. Function words (the, just, so, i, really) and rhythm don't, so they make a fingerprint.

For every post I compute about 70 features:

  • frequencies of 50 function words
  • sentence length mean and standard deviation (the "burstiness" that separates people from models, which tend to write evenly sized sentences)
  • word length, vocabulary richness, line breaks, ! ? , … β€”, emoji, hashtags, casing, contractions, first and second person
  • a character 3-gram TF-IDF centroid, which catches spelling habits and pet phrases

The profile stores the mean and spread of each feature across your posts.

2. A score that's calibrated to you

Raw distance numbers mean nothing to a user, so the score is calibrated with leave-one-out. Each of your posts is scored against a profile built from your other posts. That tells the model how far "an unseen post by you" usually sits from your profile. A new text is then scored by how far it falls outside that range. 85+ means it reads like a post you wrote but haven't published yet.

On the demo voice, held-out real posts scored 72 to 94, posts by a different creator scored 0 to 7, and a typical ChatGPT post scored 29 (with 100 on slop).

3. Retrieval, generation and best-of-N reranking

The posts of yours closest to the new topic go into the prompt as examples, alongside your measured traits in plain words ("sentences average 6 words", "never uses emoji", "starts sentences in lowercase") and a banned-phrase list. Gemma writes four drafts at different temperatures, and they're reranked by Voice Match minus a slop penalty. Sampling several drafts and keeping the best one by a measured score is cheap, and it works much better than asking the model to just try harder.

4. The slop linter

About 30 rules for patterns readers now associate with AI: delve, tapestry, testament to, "in today's fast-paced world", "it's not X, it's Y", emoji bullet lists, em-dash overuse, "let that sink in", generic CTAs. Each hit is weighted, highlighted and explained.

Results

Same Gemma model and the same 8 topics. One version gets a plain prompt, the other the full VoiceClone pipeline:

Voice Match ↑ Slop ↓
Creator's real held-out posts 85.2 0
Plain prompt, Gemma 4 31B 33.2 4
VoiceClone, Gemma 4 31B 91.0 0

Same model, same topics, and it goes from 33 to 91. VoiceClone's drafts score slightly above the creator's own unseen posts, because the reranker picks the most "on-voice" of four drafts. Voice Match is the app's own stylometric metric, not a panel of human judges, so here's what the difference looks like:

Topic: taking a weekend off from my startup

Plain Gemma (voice 61): "Closing the laptop for the weekend. πŸ’» The startup will still be here on Monday, but my sanity might not be if I don't unplug. Time to recharge. πŸ”‹πŸ’€"

VoiceClone (voice 92): "took the whole weekend off. didn't check a single metric. was i anxious? yes. did it break? no. turns out the startup doesn't need me every second."

Topic: why I stopped offering a free plan

Plain Gemma (voice 25): "I stopped offering a free plan. Why? Because "free" often attracts noise, not users. By focusing exclusively on paying customers, I can provide 10x more value… Sustainability > Vanity metrics. πŸ“ˆ"

VoiceClone (voice 87): "stopped the free plan today. turns out it just attracted noise. paying users actually use the product. better to have fewer users."

Reproduce it with python -m eval.benchmark.

A personal fine-tune with Tinker

Prompting gets you most of the way. A model trained on your posts gets you further. finetune/tinker_sft.py builds topic β†’ post pairs from a creator's posts, trains a LoRA adapter on Tinker, and scores the base model and the tuned model on held-out topics with the same Voice Match metric.

Gemma isn't in Tinker's model list, so for this experiment I used Qwen3-8B: a LoRA adapter (rank 16), 4 epochs on about 20 of the creator's posts. Training loss went 3.17 β†’ 1.68 β†’ 0.96 β†’ 0.34.

Voice Match ↑ Slop ↓
Creator's real held-out posts 83.4 0
Qwen3-8B base 58.0 15.6
Qwen3-8B + LoRA 91.6 0

Base: "I don't know what you're talking about. It's not about money. It's about time. Time is more valuable than any amount of money…"

Tuned: "someone asked if quitting my job to pay for my side hustle was the worst idea they've ever heard. i'm here on $4k a month from it. not the worst idea."

The honest caveat: with only 20 posts the adapter starts memorising (look at that final loss), and it happily invents facts like "$4k a month". So the product ships the prompt-and-rerank pipeline on Gemma, and per-creator fine-tunes are the paid tier once someone has a few hundred posts. The point stands, though: a small LoRA on an open model takes a generic 8B model from 58 to 92 on your voice, and you can't do that with a closed chat API.

Why Does Open Innovation Matter?

  • Your voice is your asset. Closed APIs give everyone the same house style, which is exactly the "ChatGPT voice" people have learned to scroll past. Open weights let me fine-tune a model per person, which no closed chat product offers.
  • Privacy. Your drafts and unpublished thoughts don't have to leave your laptop. The same app runs fully local with Gemma on Ollama (LLM_PROVIDER=ollama), and the hosted version keeps your posts in your browser, not in my database.
  • Cost. Four drafts per request is only affordable as a side-hustle business on efficient open models.
  • No lock-in. Gemma through the Gemini API today, Ollama tomorrow, a self-hosted GPU next month. It's one environment variable.

My Agent Session

I built VoiceClone in a weekend pairing with an AI coding agent inside a shared project. It researched the challenge, drafted the plan, wrote the stylometry engine, slop linter and FastAPI app, ran the benchmark against real Gemma calls, fixed the Tinker script against the current SDK, and redesigned the frontend, while running git, tests and the server on my own Mac. My job was the product calls: what to build, who pays, which domain, and what to cut.

My First User

  1. Me myself is the first user because, being a developer, it is the most usable format for anyone to just get your voice trained on an LLM and then use it for your personal branding on social media.
  2. Each and every developer and professional person who wants to make their personal brand on social media is a user.

"[ look so dumb, but I'm going to use it, bro, for my social media post.]"

They said they'd pay 1000Rs for it, mostly so they can be consistent on social media without AI slop.

Prize Categories

  • Gemma: Gemma 4 writes every draft. It also runs locally via Ollama.
  • Render: The app is deployed as a Render web service from render.yaml.
  • Tinker: a LoRA personal-voice fine-tune with a measured before/after against the base model.
  • .tech Domain: live at https://voiceclone-writer.onrender.com/#app.

-Vivek

Top comments (0)