Spaces:
Runtime error
Runtime error
| title: AI Resume Ranker | |
| emoji: π | |
| colorFrom: blue | |
| colorTo: green | |
| sdk: docker | |
| app_file: main.py | |
| pinned: false | |
| # π§ AI Resume Ranker API | |
| An intelligent, production-ready Resume Ranking API for developers, recruiters, and HR tech platforms. | |
| Inspired by Stripe & Paystack API experiences β complete with authentication, dashboard, and live testing interface. | |
| Built with **Flask + Sentence Transformers + PDF Parsing + Semantic AI**, this API helps you automatically score and rank resumes against any job description using powerful language understanding models. | |
| --- | |
| ## π Features | |
| - β **API Key Authentication** with secure Bearer token format | |
| - π§Ύ **Semantic Resume Ranking** using transformer embeddings (not just keyword matching) | |
| - π€ Supports **batch PDF uploads** | |
| - π¬ **JSON API responses** with ranked relevance scores | |
| - π§ͺ **Live Testing Interface** on the dashboard | |
| - π **Secure User System** with login, signup, hashed passwords | |
| - π **API Key Regeneration** from the dashboard | |
| - π Beautiful **API Documentation Page** with copyable code samples | |
| - π§° **Try It Now**: Upload resumes + job text and see live scoring | |
| - π Ready for usage tracking, analytics, or rate limiting | |
| - πΌ Built for scaling into a full SaaS product | |
| --- | |
| ## π Live Demo | |
| > Coming soon: hosted on Render or Railway (e.g., [https://resume-ranker.example.com](https://resume-ranker.example.com)) | |
| --- | |
| ## π¦ API Overview | |
| ### π Endpoint | |
| ``` | |
| POST /api/rank-resumes | |
| ``` | |
| ### π Authentication | |
| Send your API key in the request header: | |
| ``` | |
| Authorization: Bearer amn=your\_api\_key\_here | |
| ```` | |
| ### π€ Request Parameters | |
| | Name | Type | Required | Description | | |
| |-----------------|------------------|----------|--------------------------------------| | |
| | resumes | `file[] (PDF)` | β Yes | One or more PDF resumes | | |
| | job_description | `string` | β Yes | Job description text to compare with | | |
| --- | |
| ## π₯ Example Usage | |
| ### π§ͺ Try It via cURL | |
| ```bash | |
| curl -X POST https://yourdomain.com/api/rank-resumes \ | |
| -H "Authorization: Bearer amn=sk_live_abc123xyz" \ | |
| -F "resumes=@resume1.pdf" \ | |
| -F "resumes=@resume2.pdf" \ | |
| -F "job_description=We are hiring a backend Django developer..." | |
| ```` | |
| ### π¦ Sample Response | |
| ```json | |
| { | |
| "results": [ | |
| { | |
| "filename": "resume1.pdf", | |
| "score": 0.8745 | |
| }, | |
| { | |
| "filename": "resume2.pdf", | |
| "score": 0.6721 | |
| } | |
| ], | |
| "count": 2, | |
| "requested_by": "user@example.com" | |
| } | |
| ``` | |
| --- | |
| ## π Tech Stack | |
| * **Backend:** Flask, Blueprints, Jinja2 | |
| * **AI:** SentenceTransformers (`all-MiniLM-L6-v2`) | |
| * **PDF Parsing:** PyMuPDF | |
| * **Auth:** Flask sessions + hashed passwords | |
| * **Database:** SQLite (dev) / PostgreSQL-ready | |
| * **Frontend:** Bootstrap 5 + custom Jinja templates | |
| * **Hosting:** Render / Railway / PythonAnywhere | |
| * **Docs UI:** Fully embedded HTML + live form | |
| --- | |
| ## π§ͺ Try It Now (via Dashboard) | |
| * Register/Login | |
| * View and copy your API Key | |
| * Paste a job description | |
| * Upload 1β5 resumes (PDF) | |
| * Get AI-scored ranking results instantly | |
| --- | |
| ## π§βπ» Developer Setup | |
| ```bash | |
| git clone https://github.com/yourusername/resume-ranker-api.git | |
| cd resume-ranker-api | |
| python -m venv venv | |
| source venv/bin/activate # or venv\Scripts\activate on Windows | |
| pip install -r requirements.txt | |
| flask run | |
| ``` | |
| Perfect β thanks for the clarification. | |
| You're right to **remove the real email password** before pushing to GitHub β sensitive credentials should never be committed. Instead, include **placeholder values** in the `.env` section of your `README.md`. | |
| --- | |
| ## β Updated `.env` Example for README | |
| Here's the correct `.env` block to include in the `README.md`: | |
| ```ini | |
| FLASK_ENV=development | |
| SECRET_KEY=your_secret_key_here | |
| DATABASE_URL=sqlite:///db.sqlite3 | |
| # β Email credentials for verification system | |
| EMAIL_USER=your_email@gmail.com | |
| EMAIL_PASS=your_app_password_here | |
| ``` | |
| > π **Note:** Use an **App Password** (not your actual Gmail password) if you're using Gmail SMTP. App passwords are safer and Gmail-compliant. | |
| --- | |
| ## π Additional Security Tip | |
| To prevent accidental exposure: | |
| * Add `.env` to your `.gitignore` | |
| * Use environment variables in production (Render, Railway, Fly.io all support this) | |
| **`.gitignore` entry:** | |
| .env | |
| ``` | |
| --- | |
| ## β Bonus (Optional): Mention in README | |
| You can also add a small note under **Developer Setup** in your README: | |
| > π§ **Note:** To enable email verification links, set `EMAIL_USER` and `EMAIL_PASS` in your `.env`. We recommend using an App Password with Gmail or a transactional email provider like Mailgun or SendGrid. | |
| ## π‘ Future Features | |
| * β API usage tracking | |
| * β³ Rate limiting (per API key) | |
| * π Dashboard analytics | |
| * π§ Resume summarization API | |
| * π CSV/JSON result export | |
| * π§© SDKs for Python & JS | |
| --- | |
| ## π€ Contributing | |
| Pull requests are welcome! Let's build the future of AI recruiting tools together. | |
| --- | |
| ## π License | |
| MIT License | |
| --- | |
| ## π¬ Contact | |
| Made with β€οΈ by [Muhammad Aminu Umar](mailto:webcodelabb@gmail.com) | |
| π [LinkedIn](https://linkedin.com/in/webcodelab) | [GitHub](https://github.com/webcodelabb) | |