# Quick Start Guide ## What Changed? Your DotsOCR application now has: - ✅ **FastAPI backend** (replaces Gradio) - ✅ **React frontend** (modern UI) - ✅ **Separate deployment** (backend on HF Spaces, frontend on Hostinger/local) ## File Structure ``` dots-ocr-parser/ ├── app.py # NEW: FastAPI backend ├── app_gradio_backup.py # OLD: Gradio version (backup) ├── requirements.txt # UPDATED: Added FastAPI dependencies ├── frontend/ # NEW: React application │ ├── src/ │ │ ├── components/ # UI components │ │ ├── api/ # Backend API client │ │ └── types/ # TypeScript types │ ├── .env.development # Dev config │ ├── .env.production # Prod config │ └── package.json ├── DEPLOYMENT.md # Detailed deployment guide ├── README_API.md # API documentation └── QUICKSTART.md # This file ``` ## Step-by-Step Deployment ### Step 1: Deploy Backend to HuggingFace Spaces ```bash # 1. Make sure you're in the project root cd /Users/mac/Desktop/dots-ocr-parser # 2. Add your HF Spaces as remote (if not already added) git remote add hf https://huggingface.co/spaces/isseygino911/dots-ocr-parser # 3. Commit the new FastAPI backend git add app.py requirements.txt .gitignore git commit -m "Switch from Gradio to FastAPI backend" # 4. Push to HuggingFace Spaces git push hf main # 5. Wait for deployment (~10-15 minutes for first time) ``` **What happens:** - HF Spaces will install dependencies - Download the DotsOCR model (~3GB) - Start the FastAPI server on port 7860 - Your API will be available at: `https://isseygino911-dots-ocr-parser.hf.space` **Verify it worked:** - Visit: `https://isseygino911-dots-ocr-parser.hf.space/docs` - You should see the FastAPI automatic API documentation ### Step 2: Test Backend Locally (Optional) You can't run the backend on your Mac (no CUDA), but you can test it via the API: ```bash # Test health endpoint curl https://isseygino911-dots-ocr-parser.hf.space/health # Expected response: # {"status":"healthy","gpu_available":true} ``` ### Step 3: Run Frontend Locally ```bash # 1. Navigate to frontend directory cd /Users/mac/Desktop/dots-ocr-parser/frontend # 2. Update backend URL in .env.development echo "VITE_API_BASE_URL=https://isseygino911-dots-ocr-parser.hf.space" > .env.development # 3. Install dependencies (if not already done) npm install # 4. Start dev server npm run dev ``` **Access the app:** - Open browser: `http://localhost:5173` - Try uploading an image or PDF - Watch real-time progress - View results ### Step 4: Deploy Frontend to Hostinger ```bash # 1. Build production version cd /Users/mac/Desktop/dots-ocr-parser/frontend # 2. Set production backend URL echo "VITE_API_BASE_URL=https://isseygino911-dots-ocr-parser.hf.space" > .env.production # 3. Build npm run build # 4. Upload the dist/ folder to Hostinger # - Use FTP client (FileZilla, etc.) # - Or use Hostinger File Manager # - Upload contents of dist/ to your public_html folder ``` **Access your deployed app:** - Visit: `https://yourdomain.com` --- ## Testing the Complete Flow ### 1. Upload an Image 1. Open the frontend (local or deployed) 2. Drag and drop an image or click to select 3. Choose parsing mode (default is fine) 4. Click upload or let it auto-upload ### 2. Watch Progress - You'll see real-time progress updates - Progress bar shows percentage - Messages show current processing stage ### 3. View Results Once complete: - **Markdown Preview**: Rendered document content - **Raw Text**: Plain markdown - **JSON**: Structured data with bboxes For PDFs: - Use Previous/Next buttons to navigate pages - Each page has its own results ### 4. Download Results Click "Download ZIP" to get: - All page images with layout visualization - JSON files with structured data - Markdown files with text content --- ## Common Issues & Solutions ### Issue: "Failed to fetch" error **Cause:** Backend URL is wrong or backend is down **Solution:** 1. Check backend is running: Visit `https://isseygino911-dots-ocr-parser.hf.space/health` 2. Verify `.env.development` or `.env.production` has correct URL 3. Check browser console for CORS errors ### Issue: CORS errors in browser console **Cause:** Backend doesn't allow your frontend domain **Solution:** Update `app.py` line 199: ```python allow_origins=["https://yourdomain.com", "http://localhost:5173"], ``` Then push to HF Spaces again. ### Issue: WebSocket connection failed **Don't worry!** The app automatically falls back to HTTP polling. Everything will still work, just without real-time updates. ### Issue: Backend returns 503 or times out **Cause:** HF Space is sleeping or overloaded **Solution:** 1. Visit the Space URL to wake it up 2. Wait 30 seconds for model to load 3. Try again ### Issue: "Job not found" after backend restart **Cause:** Jobs are stored in memory, lost on restart **Solution:** Upload the file again. For persistent storage, see DEPLOYMENT.md for SQLite enhancement. --- ## API Endpoints Reference ### Upload Image ```bash curl -X POST \ https://isseygino911-dots-ocr-parser.hf.space/api/parse/image \ -F "file=@test.jpg" \ -F "prompt_mode=prompt_layout_all_en" ``` ### Check Status ```bash curl https://isseygino911-dots-ocr-parser.hf.space/api/jobs/{job_id}/status ``` ### Get Results ```bash curl https://isseygino911-dots-ocr-parser.hf.space/api/jobs/{job_id}/results ``` ### Download ZIP ```bash curl -O https://isseygino911-dots-ocr-parser.hf.space/api/jobs/{job_id}/download ``` --- ## Configuration Options ### Parsing Modes - **prompt_layout_all_en** (Default) - Full layout detection + text recognition - Output: JSON with bboxes, categories, and text - Best for: Complete document analysis - **prompt_layout_only_en** - Layout detection only (no text) - Output: JSON with bboxes and categories - Best for: Document structure analysis - **prompt_ocr** - Text extraction only - Output: Plain markdown - Best for: Quick text extraction ### Frontend Environment Variables **Development** (`.env.development`): ```bash VITE_API_BASE_URL=http://localhost:7860 # or HF Spaces URL for testing ``` **Production** (`.env.production`): ```bash VITE_API_BASE_URL=https://isseygino911-dots-ocr-parser.hf.space ``` --- ## Performance Expectations - **Backend first start**: 10-15 minutes (model download) - **Backend subsequent starts**: 30-60 seconds (model cached) - **Image processing**: 10-15 seconds per image - **PDF processing**: 10-15 seconds per page - **Frontend load time**: < 2 seconds --- ## Next Steps ### Option 1: Basic Usage You're done! Start using the app. ### Option 2: Enhancements See [DEPLOYMENT.md](./DEPLOYMENT.md) for: - Adding authentication (JWT) - Adding rate limiting - Persistent job storage (SQLite) - Monitoring and logging ### Option 3: Customization Edit frontend components: - `frontend/src/components/FileUpload.tsx` - Upload UI - `frontend/src/components/JobProgress.tsx` - Progress display - `frontend/src/components/ResultsViewer.tsx` - Results display - `frontend/src/App.tsx` - Main layout --- ## Getting Help 1. **Check logs:** - Backend: HuggingFace Spaces logs - Frontend: Browser DevTools console 2. **Read docs:** - [DEPLOYMENT.md](./DEPLOYMENT.md) - Detailed deployment guide - [README_API.md](./README_API.md) - API documentation 3. **Test API directly:** - Visit `/docs` on your backend URL - Try endpoints in the interactive docs --- ## Rollback to Gradio (if needed) If you want to go back to the original Gradio UI: ```bash # Restore backup cp app_gradio_backup.py app.py # Push to HF Spaces git add app.py git commit -m "Rollback to Gradio" git push hf main ``` --- ## Summary Checklist - [ ] Backend deployed to HuggingFace Spaces - [ ] Backend URL is accessible at `/docs` - [ ] Frontend `.env` file has correct backend URL - [ ] Frontend runs locally (`npm run dev`) - [ ] Can upload image/PDF successfully - [ ] Can see real-time progress - [ ] Can view results in all tabs - [ ] Can download results as ZIP - [ ] Frontend deployed to Hostinger (optional) Once all checkboxes are done, you're all set! --- **Enjoy your new React + FastAPI DotsOCR application!** 🎉