Skip to content

Repository files navigation

Writing Provenance logo

Writing Provenance

Prove the essay is yours.
Records your real writing process — keystroke rhythm, version history, drafting time — and turns it into a verifiable report your professor can trust.

Next.js 16 · React 19 · Tailwind CSS v4 · next-intl


Why

Turnitin and GPTZero flag real student writing as AI-generated every day. A single percentage becomes a guilty verdict, with no room to defend yourself. Writing Provenance does the opposite of AI detection: instead of guessing whether text looks AI-generated, it records the act of a human writing and packages that process into evidence you can actually submit.

  • Not a detector. It doesn't claim to prove a negative — it provides verifiable process evidence.
  • Private by design. All writing content, keystroke data, and version snapshots stay in your browser. Nothing is uploaded; the report is generated locally.
  • Built to be submitted. Every report carries a SHA-256 hash and ships with appeal email + academic-integrity templates filled in with your report's data.

What's in a report

  • Human-writing score
  • Keystrokes recorded + median key interval (your typing rhythm over time)
  • Drafting timeline and total drafting duration
  • Version snapshots saved as you write
  • Paste detection
  • SHA-256 hash so the report cannot be altered after generation
  • Appeal templates built from real student experiences

How it works

  1. Write in the editor — Draft your essay inside the editor. It quietly records each keystroke and saves version snapshots as you go.
  2. Generate the report — One click turns your writing session into a provenance report.
  3. Send it to your professor — Export a PDF with a SHA-256 hash and an appeal template, and submit it as evidence.

Tech stack

Framework Next.js 16 (App Router, Turbopack, RSC)
UI React 19, Tailwind CSS v4, Motion
i18n next-intl (English / 中文)
Theming Class-based dark mode with a no-FOUC inline script
Storage Browser localStorage (no server, no upload)

Getting started

# install dependencies
npm install

# start the dev server
npm run dev

Open http://localhost:3000 — the landing page is at /, the editor is at /app (under a [locale] segment, e.g. /en/app).

# production build
npm run build
npm start

Project structure

src/
├── app/
│   ├── [locale]/          # i18n routing (en / zh)
│   │   ├── page.tsx       # landing page
│   │   └── app/page.tsx   # editor
│   ├── layout.tsx         # root layout + theme script
│   └── globals.css        # theme tokens + dark mode
├── components/
│   ├── landing/           # Hero, Problem, HowItWorks, ReportPreview, Faq, FinalCta, Navbar, Footer
│   └── editor/            # Editor, ReportView, AppealTemplates, AppHeader
├── i18n/                  # next-intl navigation + config
messages/                  # en.json, zh.json
public/                    # logo, icon

Roadmap

  • Google Docs plugin support (record from existing drafts)
  • Richer keystroke-rhythm analytics
  • More appeal template variants

License

Private project. All rights reserved.

About

Prove your essay is yours. Records your real writing process — keystroke rhythm, version history, drafting time — and generates a verifiable report to counter false AI-writing accusations. Private by design: nothing leaves your browser.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages