Central HTML-based web application for the VHP4Safety project, providing access to tools, data, and resources for human safety assessment. The functionality of the platform is shown through three case studies.
- GUI for the Virtual Human Platform
- Multiple tools for compound, gene, and risk assessment workflows
- Interactive visualizations (Cytoscape.js, JSmol)
- Modular templates and CSS for easy customization
- RESTful API endpoints (Flask)
- Data integration from Wikidata and custom sources
- Dockerized deployment for reproducibility
├── app.py # Main Flask app
├── patch.py # Python patch for dependency fix
├── Dockerfile # Docker build instructions
├── entrypoint.sh # Entrypoint for Docker
├── requirements.txt # Python dependencies
├── routes/ # Flask blueprints & API endpoints
├── static/
│ ├── css/ # CSS stylesheets
│ ├── js/ # JavaScript files
│ ├── images/ # Logos, icons, partners
│ └── data/ # Data files (CSV, JSON)
├── templates/ # Jinja2 HTML templates
└── README.md # Project documentation
base.html
: Main layout, includes navigation, header, footer, scripts, and styleshome.html
: Landing page with tab descriptions, about section, partner carousel and contact formtools/tools.html
: Tool catalog with search and filter functionalitytools/tool.html
: Tool-specific template, dynamically filled from .json files based on URLtabs/casestudies.html
: Case study catalog where user can choose between the case studiescase_studies/casestudy.html
: Case study template, dynamically filled from .json files based on URLtabs/data.html
: Data tab where metadata will be sharedlegal/privacypolicy.html
,legal/terms_of_service.html
: Pages to be filled with legal information
base.css
: Global styles, standard color variables, layouthome.css
: Home page stylestools.css
,tool.css
: Tool and service card stylescasestudies.css
: Case study stylesqaop_app.css
: qAOP app and Cytoscape visualizationshackathondemo.css
: Hackathon demo page styles (not sure if still in use?)
app.py
: Main Flask application, routing, and renderingroutes/aop_app.py
: API endpoints for AOP tools and datapatch.py
: Patch script to fix dependency issues (e.g., pyshexc)requirements.txt
: Python dependenciesDockerfile
&entrypoint.sh
: Containerization and startup
- Backend: Python 3.10+, Flask, requests, wikidataintegrator, pyBiodatafuse
- Frontend: HTML5, Jinja2, CSS3, JavaScript (Cytoscape.js, JSmol)
- Containerization: Docker
- Data: CSV, JSON, integration with Wikidata
- Clone the repository:
git clone https://github.com/VHP4Safety/ui-design.git cd ui-design
- Install Python dependencies:
pip install -r requirements.txt
- Apply the patch (required for pyshexc):
python patch.py
Run the following command in your terminal:
python app.py
The application will be available at http://localhost:5000/.
Build and run the Docker container:
docker build -t vhp4safety_ui .
docker run -d -p 5001:5000 vhp4safety_ui
The application will be available at http://localhost:5001/.
This web app uses a dynamic content loading approach for both the tool and case study pages:
-
Routes in
app.py
:- The route
/tools/<toolname>
renderstools/tool.html
and passes the relevant JSON filename to the template. - The route
/casestudies/<case>
renderscase_studies/casestudy.html
and passes the case name to the template.
- The route
-
HTML Templates:
tools/tool.html
andcase_studies/casestudy.html
are designed to be generic containers. They do not contain hardcoded content for each tool or case study.- Instead, they include JavaScript that loads and displays content dynamically based on the URL.
-
JavaScript Files:
- A script (
tool.js
andcasestudies.js
) fetches the appropriate JSON file (such asstatic/data/tool/qaopapp_content.json
) using the name from the URL. It then updates the HTML elements with the content from that file.
- A script (
-
JSON Files:
- Each tool and case study has its own JSON file containing all the content and metadata needed for the page.
- The JavaScript reads these files and populates the HTML elements, enabling a single template to serve multiple tools or case studies.
This technique allows for easy expansion and maintenance: new tools or case studies can be added simply by creating new JSON files, without modifying the HTML or Python backend.
- Fork the repository on GitHub
- Clone your fork locally
- Create a new branch for your feature or fix
- Make your changes and commit them
- Push your branch to your fork
- Open a Pull Request to the main repository
Please ensure your code is well-documented and tested. For major changes, discuss with the team first.