There are thousands of PDF mergers on the internet. There are also thousands of image croppers, all free, and Google has already decided which ten you get to see. So I did not build one of those.
I went looking for a gap instead. Everything is saturated now, so what I found was less a gap and more a thin spot: an AI text detector. Yes, the brilliant idea was an AI detector. In 2026. I'm aware. It looked thin enough to me, and I had one condition on top of that: no prebuilt API. Wrapping someone else's endpoint and calling it a product is a valid business, but you learn nothing from it, and I like suffering a little when I build things.
The accuracy numbers at the end are not flattering. I'll show them anyway, because hiding them is how you end up with 99% on your homepage.
A jury of 20,000 words
I researched how AI text gets detected and picked TF-IDF plus logistic regression. The name sounds like it needs a PhD and a grant. It doesn't.
The detector reads a pile of texts labeled human or AI and learns which words, and which pairs of neighbouring words, show up more in each pile. When you paste something in, it counts those words and pairs and weighs each one by how often it shows up in your text against how common it was in the training data. That's the TF-IDF part. Now picture a jury where every word and word pair gets a vote. Some jurors lean AI, some lean human, and a few are louder than the rest because the model learned heavier weights for them. Logistic regression adds up the votes and squashes the total into a 0 to 100 signal score. The current model has 20,000 jurors. None of them are on payroll, which helps.
A score of 80 does not mean 80% of the text was written by AI. It means the text resembles the AI-labeled examples more than the human ones. That's why I call it a signal and not a verdict. A verdict needs a judge, and a judge needs a license.
My first version was simpler. It measured sentence-length consistency, repeated openings, repeated phrases, formulaic wording, vocabulary variety and transitions, which were my theories about how AI writes. A theory is just a guess in a lab coat, so I trained a model on labeled writing from the published RAID research dataset instead. The six measurements still feed the analytics and highlights, but they no longer touch the score. They got demoted, politely.
Training happens in Python. The trained model runs in JavaScript in the browser, so scoring needs no third-party API. Which was the entire point of doing it the hard way.
The accuracy table nobody puts on their homepage
I removed duplicate texts and kept examples from the same source together when I split the data, because otherwise near-copies leak between training and testing and the model gets to peek at the answers. That left 12,477 texts to learn the word and phrase weights, 2,541 to choose settings and score thresholds, and 2,643 held aside to test the finished model.
At the current high-score threshold, on those held-aside texts, it flagged 923 of 1,320 AI examples and wrongly flagged 30 of 1,323 human ones. So it catches about 70% of AI texts and accuses about 2% of humans. Put the other way round, roughly 3 in 10 AI texts walk straight through. That's what a high threshold buys you: fewer innocent people in handcuffs, more guilty ones waved through.
Those numbers describe one test set, not all the writing in the world, and I haven't established that it beats ZeroGPT. If a detector tells you it's 99% accurate, the only useful question is: on which texts?
Watermarks, or how to remove something nobody documented
Removing AI watermarks sounded like a quick second feature. It wasn't, because no AI company has published the exact watermarking algorithm it uses. There is nothing to reverse engineer, and you can't exactly email them. What I could do was study how watermarks are usually added and find the most common methods.
That split the problem in two. One kind of watermark hides in characters you can't see. The other hides in word choices, which makes it statistical and baked in while the text is being generated. I built for the first kind because I can inspect it directly, and I won't pretend to catch the second.
Every character has a number. The scanner reads those numbers, including the ones that never show on screen: zero-width formatting characters, unusual spaces, invisible tag characters, direction controls and emoji joiners. For each finding it records the character's name, position, line and column. The pattern display splits the text into 64 sections, counts findings in each, and measures the distances between them. Basically, a very small and very petty detective.
Cleanup follows explicit rules. Take hello[U+200B]world. U+200B is a zero-width space, so the cleaner swaps it for a normal space and you get "hello world", not "helloworld". Other selected invisible characters get deleted, unusual spaces become ordinary spaces or line breaks, and an optional NFC normalization standardizes equivalent character representations.
There's also a small hidden-message decoder. It checks whether uninterrupted runs of two invisible characters could stand for binary 0 and 1, then tries to decode the bytes as text. If that works, you may have found a hidden payload. You have not found proof that an AI wrote the text. Invisible characters don't come with a signature.
I tested all of this on constructed examples, multilingual text and emoji, because a cleaner that eats the wrong invisible character can break a language or split a family emoji into strangers. That's why language-sensitive categories need explicit selection, and why even the default cleanup needs a look before you copy the result.
The limit: this does not verify or remove Google SynthID, and it can't tell you which AI provider wrote something. SynthID changes how the text is generated and needs a compatible detector. It is not a set of invisible characters, so no, my little detective can't help you there.
The paraphraser: 66 rules, zero models
For the third feature I could have plugged in a language model, like everyone else who owns a keyboard. I didn't. The paraphraser is 66 hand-written rules that match specific phrases, followed by checks, and every edit is yours to accept or reject. A few of the real rules:
| Original | Suggested edit |
|---|---|
| in order to | to |
| due to the fact that | because |
| make a decision | decide |
| utilize the | use the |
| provided assistance to | helped |
So "In order to make a decision, we will utilize the report" becomes "To decide, we will use the report." If that looks like a copy editor with a red pen, correct. Same job, no salary.
I match phrases instead of swapping synonyms because a word has several meanings, and an unrestricted swap will eventually turn a river bank into a financial institution. Whole constructions are safer. Separate rules handle forms like utilizes, utilized and utilizing, because English enjoys making this difficult.
Before it proposes anything, it protects quotations, code, URLs, email addresses and some citation and Markdown structures. It keeps capitalization, avoids overlapping replacements, and checks that numerical strings and how many times they occur haven't changed. There are three tones: natural adds conversational contractions, clear uses simpler wording, and formal expands contractions and swaps out some informal expressions.
It's a curated editing approach covered by implementation tests, not a model trained on a paraphrasing dataset, and I picked a small, inspectable set of changes that can run locally. There are no antonym rules. It cannot guarantee the meaning stays the same, that your detector score goes down, or that a watermark disappears. If you want guarantees, that's a different website and probably a subscription.
Shipping it, and the SEO ritual
With the backend done, I built a simple frontend and named the site exactly what it is: Is it AI generated? I deployed it on Cloudflare, and you can try it at isitaigenerated.zyphh.com. I'm not claiming it's the best at what it does. It's ok.
Then came the ritual every tool website goes through. I added blogs and articles for SEO, made a Google Search Console account, submitted the sitemap and did the usual SEO things you do while hoping Google notices. Last, I put ads on it. I want to know whether a tool website can earn money at all in 2026. I'm not greedy and I genuinely don't care if it makes anything, because this is an experiment. If it prints money on the way, that just means the experiment succeeded, which would be an acceptable side effect.
Where it stands
The site is getting around 1,000+ impressions a week, which is pretty good for a new website. Impressions only count how often it shows up in Google results, not how many humans clicked, so read that as a sign of life and not as traffic. It's starting to gain traction, which is more than I expected from a website named after a question.
I'll post an update if it starts making any cash. Until then, the answer to whether a tool website works in 2026 is: it gets seen, and I don't know yet if it pays.
P.S. I didn't have a separate domain for this, so I used an old one I had access to and made a subdomain. Frugal is the polite word for it.
Conversation
No public comments yet. Add a thoughtful first one.