skillsync-cli / DEPLOYMENT_GUIDE.md
Mr-Haseeb786
Clean deployment build
88da18c
|
Raw
History Blame Contribute Delete
6.05 kB
# Deployment & Migration Guide
Complete guide for deploying the new React frontend and updated Flask backend.
## Overview
This project has been upgraded with:
- **Modern React 18 Frontend** with Framer Motion animations
- **Updated Flask Backend** with REST API endpoints
- **Improved State Management** with Zustand
- **Professional SaaS Design** with black & emerald colors
## Quick Migration Path
### For Current Users
If you're already running the project with the old HTML interface:
1. **Backup your current setup**
```bash
cp job_apply_ai/ui/app.py job_apply_ai/ui/app_legacy.py
```
2. **Switch to new Flask app**
```bash
# Rename the new app to be the main file
mv job_apply_ai/ui/app_new.py job_apply_ai/ui/app.py
```
3. **Install frontend dependencies**
```bash
cd frontend
npm install
cd ..
```
4. **Start both servers**
```bash
# Terminal 1: Backend
python -m job_apply_ai.ui.app
# Terminal 2: Frontend (for development)
cd frontend
npm run dev
```
## Development Setup
### Local Development with Hot Reload
```bash
# Terminal 1: Start Flask backend
source venv/bin/activate # or venv\Scripts\activate.bat on Windows
python -m job_apply_ai.ui.app
# Terminal 2: Start React dev server
cd frontend
npm install # if first time
npm run dev
```
Visit: `http://localhost:3000`
### Build Frontend for Production
```bash
cd frontend
npm run build
```
Output: `frontend/dist/` → copied to `job_apply_ai/ui/static/dist/`
## Deployment Options
### Option 1: Standalone Flask Server (Recommended)
Serves both the React frontend and API from a single Flask server.
#### Steps
1. **Build Frontend**
```bash
cd frontend
npm run build
```
2. **Install Dependencies**
```bash
pip install -r requirements.txt
pip install flask-cors # New dependency for API
```
3. **Run the Server**
```bash
python -m job_apply_ai.ui.app
```
4. **Access the App**
- Main app: `http://localhost:5050`
- API endpoints: `http://localhost:5050/api/*`
#### Environment Variables
```bash
# Core
FLASK_ENV=production
FLASK_DEBUG=False
SECRET_KEY=your_random_secret_key_here
PORT=5050
# Storage
JOB_APPLY_AI_DATA_DIR=/path/to/data
# Tailoring
CV_TAILORING_MODE=local # or 'api'
CV_ENABLE_SUMMARY_TAILORING=1
# For API mode
LLM_PROVIDER=groq
GROQ_API_KEY=your_key_here
GROQ_MODEL=llama-3.3-70b-versatile
```
### Option 2: Docker Deployment
Create a `Dockerfile`:
```dockerfile
FROM node:18-alpine as frontend
WORKDIR /app/frontend
COPY frontend/package*.json ./
RUN npm install
COPY frontend/ .
RUN npm run build
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt && pip install flask-cors gunicorn
COPY . .
COPY --from=frontend /app/frontend/dist ./job_apply_ai/ui/static/dist
ENV FLASK_ENV=production
ENV PYTHONUNBUFFERED=1
EXPOSE 5050
CMD ["gunicorn", "--bind", "0.0.0.0:5050", "job_apply_ai.ui.app:app"]
```
Build and run:
```bash
docker build -t job-apply-ai .
docker run -p 5050:5050 job-apply-ai
```
### Option 3: Separate Frontend & Backend
Run React and Flask on different servers (useful for separate scaling).
#### Backend (Flask)
```bash
FLASK_ENV=production python -m job_apply_ai.ui.app
```
#### Frontend (Nginx/Vercel/etc)
```bash
# Build
cd frontend
npm run build
# Deploy to Vercel, Netlify, or your own server
npm install -g vercel
vercel deploy dist
```
In `vite.config.ts`, update API URL:
```typescript
server: {
proxy: {
'/api': {
target: 'https://your-backend.com', // Change to production backend
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
```
## Production Checklist
- [ ] Set `FLASK_DEBUG=False`
- [ ] Use `sqlite` or `postgresql` for sessions (not default)
- [ ] Set strong `SECRET_KEY`
- [ ] Configure CORS properly for your domain
- [ ] Enable HTTPS in production
- [ ] Set appropriate resource limits
- [ ] Configure backup for generated CVs
- [ ] Set up monitoring/logging
- [ ] Test file uploads with various CV formats
- [ ] Verify batch processing stability with many jobs
## Performance Optimization
### Frontend
```bash
# Analyze bundle
npm install -g vite-plugin-visualizer
npm run build -- --analyze
```
### Backend
```python
# Use production-grade WSGI server
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5050 job_apply_ai.ui.app:app
```
### Caching
- Enable browser caching for static assets
- Use Redis for session storage (optional)
- Implement job result caching
## Scaling Considerations
### Horizontal Scaling
- Use reverse proxy (Nginx) to load balance
- Store sessions in Redis or database
- Use shared storage for generated CVs
### Vertical Scaling
- Increase worker processes for Flask/Gunicorn
- Allocate more memory for CV processing
- Use distributed task queue for batch jobs
## Troubleshooting
### Frontend won't load
```bash
# Check if Flask is running
curl http://localhost:5050
# Check if React build exists
ls job_apply_ai/ui/static/dist/index.html
# Verify CORS is enabled
npm run dev # Use dev server instead
```
### API endpoints returning 404
- Ensure `app_new.py` is being used (not legacy `app.py`)
- Check Flask logs for errors
- Verify API routes match frontend expectations
### File upload fails
- Check upload folder permissions
- Verify disk space available
- Check file size limits in Flask config
### Memory issues
- Reduce max job batch size
- Implement streaming for large CVs
- Use separate worker processes
## Rollback Procedure
If issues occur:
```bash
# Restore old Flask app
mv job_apply_ai/ui/app.py job_apply_ai/ui/app_new.py
mv job_apply_ai/ui/app_legacy.py job_apply_ai/ui/app.py
# Restart server
python -m job_apply_ai.ui.app
```
## Support
For issues or questions:
1. Check frontend logs in browser DevTools
2. Check Flask logs in terminal
3. Review specific error messages
4. Contact project maintainers
## Next Steps
- [ ] Test the new React frontend thoroughly
- [ ] Migrate user data if needed
- [ ] Train users on new interface
- [ ] Monitor performance and stability
- [ ] Gather feedback for improvements