PhenoPredict is an innovative web-based platform that allows users to upload genetic data or an image of a person's face to receive predictions about their appearance, behavior, ancestry, and potential health risks. The application is built using a microservices architecture to ensure scalability, flexibility, and ease of maintenance.
The project is divided into several microservices, each handling a specific aspect of the application. These services communicate through an API Gateway and use a variety of technologies to perform their tasks.
project-root/
├── ui-service/ # Frontend React application
├── auth-service/ # User authentication and authorization service
├── genetic-data-processing-service/ # Genetic data parsing and processing
├── image-processing-service/ # Image analysis and facial recognition
├── prediction-service/ # Predictive modeling for appearance, behavior, and health
├── reporting-service/ # Report generation and data visualization
├── data-storage-service/ # Database and storage management
├── notification-service/ # Email and notification handling
└── api-gateway/ # API Gateway for routing and communication
- Purpose: Provides the user interface for uploading genetic data and images, viewing predictions, and managing accounts.
- Technology: React.js, Redux, Axios, Material-UI.
- Purpose: Manages user authentication, registration, and authorization using JWT tokens.
- Technology: Python, Django/Flask, OAuth2, JWT.
- Purpose: Processes and analyzes uploaded genetic data, extracting relevant SNPs for predictions.
- Technology: Python, Biopython.
- Purpose: Analyzes uploaded images to extract facial features and perform ancestry, behavior, and health predictions.
- Technology: Python, OpenCV, TensorFlow/PyTorch.
- Purpose: Runs machine learning models to predict appearance, behavior, ancestry, and health risks based on genetic or image data.
- Technology: Python, Scikit-learn, TensorFlow/PyTorch.
- Purpose: Generates detailed reports and visualizations based on the analysis results.
- Technology: Node.js/Python, D3.js, Plotly.
- Purpose: Manages the storage of user data, including genetic data, images, and analysis results.
- Technology: PostgreSQL, AWS S3, MongoDB/DynamoDB.
- Purpose: Handles email and in-app notifications to inform users about the status of their data processing and results.
- Technology: Node.js/Python, AWS SES, SendGrid.
- Purpose: Routes requests from the frontend to the appropriate backend services and handles authentication and authorization.
- Technology: AWS API Gateway, Kong, Express.js.
- Frontend: React.js, Redux, Material-UI
- Backend: Python (Django/Flask), Node.js
- Machine Learning: Scikit-learn, TensorFlow, PyTorch
- Database: PostgreSQL, MongoDB, AWS S3
- API Gateway: AWS API Gateway, Kong
- Authentication: OAuth2, JWT
- Containerization: Docker, Kubernetes
- CI/CD: Jenkins, GitHub Actions, AWS CodePipeline
- Hosting: AWS (EC2, S3, Lambda)
- Node.js: v12.x or later
- Python: v3.7 or later
- Docker: v19.x or later
- Git: v2.x or later
- AWS Account (optional for cloud deployment)
Clone the repository and navigate to the desired service directory:
git clone https://github.com/iebgit/phenopredict.git
cd phenopredict
Install dependencies for each service:
cd ui-service
npm install
cd ../auth-service
pip install -r requirements.txt
# Repeat for other services
-
Start Docker: Ensure Docker is running on your machine.
-
Start Services:
-
For each service, use Docker Compose to build and run the containers:
docker-compose up --build
-
-
Access the Application:
- Navigate to
http://localhost:3000
to access the User Interface Service. - The API Gateway will route requests to the appropriate backend services.
- Navigate to
Contributions are welcome! Please follow these steps to contribute:
- Fork the repository.
- Create a new branch (
git checkout -b feature/YourFeature
). - Make your changes.
- Commit your changes (
git commit -m 'Add YourFeature'
). - Push to the branch (
git push origin feature/YourFeature
). - Create a Pull Request.
This project is licensed under the MIT License. See the LICENSE
file for details.