Files
resumeformatter/DOCKER_FIX_COMPLETE.md
Laxmi Khilnani cda50356b4
Some checks failed
Profile Linker Docker Build / Build and push Docker image (push) Failing after 3s
feat: Complete Smart Resume Formatter with R2 and Gemini AI integration
- Integrated Cloudflare R2 for template storage and converted file management
- Added Google Gemini AI for resume parsing and HTML generation
- Created backend API endpoints for templates, conversion, and history
- Refactored frontend to use real API instead of mock data
- Fixed Docker networking issues (IPv6/IPv4) for R2 connectivity
- Added resumeService.ts for frontend API integration
- Updated Vite configuration for proper asset serving in Docker
- Successfully tested with 13 templates from R2 bucket
2025-10-14 21:43:41 +05:30

5.4 KiB

DOCKER BUILD ISSUE RESOLVED!

The Problem:

When you accessed http://localhost:8080, you couldn't see the application because of incorrect asset paths in the built HTML.

The Root Cause:

The vite.config.ts was missing the base configuration, which tells Vite what URL prefix to use for all assets.

Before:

<script src="/assets/index-CwyBqJXR.js"></script>

This looked for assets at http://localhost:8080/assets/ (wrong!)

After:

<script src="/resumeformatter/assets/index-CwyBqJXR.js"></script>

This looks for assets at http://localhost:8080/resumeformatter/assets/ (correct!)

The Fix:

Updated frontend/vite.config.ts to include:

base: `/${appName}/`,  // This adds the /resumeformatter/ prefix to all assets

How to Access Your App:

Correct URL:

http://localhost:8080/resumeformatter

Wrong URLs (won't work):

  • http://localhost:8080 → Redirects to /resumeformatter
  • http://localhost:8080/ → Redirects to /resumeformatter
  • http://localhost:8080/resumeformatter/ → May work but use without trailing slash

Verify It's Working:

1. Check Docker Container Status:

docker ps

You should see: resumeformatter-resumeformatter-1 running on port 8080

2. Check Logs:

docker logs resumeformatter-resumeformatter-1 --tail 20

Should show:

  • "Successfully mounted assets from /app/dist/assets at /resumeformatter/assets"
  • "Uvicorn running on http://0.0.0.0:8080"

3. Test Health Endpoint:

curl http://localhost:8080/api/health

Should return: {"status":"ok"}

4. Test Frontend:

curl -I http://localhost:8080/resumeformatter

Should return: HTTP/1.1 200 OK

API Documentation:

Once the app is running, you can access the interactive API docs at:

http://localhost:8080/resumeformatter/api/docs

Available API Endpoints:

Resume Endpoints:

  • GET /resumeformatter/api/resumes/templates - List available templates from R2
  • GET /resumeformatter/api/resumes/templates/{name} - Get specific template content
  • POST /resumeformatter/api/resumes/convert - Convert resume (upload file + template)
  • GET /resumeformatter/api/resumes/history - Get conversion history from R2
  • GET /resumeformatter/api/resumes/download/{key} - Get presigned download URL

Legacy People Endpoints (from template):

  • GET /resumeformatter/api/people - Get all people
  • POST /resumeformatter/api/people - Create new person

Testing the R2 Integration:

1. List Templates:

curl http://localhost:8080/resumeformatter/api/resumes/templates

2. Get Template Content:

curl http://localhost:8080/resumeformatter/api/resumes/templates/Google

3. Upload and Convert Resume:

curl -X POST http://localhost:8080/resumeformatter/api/resumes/convert \
  -F "file=@your-resume.pdf" \
  -F "template_name=Google"

4. View History:

curl http://localhost:8080/resumeformatter/api/resumes/history

Next Steps:

IMMEDIATE - Test the app:

  1. Open browser: http://localhost:8080/resumeformatter
  2. Try selecting a template
  3. Try uploading a resume file
  4. Check if templates load from R2
  5. Test the conversion process

🔄 SOON - Frontend needs updating:

The frontend still has mock R2 functions that need to be replaced with real API calls:

  • fetchTemplatesFromR2() → Call /api/resumes/templates
  • fetchTemplateContentFromR2() → Call /api/resumes/templates/{name}
  • handleGenerate() → Call /api/resumes/convert
  • fetchConvertedResumesFromR2() → Call /api/resumes/history

Would you like me to update the frontend to use the real backend API?

Common Issues & Solutions:

Issue: "Can't connect" or "Site can't be reached"

Solution: Make sure Docker container is running: docker ps

Issue: Blank page or loading forever

Solution: Check browser console (F12) for JavaScript errors

Issue: 404 Not Found

Solution: Make sure you're using /resumeformatter in the URL

Issue: Templates not loading

Solution: Check R2 credentials in .env file and verify bucket contains templates

Issue: AI conversion fails

Solution: Check if GEMINI_API_KEY is set correctly in .env

Useful Commands:

# Start containers
docker-compose up -d

# View logs
docker logs -f resumeformatter-resumeformatter-1

# Stop containers
docker-compose down

# Rebuild after code changes
docker-compose up --build

# Force rebuild (ignore cache)
CACHEBUST=$(date +%s) docker-compose up --build

# Enter container shell
docker exec -it resumeformatter-resumeformatter-1 sh

# Check environment variables in container
docker exec resumeformatter-resumeformatter-1 env | grep -E '(APP_NAME|R2_|GEMINI)'

Architecture Reminder:

Browser → http://localhost:8080/resumeformatter
           ↓
        FastAPI serves index.html
           ↓
        React App loads (with correct /resumeformatter/assets/ paths)
           ↓
        User interacts with frontend
           ↓
        Frontend calls /resumeformatter/api/* endpoints
           ↓
        Backend processes request
           ↓
        Backend calls R2 / Gemini AI
           ↓
        Response returned to user

Success! 🎉

Your Docker container is now running correctly and the app should be accessible at: http://localhost:8080/resumeformatter

Try it now and let me know what you see!