Help
RSS
API
Feed
Maltego
Contact
Domain > analysis-marina.devcustomprojects.online
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-08-28
104.21.47.65
(
ClassC
)
2026-02-07
3.135.126.69
(
ClassC
)
Port 443
HTTP/1.1 200 OKContent-Length: 26090Content-Type: text/html; charsetutf-8Date: Sat, 07 Feb 2026 12:44:10 GMTEtag: 4fce810ee66f057195969fb73363e8a9Last-Modified: Fri, 03 Oct 2025 16:50:31 GMTServer: uvicorn !DOCTYPE html>html langen>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>Medical Report Analyzer - Working Version/title> link hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css relstylesheet> link hrefhttps://fonts.googleapis.com/css2?familyInter:wght@300;400;500;600;700&displayswap relstylesheet> style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: Inter, sans-serif; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; color: #333; } .container { max-width: 1200px; margin: 0 auto; padding: 20px; } .header { text-align: center; margin-bottom: 40px; color: white; } .header h1 { font-size: 3rem; font-weight: 700; margin-bottom: 10px; text-shadow: 0 4px 20px rgba(0,0,0,0.3); } .header p { font-size: 1.2rem; opacity: 0.9; } .main-content { background: rgba(255, 255, 255, 0.95); border-radius: 20px; box-shadow: 0 25px 80px rgba(0,0,0,0.15); backdrop-filter: blur(20px); overflow: hidden; } .upload-section { padding: 60px 40px; text-align: center; background: linear-gradient(135deg, #f8faff 0%, #e8f4f8 100%); } .upload-zone { border: 3px dashed #667eea; border-radius: 20px; padding: 60px 30px; transition: all 0.3s ease; cursor: pointer; background: white; } .upload-zone:hover { border-color: #764ba2; transform: translateY(-5px); box-shadow: 0 20px 40px rgba(102, 126, 234, 0.2); } .upload-zone.dragover { background: linear-gradient(135deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.1)); border-color: #764ba2; transform: scale(1.02); } .upload-icon { font-size: 4rem; background: linear-gradient(135deg, #667eea, #764ba2); -webkit-background-clip: text; -webkit-text-fill-color: transparent; margin-bottom: 20px; } .upload-text { font-size: 1.5rem; font-weight: 600; margin-bottom: 10px; color: #333; } .upload-subtext { color: #666; margin-bottom: 25px; font-size: 1rem; } .upload-btn { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 15px 35px; border: none; border-radius: 50px; font-size: 1.1rem; font-weight: 600; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 10px 30px rgba(102, 126, 234, 0.3); } .upload-btn:hover { transform: translateY(-3px); box-shadow: 0 15px 40px rgba(102, 126, 234, 0.4); } .file-input { display: none; } .loading { display: none; padding: 60px 40px; text-align: center; background: linear-gradient(135deg, #f8faff 0%, #e8f4f8 100%); } .spinner { width: 50px; height: 50px; border: 4px solid #f3f3f3; border-top: 4px solid #667eea; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto 20px; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .loading h3 { font-size: 1.3rem; margin-bottom: 10px; color: #667eea; } .results { display: none; } .results-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; text-align: center; } .results-header h2 { font-size: 2rem; margin-bottom: 5px; } .results-content { padding: 40px; } .result-section { margin-bottom: 30px; background: #f8faff; border-radius: 15px; padding: 25px; border-left: 5px solid; transition: all 0.3s ease; } .result-section:hover { transform: translateY(-3px); box-shadow: 0 10px 30px rgba(0,0,0,0.1); } .patient-info { border-left-color: #28a745; } .test-results { border-left-color: #667eea; } .health-status { border-left-color: #17a2b8; } .recommendations { border-left-color: #ffc107; } .result-title { font-size: 1.4rem; font-weight: 700; margin-bottom: 20px; display: flex; align-items: center; color: #333; } .result-title i { margin-right: 12px; width: 25px; height: 25px; display: flex; align-items: center; justify-content: center; border-radius: 50%; font-size: 1rem; color: white; } .patient-info .result-title i { background: #28a745; } .test-results .result-title i { background: #667eea; } .health-status .result-title i { background: #17a2b8; } .recommendations .result-title i { background: #ffc107; } .info-item { background: white; padding: 15px; margin: 10px 0; border-radius: 8px; border-left: 3px solid #ddd; } .info-item strong { color: #333; display: block; margin-bottom: 5px; } .status-badge { background: linear-gradient(135deg, #28a745, #20c997); color: white; padding: 5px 15px; border-radius: 20px; font-size: 0.9rem; font-weight: 600; display: inline-block; } .test-list { list-style: none; padding: 0; } .test-list li { background: white; padding: 12px 15px; margin: 8px 0; border-radius: 8px; border-left: 3px solid #28a745; font-family: Courier New, monospace; font-size: 0.9rem; } .test-list li.abnormal { border-left-color: #dc3545; background: #fff5f5; } .new-analysis-btn { background: linear-gradient(135deg, #28a745 0%, #20c997 100%); color: white; padding: 15px 30px; border: none; border-radius: 50px; font-size: 1.1rem; font-weight: 600; cursor: pointer; margin-top: 30px; transition: all 0.3s ease; box-shadow: 0 10px 30px rgba(40, 167, 69, 0.3); } .new-analysis-btn:hover { transform: translateY(-3px); box-shadow: 0 15px 40px rgba(40, 167, 69, 0.4); } .api-status { position: fixed; top: 20px; right: 20px; background: rgba(255, 255, 255, 0.9); padding: 10px 15px; border-radius: 20px; box-shadow: 0 5px 20px rgba(0,0,0,0.1); backdrop-filter: blur(10px); z-index: 1000; font-size: 0.9rem; } .api-status.online { border-left: 4px solid #28a745; } .api-status.offline { border-left: 4px solid #dc3545; } .error-notification { position: fixed; top: 80px; right: 20px; background: linear-gradient(135deg, #dc3545, #c82333); color: white; padding: 20px; border-radius: 10px; box-shadow: 0 10px 30px rgba(220, 53, 69, 0.3); z-index: 1001; max-width: 350px; animation: slideInRight 0.4s ease-out; } @keyframes slideInRight { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* Mobile Responsive */ @media (max-width: 768px) { .container { padding: 15px; } .header h1 { font-size: 2.2rem; } .upload-section { padding: 40px 20px; } .upload-zone { padding: 40px 20px; } .results-content { padding: 25px 20px; } .result-section { padding: 20px 15px; } } /style>/head>body> !-- API Status --> div classapi-status idapiStatus> i classfas fa-circle idstatusIcon>/i> span idstatusText>Checking.../span> /div> div classcontainer> !-- Header --> div classheader> h1>i classfas fa-heartbeat>/i> Medical Report Analyzer/h1> p>Simple, Accurate AI Analysis/p> /div> !-- Main Content --> div classmain-content> !-- Upload Section --> div classupload-section iduploadSection> div classupload-zone iduploadZone> div classupload-icon> i classfas fa-cloud-upload-alt>/i> /div> div classupload-text>Upload your PDF medical report/div> div classupload-subtext>PDF files up to 10MB/div> button classupload-btn iduploadButton> i classfas fa-file-upload>/i> Choose PDF File /button> input typefile idfileInput classfile-input accept.pdf onchangehandleFileSelect(event)> /div> /div> !-- Loading Section --> div classloading idloadingSection> div classspinner>/div> h3>Analyzing your report.../h3> p>Please wait while our AI processes your data/p> /div> !-- Results Section --> div classresults idresultsSection> div classresults-header> h2>i classfas fa-check-circle>/i> Analysis Complete/h2> p>Your medical report has been analyzed successfully/p> /div> div classresults-content> !-- Patient Info --> div classresult-section patient-info> div classresult-title> i classfas fa-user>/i> Patient Information /div> div idpatientInfoContent>/div> /div> !-- Test Results --> div classresult-section test-results> div classresult-title> i classfas fa-flask>/i> Test Results /div> div idtestResultsContent>/div> /div> !-- Health Status --> div classresult-section health-status> div classresult-title> i classfas fa-heart>/i> Health Status /div> div idhealthStatusContent>/div> /div> !-- Recommendations --> div classresult-section recommendations> div classresult-title> i classfas fa-lightbulb>/i> Recommendations /div> div idrecommendationsContent>/div> /div> div styletext-align: center;> button classnew-analysis-btn onclickresetAnalysis()> i classfas fa-plus>/i> Analyze Another Report /button> /div> /div> /div> /div> /div> script> // Configuration - CHANGE THIS TO YOUR BACKEND URL const API_BASE_URL https://analysis-marina.devcustomprojects.online; // DOM Elements const uploadZone document.getElementById(uploadZone); const fileInput document.getElementById(fileInput); const uploadSection document.getElementById(uploadSection); const loadingSection document.getElementById(loadingSection); const resultsSection document.getElementById(resultsSection); const apiStatus document.getElementById(apiStatus); const statusIcon document.getElementById(statusIcon); const statusText document.getElementById(statusText); // Initialize document.addEventListener(DOMContentLoaded, function() { console.log(🚀 Medical Analyzer Frontend Loaded); checkApiStatus(); setupEventListeners(); }); // Setup Event Listeners function setupEventListeners() { // Click events uploadZone.addEventListener(click, () > fileInput.click()); document.getElementById(uploadButton).addEventListener(click, () > fileInput.click()); // Drag and drop events dragenter, dragover, dragleave, drop.forEach(eventName > { uploadZone.addEventListener(eventName, preventDefaults, false); }); dragenter, dragover.forEach(eventName > { uploadZone.addEventListener(eventName, () > uploadZone.classList.add(dragover), false); }); dragleave, drop.forEach(eventName > { uploadZone.addEventListener(eventName, () > uploadZone.classList.remove(dragover), false); }); uploadZone.addEventListener(drop, handleDrop, false); function preventDefaults(e) { e.preventDefault(); e.stopPropagation(); } function handleDrop(e) { const files e.dataTransfer.files; if (files.length > 0) { handleFile(files0); } } } // Check API Status async function checkApiStatus() { try { console.log(🔍 Checking API status...); const response await fetch(`${API_BASE_URL}/health`); if (response.ok) { const data await response.json(); console.log(✅ API Status:, data); apiStatus.className api-status online; statusIcon.className fas fa-circle; statusText.textContent API Online; } else { throw new Error(`API returned ${response.status}`); } } catch (error) { console.error(❌ API Status Check Failed:, error); apiStatus.className api-status offline; statusIcon.className fas fa-circle; statusText.textContent API Offline; } } // Handle File Selection function handleFileSelect(event) { const file event.target.files0; if (file) { handleFile(file); } } // Handle File Upload and Analysis async function handleFile(file) { console.log(📁 File selected:, file.name, Size:, file.size, Type:, file.type); // Validate file if (!file.name.toLowerCase().endsWith(.pdf) && file.type ! application/pdf) { showError(Please select a PDF file only); return; } if (file.size > 10 * 1024 * 1024) { showError(File size must be less than 10MB); return; } if (file.size 0) { showError(File appears to be empty); return; } // Show loading showLoading(); try { // Prepare form data const formData new FormData(); formData.append(file, file); console.log(📤 Uploading to:, `${API_BASE_URL}/analyze-report`); // Upload and analyze const response await fetch(`${API_BASE_URL}/analyze-report`, { method: POST, body: formData }); console.log(📥 Response status:, response.status); if (!response.ok) { let errorMessage `Server error (${response.status})`; try { const errorData await response.json(); errorMessage errorData.error || errorData.detail || errorMessage; } catch (e) { console.error(Error parsing error response:, e); } throw new Error(errorMessage); } const result await response.json(); console.log(📊 Analysis result:, result); // Check for success - FIXED to match backend response if (result.success true) { displayResults(result.analysis, file.name); } else { throw new Error(result.error || Analysis failed); } } catch (error) { console.error(❌ Analysis error:, error); showError(Analysis failed: + error.message); resetToUpload(); } } // Show Loading State function showLoading() { uploadSection.style.display none; loadingSection.style.display block; resultsSection.style.display none; } // Display Results - FIXED to match backend data structure function displayResults(analysis, filename) { console.log(📋 Displaying results:, analysis); loadingSection.style.display none; resultsSection.style.display block; // Patient Information const patientInfo analysis.patient_info || {}; document.getElementById(patientInfoContent).innerHTML ` div classinfo-item> strong>Name:/strong> ${patientInfo.name || Not found} /div> div classinfo-item> strong>Age:/strong> ${patientInfo.age || Not found} /div> div classinfo-item> strong>Gender:/strong> ${patientInfo.gender || Not found} /div> div classinfo-item> strong>Report Date:/strong> ${patientInfo.report_date || Not found} /div> div classinfo-item> strong>Uploaded File:/strong> ${filename} /div> `; // Test Results const results analysis.results || {}; let testResultsHTML ` div classinfo-item> strong>Test Type:/strong> ${results.test_type || Medical Report} /div> `; // Normal values if (results.normal_values && results.normal_values.length > 0) { testResultsHTML + ` div classinfo-item> strong>Normal Values:/strong> ul classtest-list> ${results.normal_values.map(test > `li>${test}/li>`).join()} /ul> /div> `; } // Abnormal values if (results.abnormal_values && results.abnormal_values.length > 0) { testResultsHTML + ` div classinfo-item> strong>Abnormal Values:/strong> ul classtest-list> ${results.abnormal_values.map(test > `li classabnormal>${test}/li>`).join()} /ul> /div> `; } document.getElementById(testResultsContent).innerHTML testResultsHTML; // Health Status document.getElementById(healthStatusContent).innerHTML ` div classinfo-item> strong>Overall Status:/strong> span classstatus-badge>${results.overall_status || Analysis Complete}/span> /div> div classinfo-item> strong>Summary:/strong> ${results.overall_status Excellent - All normal ? All your lab values are within normal ranges. Great job maintaining your health! : Some values need attention. Please review the recommendations below.} /div> `; // Recommendations document.getElementById(recommendationsContent).innerHTML ` div classinfo-item> ${analysis.recommendations || Please consult your healthcare provider for personalized recommendations.} /div> `; // Add medical disclaimer const disclaimer document.createElement(div); disclaimer.innerHTML ` div stylebackground: #fff3cd; border: 1px solid #ffeaa7; border-radius: 10px; padding: 20px; margin-top: 30px; text-align: center;> i classfas fa-exclamation-triangle stylecolor: #856404; margin-right: 10px;>/i> strong stylecolor: #856404;>Medical Disclaimer:/strong> p stylemargin-top: 10px; color: #856404; font-size: 0.9rem;> This AI analysis is for informational purposes only. Always consult with qualified healthcare professionals for proper medical diagnosis and treatment decisions. /p> /div> `; document.querySelector(.results-content).appendChild(disclaimer); } // Reset to Upload State function resetToUpload() { uploadSection.style.display block; loadingSection.style.display none; resultsSection.style.display none; } // Reset Analysis function resetAnalysis() { fileInput.value ; // Remove disclaimer if exists const disclaimer document.querySelector(.results-content > div:last-child); if (disclaimer && disclaimer.style.background rgb(255, 243, 205)) { disclaimer.remove(); } resetToUpload(); } // Show Error Notification function showError(message) { const errorDiv document.createElement(div); errorDiv.className error-notification; errorDiv.innerHTML ` div styledisplay: flex; align-items: center;> i classfas fa-exclamation-circle stylemargin-right: 10px; font-size: 1.2rem;>/i> div> strong>Error/strong>br> span stylefont-size: 0.9rem;>${message}/span> /div> /div> `; document.body.appendChild(errorDiv); // Auto remove after 5 seconds setTimeout(() > { if (errorDiv.parentNode) { errorDiv.remove(); } }, 5000); } // Check API status periodically setInterval(checkApiStatus, 30000); /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]