A web-based manga translation QA tool that automatically evaluates translated manga text for quality issues using LLMs and vector embeddings.
- Consistency Checker — Detects terms/names translated differently across chapters
- Character Voice Checker — Flags when a character's dialogue deviates from their established speech patterns
- Tone Checker — Identifies dialogue that doesn't match the scene's mood
- Untranslated Text Detector — Catches Japanese text left in the translation
- Frontend: React (Vite + TypeScript) + Tailwind CSS
- Backend: FastAPI (Python)
- Database: PostgreSQL + pgvector (Supabase)
- AI: OpenRouter API (LLM) + HuggingFace Inference API (embeddings)
- Deployment: Render (backend) + Vercel (frontend)
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# Edit .env with your Supabase and OpenRouter credentials
uvicorn app.main:app --reloadcd frontend
npm install
cp .env.example .env
npm run dev- Create a Supabase project
- Copy the Session Pooler connection string to
backend/.env(usepostgresql+asyncpg://prefix) - Run migrations:
cd backend && .venv/bin/alembic upgrade head
6 tables: projects → chapters → dialogue_lines → embeddings, projects → analysis_jobs → qa_results, with qa_results also referencing dialogue_lines.
cd backend
# Set ADMIN_USERNAME and ADMIN_PASSWORD in .env first
.venv/bin/python create_user.py- Go to render.com → New → Web Service
- Connect the GitHub repo
- Render reads
render.yamland usesbackend/Dockerfile - Set secret env vars in Render dashboard:
DATABASE_URL— Supabase Session Pooler connection string (postgresql+asyncpg://...)OPENROUTER_API_KEY— your OpenRouter API keyHF_API_TOKEN— your HuggingFace tokenJWT_SECRET— generate withpython -c "import secrets; print(secrets.token_hex(32))"ADMIN_USERNAME/ADMIN_PASSWORD— login credentialsCORS_ORIGINS— your Vercel frontend URL (set after Vercel deploy)
- Deploy → verify at
https://your-app.onrender.com/health
- Go to vercel.com → New Project
- Import the same GitHub repo
- Configure:
- Root Directory:
frontend - Framework Preset: Vite
- Build Command:
npm run build - Output Directory:
dist
- Root Directory:
- Add env var:
VITE_API_BASE_URL=https://your-app.onrender.com - Deploy
- Copy the Vercel URL (e.g.
https://mangaqa.vercel.app) - Update Render env var:
CORS_ORIGINS=https://mangaqa.vercel.app - Render redeploys automatically with the new CORS setting
