Panacea - AI Job Assistant
A full-stack web application that helps users generate personalized messages for job applications based on their resume and job descriptions.
- Resume Analysis: Upload your resume once and have it automatically analyzed to extract key information
- Job Description Analysis: Extract company information, technologies, and requirements from job descriptions
- Personalized Messages: Generate custom messages for different platforms:
- LinkedIn Connection Requests (200 characters)
- LinkedIn Messages (300 characters)
- LinkedIn InMail (2000 characters)
- Short Emails (1000 characters)
- Detailed Emails (3000 characters)
- Y Combinator Applications (500 characters)
- Multiple Resume Profiles: Manage different resume profiles for different job types
- Dashboard: View all your resumes and statistics in a clean interface
- User Authentication: Secure login and registration system
- FastAPI: Modern, fast web framework for building APIs with Python
- SQLAlchemy: SQL toolkit and Object-Relational Mapping (ORM)
- PostgreSQL: Relational database for data storage
- Alembic: Database migration tool
- Claude AI: Integration with Anthropic's Claude API for AI-powered analysis and generation
- JWT: Authentication with JSON Web Tokens
- PDF Processing: Extract text from PDF resumes
- React: JavaScript library for building user interfaces
- TypeScript: Static typing for improved development experience
- React Router: For client-side routing
- Axios: HTTP client for API requests
- React Hook Form: Form validation and management
- React Dropzone: File upload functionality
- React Toastify: Notification system
- Tailwind CSS: Utility-first CSS framework for styling
- Docker: Container-based deployment with Docker Compose
- Nginx: Web server for the frontend
- Environment Variables: Configuration via .env files
- Continuous Deployment: Ready for deployment on platforms like Render
- Docker and Docker Compose
- Node.js 18+ (for local development)
- Python 3.10+ (for local development)
- Anthropic API Key (for Claude AI integration)
Create a .env file in the root directory with the following variables:
SECRET_KEY=your_secret_key
ANTHROPIC_API_KEY=your_anthropic_api_key
ANTHROPIC_MODEL=claude-3-sonnet-20240229
- Clone the repository:
git clone https://github.com/your-username/job-message-writer.git
cd job-message-writer- Build and start the containers:
docker-compose up -dThis will start:
- Frontend: http://localhost
- Backend: http://localhost:8000
- PostgreSQL database
- Navigate to the backend directory:
cd job_message_writer/backend- Create a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install dependencies:
pip install -r requirements.txt- Run database migrations:
alembic upgrade head- Start the backend server:
uvicorn app.main:app --reload- Navigate to the frontend directory:
cd job_message_writer/frontend- Install dependencies:
npm install- Start the development server:
npm run devjob_message_writer/
├── backend/
│ ├── alembic/ # Database migration scripts
│ ├── app/
│ │ ├── api/
│ │ │ ├── endpoints/ # API route handlers
│ │ │ └── api.py # API router setup
│ │ ├── core/ # Core settings and configuration
│ │ ├── db/ # Database models and setup
│ │ ├── llm/ # AI integration modules
│ │ ├── schemas/ # Pydantic schemas for validation
│ │ ├── utils/ # Utility functions
│ │ └── main.py # Application entry point
│ ├── requirements.txt # Python dependencies
│ └── Dockerfile # Backend Docker configuration
├── frontend/
│ ├── public/ # Public assets
│ ├── src/
│ │ ├── api/ # API client functions
│ │ ├── components/ # React components
│ │ │ └── layout/ # Layout components
│ │ ├── context/ # React context providers
│ │ ├── pages/ # Page components
│ │ ├── App.tsx # Main application component
│ │ └── main.tsx # Entry point
│ ├── package.json # JavaScript dependencies
│ └── Dockerfile # Frontend Docker configuration
├── docker-compose.yml # Docker Compose configuration
└── README.md # Project documentation
The application uses JWT (JSON Web Tokens) for authentication. Tokens are stored in local storage and attached to API requests through an Axios interceptor.
- Users: User accounts and authentication data
- Resumes: Resume profiles with extracted information
- JobDescriptions: Stored job descriptions with company analysis
- Messages: Generated application messages
This application is configured for easy deployment on Render:
- Create a new Web Service for the backend
- Set the build command to
pip install -r requirements.txt - Set the start command to
alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port $PORT - Add environment variables from the
.envfile - Create a new Static Site for the frontend
- Set the build command to
npm install && npm run build - Set the publish directory to
dist - Add the environment variable
VITE_API_BASE_URLpointing to your backend URL
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
- 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
Your Name - Shallum Israel Maryapanor