A modern web application for converting any resume into Jake's Resume templateβthe industry standard for SWEs, built with Ruby on Rails backend and Remix.js frontend.
Try it now: https://jakesresu.me/
- Resume file upload and processing
- LaTeX output generation
- Modern, responsive UI
- RESTful API architecture
- Containerized deployment with Docker
- Ruby on Rails API
- Redis for job processing
- Docker containerization
- Remix.js
- TypeScript
- Tailwind CSS
- Vite
- Google Cloud Platform
- Load Balancer configuration
- CI/CD with Cloud Build
.
βββ backend/ # Ruby on Rails API server
βββ frontend/ # Remix.js web application
βββ cloudbuild.yaml # Cloud Build configuration
βββ lb.yaml # Load balancer configuration
- Node.js (v18 or higher)
- Ruby (3.x)
- Docker and Docker Compose
- Redis
-
Navigate to the backend directory:
cd backend
-
Install dependencies:
bundle install
-
Start the Rails server:
rails server
-
Navigate to the frontend directory:
cd frontend
-
Install dependencies:
npm install
-
Start the development server:
npm run dev
Both frontend and backend components can be run using Docker:
-
Build the images:
docker-compose build
-
Start the services:
docker-compose up
The application is configured for deployment on Google Cloud Platform:
-
Configure your GCP project and authenticate:
gcloud auth login gcloud config set project [YOUR_PROJECT_ID]
-
Deploy using Cloud Build:
gcloud builds submit
Make sure to set up the following environment variables:
ANTHROPIC_API_KEY
- Anthropic API key for resume processingFIREWORKS_API_KEY
- Fireworks Llama API key for resume processingGEMINI_API_KEY
- Gemini API key for resume processingREDIS_URL
- Redis connection URLRAILS_ENV
- Rails environment (development/production)RAILS_LOG_TO_STDOUT
- Enable logging to stdout in productionRAILS_SERVE_STATIC_FILES
- Enable serving static files in productionRAILS_MASTER_KEY
- Rails master key for decrypting credentialsSECRET_KEY_BASE
- Rails secret key for production
No environment variables required for local development. Production variables are handled through Cloud Run deployment.
Note: In production (Cloud Run), secrets are managed through GCP Secret Manager.
The backend provides RESTful API endpoints for resume processing:
-
POST /api/v1/resumes
- Upload a resume file for processing- Accepts multipart form data with a
file
parameter - Returns a
request_id
for tracking the processing status - Rate limited to 5 requests per 15 minutes per IP
- Accepts multipart form data with a
-
GET /api/v1/resumes/preview?request_id=<request_id>
- Preview the processed resume- Returns PDF file for inline display
- Caches the PDF for 1 hour after generation
-
GET /api/v1/status/events?request_id=<request_id>
- Server-Sent Events (SSE) endpoint for real-time status updates- Streams processing status updates
- Returns final result when processing is complete
- Connection times out after 60 seconds
- Results are cached for 1 hour after completion
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.