A localized academic productivity assistant for university and research workflows. EZscholar unifies task planning, remote compute, focus management, report generation, literature analysis, and guided learning in one console.
|
Language / 语言 English (Default) · 简体中文 |
Typical tools fragment research workflows:
- Deadline reminders are time-based only, without task complexity awareness.
- Switching between local and remote GPU environments is expensive.
- Deep work is interrupted easily, and context is lost after breaks.
- Data processing, charting, and report export pipelines are long and error-prone.
- Long-paper retrieval often loses figure/table context across sources.
- Direct answers can weaken reasoning practice in learning scenarios.
EZscholar aims to unify these high-frequency pain points into one workflow.
The repository now ships:
frontendconsole (React + TypeScript + Vite)backendlocal Docs Maker bridge service (Express + Mammoth + Pandoc bridge)
Implemented capabilities:
- Routes and pages:
/: AI Chat (default home)/overview: Overview dashboard (recent visits, activity timeline, module cards)/activity: Global activity feed/settings: Theme, provider, and workspace settings/modules/*: Module detail pages (Deadline / Remote / Flow / Output / Research / Socratic)/modules/slides-studio: Standalone Slides Studio (Markdown -> PPTX)
- Agentic AI chat:
- OpenAI-compatible Chat Completions integration
- Function-calling tools:
schedule_reminder/list_reminders/cancel_reminderparse_word_draft/render_academic_report/generate_presentation_slides(async job)
- In-chat tool action cards, plus local notifications and toast delivery
- Module 2 Docs Maker:
- Upload
.docxdraft to workspace - Parse Word draft to Markdown with extracted image placeholders
- Render polished Markdown to
pdf/docx(typstfirst,pandocfallback for PDF) - Standalone Slides Studio with async PPTX jobs (
Marp CLI) - Markdown sources for PPTX: upload
.md, existing markdown path, or external webhook prompt - Default output target:
workspace/docs-maker/output/report-<timestamp>.pdf - Default PPTX output target:
workspace/docs-maker/slides/output/slides-<timestamp>.pptx - Download stream endpoint and workspace file persistence
- Upload
- Command palette:
Ctrl/Cmd + Kfor navigation and simulated actions - Theme system: dark/light mode with improved light-mode readability
- Workspace state persistence:
- Config and history are stored under
<workspace>/.ezscholar/ config.json(provider/url/key/theme/workspace),history/events.jsonl,state/module-snapshots.json- Module 1 reminders and module activities can be restored after refresh
- Config and history are stored under
Security note: API keys are currently stored in plaintext in
<workspace>/.ezscholar/config.json. Do not commit this directory.
| Dark | Light |
|---|---|
![]() |
![]() |
| Dark | Light |
|---|---|
![]() |
![]() |
|
|
cd backend
npm install
cd frontend
npm installcd backend
npm run devDefault backend URL:
http://127.0.0.1:8787
Create/update frontend/.env.local:
VITE_LOCAL_API_BASE_URL=http://127.0.0.1:8045/v1
VITE_LOCAL_API_KEY=
VITE_LOCAL_MODEL=gemini-3-flash
VITE_QWEN_API_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
VITE_QWEN_API_KEY=
VITE_QWEN_MODEL=qwen-plusNote: .env.local is git-ignored. Do not commit real API keys into source code or README files.
cd frontend
npm run devDefault local URL (check terminal output first):
http://127.0.0.1:5173
/api/docs-maker/* is proxied by Vite to the backend service in development.
cd frontend
npm run build
npm run preview -- --host 127.0.0.1 --port 4173Preview URL:
http://127.0.0.1:4173
cd backend
npm test
npm run build
cd ../frontend
npm run lint
npm run test
npm run test:e2eUniHelperCode/
├── README.md
├── README.zh-CN.md
├── docs/images/ # README screenshot assets
├── backend/
│ ├── src/routes/ # docs-maker routes
│ ├── src/services/ # path guard / parser / renderer / slides jobs
│ └── src/types.ts # zod schemas + response types
└── frontend/
├── src/
│ ├── app/ # Router, navigation, QueryClient
│ ├── layouts/ # AppShell / Sidebar / TopHeader
│ ├── pages/ # Chat / Overview / Activity / Settings / ModuleDetail
│ ├── features/ # dashboard / settings / modules / command-palette
│ ├── services/ # api mock + llm + agent tools + docs-maker client + notifier
│ ├── stores/ # UI / LLM / Chat / Notifier / Workspace
│ └── styles/ # tokens + component styles
├── e2e/ # Playwright tests
└── vitest.config.ts
- Start the app and open AI Chat (
/) by default. - Configure your active LLM provider in
/settings. - Try prompts like "Remind me in 30 minutes to ..." to validate tool calling.
- Open
/modules/output-generatorto process.docxand renderpdf/docx. - Open
/modules/slides-studioto create async PPTX jobs from markdown/webhook input. - Use
Ctrl/Cmd + Kfor fast navigation and action simulation.
- Integrate real backend APIs (while keeping mock fallback)
- Add module-level real-time status subscriptions (WebSocket/SSE)
- Persist reminders and chat history
- Expand external slide providers (Canva/NotebookLM adapters on top of generic webhook)
- Expand bilingual UX across the product
Licensed under MIT License.





