Noetica is a layout-preserving PDF translator. The frontend is a Vite React app with a shadcn-style Tailwind CDN UI. The backend is FastAPI with Redis/Celery jobs, PyMuPDF PDF rewriting, and Groq translation.
- Frontend: React, Vite, Tailwind CDN, lucide-react icons
- Backend: FastAPI, WebSockets, Redis, Celery
- PDF engine: PyMuPDF
- Translation: Groq chat completions
Create backend/.env:
cp backend/.env.example backend/.envSet GROQ_API_KEY in backend/.env.
Run the full app:
make upThen open http://localhost:5174.
The Docker stack runs:
- Frontend:
http://localhost:5174 - API:
http://localhost:8010 - Redis: internal Compose network only
- Worker: Celery PDF translation worker
Useful commands:
make build
make logs
make ps
make downOverride host ports when needed:
FRONTEND_HOST_PORT=5175 API_HOST_PORT=8011 make upThe backend uses Pipenv inside Docker. You do not need to create a local Python virtualenv or run local npm commands.
- The frontend uploads a PDF and target language.
- FastAPI saves the file, creates a Redis-backed job, and queues Celery work.
- The worker opens the PDF with PyMuPDF and extracts text line bounding boxes.
- Each detected line is sent to Groq for translation.
- Original text rectangles are redacted while images and drawings remain.
- Translated text is inserted back into the same rectangles with font auto-sizing.
- WebSocket updates stream progress back to the frontend.