Polish your paper. Keep your voice.
Polishly is a bilingual (中文 + English) academic writing refinement platform. Its primary job is to remove AI-sounding phrasing from student and researcher drafts while preserving meaning, terminology, and voice — producing text that reads naturally and no longer trips Turnitin, 知网, GPTZero, Originality.ai, etc.
The homepage is the editor: paste your text, pick discipline + intensity, lock any terms you don't want touched, and get back a character-level diff that you can accept/reject one change at a time.
/— Hero + full editor (split-panel, character-level diff, accept/reject per change)/api/polish— Route handler that calls Gemini Flash with discipline-aware CN/EN prompts and parses the Part 1 / Part 2 / Part 3 output into structured JSON- Term locking, 8 disciplines, 3 intensity levels
.docxexport with colored insertion/deletion runs (tracked-changes surrogate)- Cookie-based guest rate limiting (3 free polishes/day, configurable)
- Lightweight i18n (EN / 中) with locale detection
/pricing,/blog,/about,/faq,/privacy,/terms- Responsive layout, dark-mode aware
- Next.js 16 (App Router), React 19, TypeScript
- Tailwind CSS v4
difffor character/word-level diffsdocxfor Word export- Gemini Flash API (REST, no SDK)
cp .env.example .env.local # then paste your Gemini API key
npm install
npm run dev # http://localhost:3000Environment variables (see .env.example):
| Key | Purpose |
|---|---|
GEMINI_API_KEY |
Google Generative Language API key |
GEMINI_MODEL |
defaults to gemini-flash-latest |
POLISHLY_FREE_DAILY_QUOTA |
free-tier daily polishes (default 3) |
These parts of the product plan require external credentials and are wired as stubs / "Coming soon":
- Supabase Auth & DB (user accounts, persistent history, dashboard)
- Stripe checkout for Pro / Team plans
- Upstash Redis durable rate limiting
- PostHog / Sentry
- Chrome extension / API access / self-hosted model
See Polishly_Complete_Product_Plan.docx for the full 6-month roadmap.