CancerAtHomeV2 / ARCHITECTURE.md
Mentors4EDU's picture
Upload 33 files
7a92197 verified

Cancer@Home v2 - Architecture Diagram

System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                         WEB BROWSER                                      β”‚
β”‚                      http://localhost:5000                               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚
                             β”‚ HTTP/WebSocket
                             β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    FRONTEND (HTML5/CSS3/JS)                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚Dashboard β”‚  Neo4j   β”‚  BOINC   β”‚   GDC    β”‚    Pipeline          β”‚  β”‚
β”‚  β”‚  View    β”‚   Viz    β”‚  Tasks   β”‚   Data   β”‚    Tools             β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                                          β”‚
β”‚  Technologies: D3.js, Chart.js, Vanilla JavaScript                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚
                             β”‚ REST API + GraphQL
                             β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    BACKEND (FastAPI + Python)                           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚                      API Layer                                   β”‚   β”‚
β”‚  β”‚  β€’ REST Endpoints (/api/*)                                      β”‚   β”‚
β”‚  β”‚  β€’ GraphQL Endpoint (/graphql)                                  β”‚   β”‚
β”‚  β”‚  β€’ WebSocket Support                                            β”‚   β”‚
β”‚  β”‚  β€’ Swagger Documentation (/docs)                                β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                             β”‚                                            β”‚
β”‚                             β”‚ Python Modules                             β”‚
β”‚                             β–Ό                                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  BOINC   β”‚   GDC    β”‚  Neo4j   β”‚ Pipeline β”‚   Utilities         β”‚   β”‚
β”‚  β”‚  Client  β”‚  Client  β”‚   DB     β”‚ Tools    β”‚                     β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚          β”‚          β”‚          β”‚
        β”‚          β”‚          β”‚          β”‚
        β–Ό          β–Ό          β–Ό          β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        DATA & SERVICES LAYER                            β”‚
β”‚                                                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚    Neo4j Graph     β”‚  β”‚   BOINC Server     β”‚  β”‚   GDC Portal     β”‚ β”‚
β”‚  β”‚     Database       β”‚  β”‚   (Distributed)    β”‚  β”‚   (External)     β”‚ β”‚
β”‚  β”‚                    β”‚  β”‚                    β”‚  β”‚                  β”‚ β”‚
β”‚  β”‚ Port: 7687 (Bolt)  β”‚  β”‚ Local/Remote       β”‚  β”‚ api.gdc.cancer   β”‚
β”‚  β”‚       7474 (HTTP)  β”‚  β”‚ Task Processing    β”‚  β”‚ .gov             β”‚ β”‚
β”‚  β”‚                    β”‚  β”‚                    β”‚  β”‚                  β”‚ β”‚
β”‚  β”‚ β€’ Genes            β”‚  β”‚ β€’ Variant Calling  β”‚  β”‚ β€’ TCGA Data      β”‚ β”‚
β”‚  β”‚ β€’ Mutations        β”‚  β”‚ β€’ BLAST Search     β”‚  β”‚ β€’ TARGET Data    β”‚ β”‚
β”‚  β”‚ β€’ Patients         β”‚  β”‚ β€’ Alignment        β”‚  β”‚ β€’ Clinical Data  β”‚ β”‚
β”‚  β”‚ β€’ Cancer Types     β”‚  β”‚ β€’ Annotation       β”‚  β”‚ β€’ Genomic Files  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚  β”‚              Bioinformatics Tools (Local)                          β”‚β”‚
β”‚  β”‚                                                                     β”‚β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚β”‚
β”‚  β”‚  β”‚   FASTQ      β”‚  β”‚    BLAST     β”‚  β”‚   Variant Caller     β”‚    β”‚β”‚
β”‚  β”‚  β”‚  Processor   β”‚  β”‚    Runner    β”‚  β”‚                      β”‚    β”‚β”‚
β”‚  β”‚  β”‚              β”‚  β”‚              β”‚  β”‚                      β”‚    β”‚β”‚
β”‚  β”‚  β”‚ β€’ QC         β”‚  β”‚ β€’ BLASTN     β”‚  β”‚ β€’ VCF Generation     β”‚    β”‚β”‚
β”‚  β”‚  β”‚ β€’ Filtering  β”‚  β”‚ β€’ BLASTP     β”‚  β”‚ β€’ Annotation         β”‚    β”‚β”‚
β”‚  β”‚  β”‚ β€’ Trimming   β”‚  β”‚ β€’ Parsing    β”‚  β”‚ β€’ TMB Calculation    β”‚    β”‚β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚
                             β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       FILE STORAGE                                       β”‚
β”‚                                                                          β”‚
β”‚  data/                                                                   β”‚
β”‚  β”œβ”€β”€ gdc/              # Downloaded GDC files                           β”‚
β”‚  β”œβ”€β”€ boinc/            # BOINC task data                                β”‚
β”‚  β”œβ”€β”€ processed/        # Analysis results                               β”‚
β”‚  β”‚   β”œβ”€β”€ fastq/                                                         β”‚
β”‚  β”‚   β”œβ”€β”€ blast/                                                         β”‚
β”‚  β”‚   └── variants/                                                      β”‚
β”‚  └── cache/            # Temporary files                                β”‚
β”‚                                                                          β”‚
β”‚  logs/                 # Application logs                               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data Flow Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   User       β”‚
β”‚   Browser    β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚ 1. Request
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Dashboard                      β”‚
β”‚   (View Gene/Mutation Data)      β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚ 2. GraphQL Query
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   FastAPI Backend                β”‚
β”‚   - Parse Query                  β”‚
β”‚   - Validate Request             β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚ 3. Cypher Query
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Neo4j Database                 β”‚
β”‚   - Execute Graph Query          β”‚
β”‚   - Traverse Relationships       β”‚
β”‚   - Aggregate Results            β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚ 4. Graph Data
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   GraphQL Resolver               β”‚
β”‚   - Transform Data               β”‚
β”‚   - Format Response              β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚ 5. JSON Response
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Frontend Visualization         β”‚
β”‚   - Render Graph                 β”‚
β”‚   - Display Charts               β”‚
β”‚   - Show Statistics              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

BOINC Task Processing Flow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Submit     β”‚      β”‚   Queue      β”‚      β”‚   Execute    β”‚
β”‚   Task       │─────▢│   Task       │─────▢│   Analysis   β”‚
β”‚              β”‚      β”‚              β”‚      β”‚              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                                                    β”‚
                                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Store      β”‚      β”‚   Import to  β”‚      β”‚   Generate   β”‚
β”‚   Results    │◀─────│   Neo4j      │◀─────│   Results    β”‚
β”‚              β”‚      β”‚              β”‚      β”‚              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Neo4j Graph Schema

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       Neo4j Graph Model                         β”‚
β”‚                                                                  β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                 β”‚
β”‚   β”‚   Gene   β”‚                    β”‚ Mutation β”‚                 β”‚
β”‚   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                 β”‚
β”‚   β”‚ gene_id  │◀───────AFFECTS─────│mut_id    β”‚                 β”‚
β”‚   β”‚ symbol   β”‚                    β”‚ chr      β”‚                 β”‚
β”‚   β”‚ name     β”‚                    β”‚ position β”‚                 β”‚
β”‚   β”‚ chr      β”‚                    β”‚ ref      β”‚                 β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚ alt      β”‚                 β”‚
β”‚                                    β””β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”˜                 β”‚
β”‚                                         β”‚                        β”‚
β”‚                                         β”‚ HAS_MUTATION           β”‚
β”‚                                         β”‚                        β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”                 β”‚
β”‚   β”‚  Cancer  β”‚                    β”‚ Patient  β”‚                 β”‚
β”‚   β”‚   Type   β”‚                    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                 β”‚
β”‚   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                    β”‚patient_idβ”‚                 β”‚
β”‚   β”‚cancer_id β”‚                    β”‚ age      β”‚                 β”‚
β”‚   β”‚ name     │◀──DIAGNOSED_WITH───│ gender   β”‚                 β”‚
β”‚   β”‚ tissue   β”‚                    β”‚ race     β”‚                 β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚ status   β”‚                 β”‚
β”‚                                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                 β”‚
β”‚                                                                  β”‚
β”‚  Relationships:                                                 β”‚
β”‚  β€’ Gene ← AFFECTS ← Mutation                                   β”‚
β”‚  β€’ Patient β†’ HAS_MUTATION β†’ Mutation                           β”‚
β”‚  β€’ Patient β†’ DIAGNOSED_WITH β†’ CancerType                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Technology Stack

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Technology Layers                            β”‚
β”‚                                                                  β”‚
β”‚  Frontend:                                                      β”‚
β”‚  β€’ HTML5, CSS3, JavaScript (ES6+)                              β”‚
β”‚  β€’ D3.js (Graph Visualization)                                 β”‚
β”‚  β€’ Chart.js (Charts & Analytics)                               β”‚
β”‚  β€’ Responsive Design                                            β”‚
β”‚                                                                  β”‚
β”‚  Backend:                                                       β”‚
β”‚  β€’ Python 3.8+                                                 β”‚
β”‚  β€’ FastAPI (Web Framework)                                     β”‚
β”‚  β€’ Uvicorn (ASGI Server)                                       β”‚
β”‚  β€’ Strawberry (GraphQL)                                        β”‚
β”‚                                                                  β”‚
β”‚  Database:                                                      β”‚
β”‚  β€’ Neo4j 5.13 (Graph Database)                                β”‚
β”‚  β€’ Bolt Protocol                                               β”‚
β”‚  β€’ APOC & GDS Plugins                                          β”‚
β”‚                                                                  β”‚
β”‚  Data Processing:                                              β”‚
β”‚  β€’ Biopython (Sequence Analysis)                               β”‚
β”‚  β€’ NumPy & Pandas (Data Manipulation)                         β”‚
β”‚  β€’ BLAST+ (Sequence Alignment)                                 β”‚
β”‚                                                                  β”‚
β”‚  Infrastructure:                                               β”‚
β”‚  β€’ Docker & Docker Compose                                     β”‚
β”‚  β€’ YAML Configuration                                          β”‚
β”‚  β€’ Python Virtual Environments                                 β”‚
β”‚                                                                  β”‚
β”‚  External APIs:                                                β”‚
β”‚  β€’ GDC Portal API (Cancer Data)                               β”‚
β”‚  β€’ BOINC RPC (Distributed Computing)                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Deployment Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Local Development                            β”‚
β”‚                                                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  Host Machine                                            β”‚  β”‚
β”‚  β”‚                                                           β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚  β”‚
β”‚  β”‚  β”‚  Python venv    β”‚         β”‚  Docker Desktop      β”‚   β”‚  β”‚
β”‚  β”‚  β”‚  Port 5000      β”‚         β”‚                      β”‚   β”‚  β”‚
β”‚  β”‚  β”‚                 β”‚         β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚   β”‚  β”‚
β”‚  β”‚  β”‚  β€’ FastAPI      β”‚         β”‚  β”‚  Neo4j         β”‚  β”‚   β”‚  β”‚
β”‚  β”‚  β”‚  β€’ Backend API  │◀───────▢│  β”‚  Port 7474     β”‚  β”‚   β”‚  β”‚
β”‚  β”‚  β”‚  β€’ GraphQL      β”‚         β”‚  β”‚  Port 7687     β”‚  β”‚   β”‚  β”‚
β”‚  β”‚  β”‚  β€’ WebSocket    β”‚         β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚   β”‚  β”‚
β”‚  β”‚  β”‚                 β”‚         β”‚                      β”‚   β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚  β”‚
β”‚  β”‚                                                           β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                                  β”‚
β”‚  Access URLs:                                                  β”‚
β”‚  β€’ http://localhost:5000      - Main Application              β”‚
β”‚  β€’ http://localhost:5000/docs  - API Documentation            β”‚
β”‚  β€’ http://localhost:5000/graphql - GraphQL Playground         β”‚
β”‚  β€’ http://localhost:7474       - Neo4j Browser                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜