Skip to content
← Back to Blog

How Our AI Writing Tool Works — and What We Measured Before Shipping It

Written by Tushar · 22 September 2026

Most writing checkers tell you they use AI. Very few tell you which model, why that model, or what happens to the paragraph you paste in. This post is the missing paragraph: what runs in your browser, what the optional AI mode sends, and the measured comparison we used to pick a default model.

Two tiers, and the default is the free one

The scientific writing checker has two tiers, and the one that runs by default never touches a server.

The local rule pass runs entirely in your browser. It checks passive-voice constructions, hedging, overclaiming, wordy phrases, nominalizations, sentence length, tense shifts across paragraphs, and a Flesch reading-ease score. It is table-driven code, not a language model, so it is instant, free, and completely private. It is also the fallback every AI failure degrades to.

The AI modes are opt-in. You paste your paragraph, you choose "grammar and register" or "clarity rewrite", and you accept a consent line that says exactly what is about to happen: this optional analysis sends your text to our AI provider; we never store or log it. Only then does a request go out.

If AI is switched off, has hit its daily limit, is slow, or fails, the tool does not break. It shows the local report and a clear note explaining why the AI tier was unavailable. That is the whole design: the AI is an enhancement, never a dependency.

What actually leaves your device

When you request an AI analysis, the text you pasted in that box is sent through our server to OpenRouter, which routes it to a model. Three properties are enforced on every request:

  1. Zero-retention routing is requested explicitly (zdr: true), not left to account-level preferences. The provider must not retain your prompt.
  2. Stored-data providers are excluded (data_collection: "deny"). This is what rules out free models that train on your inputs.
  3. Nothing is stored or logged on our side. Prompts and outputs are not written to the database and do not appear in our server logs — which record only the route, status code, and duration of a request, never its content.

Journal matching, all twelve calculators, and the compound pages are unaffected by any of this. Those run entirely in your browser, and the privacy page's statement that matching is client-side only remains literally true.

We scored models before picking a default

Choosing "a cheap model" is not a methodology. Before locking a default we built a fixture of scientific paragraphs annotated with labelled register problems — hedged claims, overclaiming, passive chains, wordy phrases, nominalization pile-ups, one deliberately overlong sentence, a clean control paragraph, and a realistic mixture — then scored candidates on a rubric fixed before running the comparison:

  • JSON validity — did the model return the schema-enforced issue list without breaking its shape?
  • Detection recall — how many of the labelled phrases did it actually report?
  • Over-reporting — how many problems did it invent in the clean control paragraph?
  • Latency — median response time across the fixture.
  • Cost — total provider-reported spend for the fixture.

The winner rule was fixed in advance: highest detection recall among candidates with a perfect JSON-validity record; ties broken by lower cost, then lower latency. If no candidate was fully valid, the highest-validity candidate would win with the failure recorded rather than hidden.

What the measurement actually showed

Honesty requires publishing the awkward part. Two things constrained the first pass. The paid cheap-flagship candidates could not be reached at all on the evaluation account (they bill immediately, and the account had no credit), and of the free models that do support structured output, five had no zero-retention endpoint at all — our own data_collection: "deny" policy correctly refused them rather than quietly downgrading the privacy guarantee.

That left exactly two free models that genuinely serve under zero-retention routing. Scored on the fixture:

CandidateZero-retention endpointJSON validDetection recall
inclusionai/ling-3.0-flash-vl:freeyes2 / 85 / 34
inclusionai/ling-3.0-flash-sante:freeyes0 / 80 / 34
CandidateOutcome
qwen/qwen3.8-27b:freerate-limited upstream on every attempt
nex-agi/nex-n2.5-pro:freeno zero-retention endpoint
nex-agi/nex-n2.5-mini:freeno zero-retention endpoint
nvidia/nemotron-3-super-120b-a12b:freeno zero-retention endpoint
dots-studio/dots-3-note-preview:freeno zero-retention endpoint
liquid/lfm-2.5-2.6b:freeno zero-retention endpoint
paid candidates (gemini-3.1-flash-lite, deepseek-v4-flash, gpt-5.4-mini)not reachable on an unfunded account

Neither reachable free model is good enough to call a finished choice. The lock is therefore interim, recorded as such, with an explicit re-run queued once the evaluation account is funded. The substitute is at least a measured substitute with a published score, not a guess with a nicer paragraph around it — and the threshold for replacing it is written down.

Why the friction is the feature

It would have been easy to make this look tidier. Run the comparison with stored-data providers allowed, and the candidate list doubles; run it against a paid model without checking its retention policy, and the scores look great. Both options buy a better table at the cost of a guarantee we said we would keep. We would rather publish a table with gaps in it, and explain the gaps, than publish a guarantee with an asterisk.

That is the same reason the tool defaults to local rules and asks before it sends anything. The privacy claim and the measurement claim come from the same place: showing the work.

Try it

The writing checker runs the full local pass on whatever you paste, with no account and no AI request. Turn on the optional AI modes when you want them, and read the consent line before you do. For the matching side of the site, the journal finder stays entirely in your browser.

Frequently asked questions

Is the writing checker free?

Yes. The local rule pass is free, instant, and unlimited because it runs entirely in your browser. The optional AI modes are governed by a daily request and budget cap; when the cap is reached the tool falls back to the local pass.

Does the AI mode store or train on my text?

No. Requests are routed to zero-retention endpoints with stored-data providers excluded, and nothing is saved on our side — no database writes and no content in our server logs. The consent line shown before your first AI request states this in plain language.

What happens if the AI provider is slow or unavailable?

The tool shows the local rule report and a short message explaining why the AI tier could not run. It never shows a broken or empty result, and the local analysis is unaffected.

How was the default model chosen?

By a rubric fixed before measurement: JSON validity, detection recall against labelled issues, over-reporting on a clean control, latency, and cost. The current default is an interim lock with published scores; the paid re-run replaces it once the evaluation account is funded.

Does using the writing checker affect journal matching?

No. Matching, all twelve calculators, and the compound pages run entirely in your browser and never send your input anywhere. Only an AI analysis you explicitly request sends text to the provider.