OneMoon is a human-in-the-loop note-to-LaTeX workspace. It takes handwritten notes, screenshots, or PDFs through upload, page review, block conversion, and final LaTeX packaging in one flow.
- Upload a document into a workspace and review pages in a browser-based editor.
- Segment handwritten content into text, math, and figure blocks.
- Convert blocks with a configured LLM provider or keep using the built-in mock provider for local development.
- Merge the assembled output into LaTeX and download a package that includes the source plus a relative
figures/folder.
- Create or open a workspace.
- Upload a PDF or image document.
- Review each page and adjust block segmentation where needed.
- Convert blocks in
Conversionmode. - Merge the assembled source in
Mergingmode and download the resulting package.
- Frontend: React, TypeScript, Vite
- Backend: FastAPI, SQLAlchemy, Python processing pipeline
- Storage: local
data/directory for uploads, rendered pages, crops, and generated artifacts
Start both apps from the repo root:
npm install
npm run dev- Frontend:
http://localhost:5173 - Backend:
http://localhost:8000
Run the apps separately when needed:
cd apps/backend
uv sync --dev
uv run onemoon-backendcd apps/frontend
npm install
npm run dev- Username:
admin - Password:
onemoon
OneMoon stays usable without an external model. If no real provider is configured, the backend falls back to the mock provider so the upload-to-review workflow still runs locally.
To enable a real provider, configure apps/backend/.env or the repo-root .env with your ONEMOON_* / provider-specific LLM settings before starting the backend.
cd apps/backend && uv run pytest
cd apps/frontend && npm run buildMore detailed app-specific notes live in apps/frontend/README.md and apps/backend/README.md.


