Skip to content

Repository files navigation

Research Scribe AI · المُراجِع الأكاديمي

License: MIT 100% client-side PWA Bilingual AR / EN

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.

Screenshots

Landing Review report Review rules
Landing Review report Review rules
Audit & verified checks References Arabic (RTL)
Audit References Arabic RTL
Settings — OmniRoute (local, no key)
OmniRoute settings

What makes it different

  • 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.


Requirements

  • 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.

Quick start

npm install
npm run dev

Open 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.)


Connect to OmniRoute

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/models

3. 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) or auto/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 reach http://localhost:20128 — browsers block “mixed content”. So use OmniRoute locally via npm run dev. For a deployed HTTPS site, use a cloud provider instead (below).


Other providers

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.


Using it (tour)

  • 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.


Build, preview, and self‑checks

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.


Install as an app (PWA)

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.


Deploy to GitHub Pages

  1. Push to main. The workflow at .github/workflows/deploy.yml builds and deploys automatically.
  2. One‑time: repo Settings → Pages → Source = GitHub Actions.
  3. The base in vite.config.ts must 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.


Data & privacy

  • 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.

Troubleshooting

  • “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/models works, that the app is on http://localhost:5173/... (not HTTPS), and that OmniRoute sends Access-Control-Allow-Origin for http://localhost:5173.
  • Blank page after deploy — the base in vite.config.ts doesn’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).

Contributing

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 clean

License

MIT © Batta Studio.

Releases

Packages

Contributors

Languages