An AI academic editor and scientific reviewer. Paste text from a thesis, paper, or article and it rewrites it into rigorous, natural academic prose (Arabic or English) and produces a structured review: a redline of every change, plus verified, no‑LLM checks for statistics and citations, writing analytics, and methodological findings tied to the reviewer’s rules.
It is a 100% client‑side app — there is no backend. Your text and API key stay in your browser and calls go directly to the model provider you choose. It runs great against a local OmniRoute gateway.
| Landing | Review report | Review rules |
|---|---|---|
![]() |
![]() |
![]() |
| Audit & verified checks | References | Arabic (RTL) |
|---|---|---|
![]() |
![]() |
![]() |
| Settings — OmniRoute (local, no key) |
|---|
![]() |
- Verified, no‑LLM checks that can't hallucinate: statcheck‑style p‑value recomputation, citation cross‑checking (orphan / incomplete / duplicate / self‑citation), CONSORT/PRISMA/STROBE reporting checklists, over‑claim and acronym detection, and writing analytics.
- Composable AI skills — 11 built‑in base skills (Reviewer, Translator, Abstract, Reviewer 2, Cover Letter, Grant Polish, …) plus modifiers you can stack and extend.
- Review rules catalog — opt‑in, categorized house rules injected into the prompt, plus your own custom rules.
- Bilingual, RTL‑first (Arabic + English) and a warm, scholarly design with light / dark / sepia themes.
- Yours and private — everything lives in your browser's
localStorage; Backup & Restore moves it.
📚 Full documentation lives in
/docs: a getting‑started guide, a tools reference, the rules reference, and the architecture overview.
- Node.js 20 or newer and npm.
- One model provider. The default is OmniRoute running locally (no API key needed). You can also use Groq, OpenRouter, OpenAI, or any OpenAI‑compatible endpoint with a key.
npm install
npm run devOpen the URL Vite prints — it will be:
http://localhost:5173/Research-Scribe-AI/
(The /Research-Scribe-AI/ path is required; it matches the GitHub Pages base. The bare http://localhost:5173/
will look empty.)
OmniRoute is a local, OpenAI‑compatible gateway. The app talks to it exactly like any OpenAI endpoint, so setup is just pointing the app at it. For a step‑by‑step guide with a screenshot, see Using OmniRoute.
1. Start OmniRoute so it serves its API at:
http://localhost:20128/v1
2. Verify it’s up (optional, from a terminal). This is the same request the app makes:
curl -N http://localhost:20128/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"auto/best-free","stream":true,
"messages":[{"role":"user","content":"ping"}]}'You should see a stream of data: {...} chunks. To list available models:
curl http://localhost:20128/v1/models3. Point the app at it. OmniRoute is the default provider, so usually there’s nothing to change. To check or adjust, click the gear (Settings) in the top bar:
- Provider:
OmniRoute (local) - Base URL:
http://localhost:20128/v1(prefilled) - Model:
auto/best-free(recommended) orauto/smart - API key: leave blank — OmniRoute doesn’t need one
4. Review some text. Type or paste into the composer at the bottom and press Review (⌘/Ctrl + Enter also sends). The result streams in live.
Model tips: auto/best-free and auto/smart (routes to DeepSeek) work well. Avoid bare auto and
auto/best-chat, which may route to a failing provider.
Important: OmniRoute is served over HTTP on localhost. A browser will only call it from a page that is also on
http://localhost(i.e. the local dev/preview server). A site served over HTTPS (like GitHub Pages) cannot reachhttp://localhost:20128— browsers block “mixed content”. So use OmniRoute locally vianpm run dev. For a deployed HTTPS site, use a cloud provider instead (below).
Pick any of these in Settings → Provider and paste the key (stored only in your browser):
| Provider | Base URL | Example model | Key |
|---|---|---|---|
| OmniRoute (local) | http://localhost:20128/v1 |
auto/best-free |
not needed |
| Groq | https://api.groq.com/openai/v1 |
llama-3.3-70b-versatile |
free — console.groq.com/keys |
| OpenRouter | https://openrouter.ai/api/v1 |
anthropic/claude-sonnet-4 |
openrouter.ai/keys |
| OpenAI | https://api.openai.com/v1 |
gpt-4o-mini |
platform.openai.com/api-keys |
| Custom | your endpoint | your model | optional |
A Custom endpoint must allow browser requests (send CORS headers) to work in the app.
- Skills (toolbar): pick a base skill (Academic Reviewer, Translator, Abstract Writer, Reviewer 2, Cover Letter, Title & Keywords, Grant Polish, Methods & Limitations, …) and toggle modifiers (e.g. Natural Human Style). Create and edit your own.
- Review rules (toolbar): opt into categorized house rules (integrity, statistics, citations, structure, tone, reporting) injected into the AI prompt, plus your own custom rules. See the rules reference.
- Review workspace: tabs for Revised (with accept/reject redline), Audit, Stats (statcheck‑style p‑value recomputation), Citations (orphan / incomplete / duplicate / self‑citation), and Analytics. The Audit tab also surfaces reporting‑standard (CONSORT/PRISMA/STROBE), over‑claim, number‑consistency, and acronym findings — all computed locally with no LLM.
- References (toolbar): fetch real metadata by DOI or title (CrossRef), format in APA/AMA/Vancouver,
insert citations, import/export
.bib, de‑duplicate, and verify DOIs. - Glossary, Outline (per‑section navigation), Snapshots (save/compare versions), Read‑aloud.
- Focus mode: ⌘. / Ctrl‑. for distraction‑free reading (Esc exits).
- Command palette: press ⌘K / Ctrl‑K.
- Appearance: light / dark / sepia, accent color, font size (Settings).
- Backup & Restore (Settings): export everything (including your skills and rules) to a JSON file and import it on another device.
See docs/tools.md for what every tool and check does.
npm run build # type-check + production build → dist/
npm run preview # serve the built app locally (http://localhost:4173/Research-Scribe-AI/)
npm run check # runs the deterministic self-tests (statcheck, citations, parser, etc.)npm run preview serves over HTTP on localhost, so OmniRoute works there too.
When running the built app (or the deployed site), your browser offers Install (address bar / “Install app”). The app shell and all local tools work offline; only the model call needs a network connection.
- Push to
main. The workflow at.github/workflows/deploy.ymlbuilds and deploys automatically. - One‑time: repo Settings → Pages → Source = GitHub Actions.
- The
baseinvite.config.tsmust equal the repo name (/Research-Scribe-AI/), or the site loads blank.
The site is HTTPS, so OmniRoute won’t work there (see the mixed‑content note above). Use Groq / OpenRouter / OpenAI on the deployed site, and keep OmniRoute for local use.
- Everything (settings, chats, skills, glossary, references) is stored in your browser’s
localStorage. A different browser or device starts empty — use Backup & Restore to move data. - Your API key never leaves your browser except in the direct request to the provider you chose.
- Output hygiene removes invisible copy‑paste artifacts. The app does not falsify data or citations and does not try to evade AI‑detection tools — research integrity comes first.
- “Network or CORS error” with OmniRoute — OmniRoute isn’t running, the Base URL is wrong, or it isn’t
allowing the browser origin. Confirm
curl http://localhost:20128/v1/modelsworks, that the app is onhttp://localhost:5173/...(not HTTPS), and that OmniRoute sendsAccess-Control-Allow-Originforhttp://localhost:5173. - Blank page after deploy — the
baseinvite.config.tsdoesn’t match the repo name. - 401 / invalid key — a cloud provider needs a valid key in Settings (OmniRoute needs none).
- Model / 400 error — switch the model to
auto/best-free(OmniRoute) or a model your provider supports. - Nothing streams — check the browser console/network tab; make sure the provider supports streaming
(
stream: true).
Contributions are welcome. Read CONTRIBUTING.md for the house rules (reuse‑first,
bilingual + RTL, no new dependencies, backup + self‑check obligations) and docs/architecture.md
for the extension seams. AI coding agents: see CLAUDE.md.
npm run check # self-tests must pass
npm run build # must be cleanMIT © Batta Studio.






