Biopesticide-AI / bioai /web /static /index.html
flvcko's picture
Biopesticide-AI: AMD Hackathon Unicorn Track submission
914512c
Raw
History Blame Contribute Delete
17 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Biopesticide-AI | dsRNA Biopesticide Design Platform</title>
<meta name="description" content="Design species-specific dsRNA biopesticides in minutes. Local Llama 3.2 3B + PyTorch + 14-species safety panel.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700;9..144,800;9..144,900&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
<link rel="stylesheet" href="/static/styles.css">
</head>
<body>
<header class="site-header">
<div class="header-inner">
<a href="/" class="logo">
<span class="logo-mark"></span>
<span class="logo-text">Biopesticide<span class="logo-accent">-AI</span></span>
</a>
<nav class="header-nav">
<a href="#design">Design</a>
<a href="#about">About</a>
<a href="https://github.com" target="_blank" rel="noopener">GitHub</a>
</nav>
<div class="header-status" id="header-status">
<span class="status-dot" id="status-dot"></span>
<span class="status-text" id="status-text">Initializing...</span>
</div>
</div>
</header>
<section class="hero">
<div class="hero-inner">
<div class="hero-badge">
<span class="hero-badge-dot"></span>
AMD Developer Hackathon &middot; Unicorn Track
</div>
<h1 class="hero-title">
Designing the future of<br>
<span class="hero-title-accent">biopesticides</span>
</h1>
<p class="hero-subtitle">
An AI pipeline that designs ranked, safety-checked dsRNA candidates &mdash; in minutes, not months.
Powered by local Llama 3.2 3B, PyTorch, and a 14-species safety panel.
</p>
<div class="hero-metrics">
<div class="hero-metric"><div class="hero-metric-num">7</div><div class="hero-metric-lbl">Pest targets</div></div>
<div class="hero-metric-sep"></div>
<div class="hero-metric"><div class="hero-metric-num">14</div><div class="hero-metric-lbl">Safety species</div></div>
<div class="hero-metric-sep"></div>
<div class="hero-metric"><div class="hero-metric-num">~4 min</div><div class="hero-metric-lbl">Design loop</div></div>
<div class="hero-metric-sep"></div>
<div class="hero-metric"><div class="hero-metric-num">$0</div><div class="hero-metric-lbl">Per design</div></div>
<div class="hero-metric-sep"></div>
<div class="hero-metric"><div class="hero-metric-num">100%</div><div class="hero-metric-lbl">Local compute</div></div>
</div>
</div>
<div class="hero-bg-pattern"></div>
</section>
<section class="design-section" id="design">
<div class="container">
<div class="section-header">
<h2 class="section-title">Select your pest target</h2>
<p class="section-subtitle">Click a pest card to design dsRNA candidates. The pipeline runs immediately &mdash; no waiting for LLM parsing.</p>
</div>
<!-- Pest selector grid -->
<div class="pest-grid" id="pest-grid">
<button class="pest-card" data-species="nilaparvata_lugens" data-crop="Rice" data-prompt="Brown planthopper infestation in rice paddy in Tamil Nadu. Severity moderate.">
<div class="pest-card-icon pest-icon-rice"></div>
<div class="pest-card-body">
<div class="pest-card-name">Brown planthopper</div>
<div class="pest-card-latin">Nilaparvata lugens</div>
<div class="pest-card-crop">Rice</div>
</div>
</button>
<button class="pest-card" data-species="spodoptera_frugiperda" data-crop="Maize" data-prompt="Fall armyworm outbreak in maize field in Karnataka. Severe damage.">
<div class="pest-card-icon pest-icon-maize"></div>
<div class="pest-card-body">
<div class="pest-card-name">Fall armyworm</div>
<div class="pest-card-latin">Spodoptera frugiperda</div>
<div class="pest-card-crop">Maize</div>
</div>
</button>
<button class="pest-card" data-species="schistocerca_gregaria" data-crop="Wheat" data-prompt="Desert locust swarm in wheat fields of Rajasthan. Need rapid response.">
<div class="pest-card-icon pest-icon-wheat"></div>
<div class="pest-card-body">
<div class="pest-card-name">Desert locust</div>
<div class="pest-card-latin">Schistocerca gregaria</div>
<div class="pest-card-crop">Wheat</div>
</div>
</button>
<button class="pest-card" data-species="chilo_suppressalis" data-crop="Rice" data-prompt="Striped stem borer infestation in rice field. Moderate severity.">
<div class="pest-card-icon pest-icon-rice"></div>
<div class="pest-card-body">
<div class="pest-card-name">Striped stem borer</div>
<div class="pest-card-latin">Chilo suppressalis</div>
<div class="pest-card-crop">Rice</div>
</div>
</button>
<button class="pest-card" data-species="myzus_persicae" data-crop="Vegetables" data-prompt="Peach-potato aphid outbreak in vegetable garden. Organic farm, need bee-safe solution.">
<div class="pest-card-icon pest-icon-veg"></div>
<div class="pest-card-body">
<div class="pest-card-name">Peach-potato aphid</div>
<div class="pest-card-latin">Myzus persicae</div>
<div class="pest-card-crop">Vegetables</div>
</div>
</button>
<button class="pest-card" data-species="leptinotarsa_decemlineata" data-crop="Potato" data-prompt="Colorado potato beetle devastating potato crop in Himachal Pradesh. Resistance to neonicotinoids suspected.">
<div class="pest-card-icon pest-icon-potato"></div>
<div class="pest-card-body">
<div class="pest-card-name">Colorado potato beetle</div>
<div class="pest-card-latin">Leptinotarsa decemlineata</div>
<div class="pest-card-crop">Potato</div>
</div>
</button>
<button class="pest-card" data-species="bemisia_tabaci" data-crop="Tomato" data-prompt="Tobacco whitefly infestation in tomato greenhouse in Maharashtra. Mild severity but persistent.">
<div class="pest-card-icon pest-icon-tomato"></div>
<div class="pest-card-body">
<div class="pest-card-name">Tobacco whitefly</div>
<div class="pest-card-latin">Bemisia tabaci</div>
<div class="pest-card-crop">Tomato</div>
</div>
</button>
<button class="pest-card pest-card-custom" id="custom-input-btn">
<div class="pest-card-icon pest-icon-custom">+</div>
<div class="pest-card-body">
<div class="pest-card-name">Describe in your own words</div>
<div class="pest-card-latin">Natural language input</div>
<div class="pest-card-crop">Any crop</div>
</div>
</button>
</div>
<!-- Custom input (hidden by default, revealed when "custom" card is clicked) -->
<div class="input-card" id="custom-input-card" style="display: none;">
<textarea id="pest-report" class="pest-input" placeholder="e.g. 'Brown planthopper infestation in my rice paddy near Coimbatore, Tamil Nadu. Severity moderate, second generation this season.'" rows="4"></textarea>
<div class="input-footer">
<div class="examples">
<span class="examples-label">Try:</span>
<button class="example-chip" data-text="Brown planthopper infestation in my rice paddy near Coimbatore, Tamil Nadu. Severity moderate, second generation this season.">Brown planthopper</button>
<button class="example-chip" data-text="Fall armyworm outbreak in maize field in Karnataka. Severe damage on 30% of plants, spreading fast.">Fall armyworm</button>
<button class="example-chip" data-text="Desert locust swarm reported in wheat fields of Rajasthan. Need rapid response biopesticide design.">Desert locust</button>
</div>
<div class="input-actions">
<label class="topk-control">
<span class="topk-label">Top-K</span>
<input type="number" id="top-k" value="10" min="1" max="20" class="topk-input">
</label>
<button id="design-btn" class="design-btn">
<span class="design-btn-text">Design dsRNA candidates</span>
<span class="design-btn-arrow">&rarr;</span>
</button>
</div>
</div>
</div>
<!-- Top-K control (visible in card mode too) -->
<div class="card-mode-controls" id="card-mode-controls">
<label class="topk-control">
<span class="topk-label">Top-K candidates</span>
<input type="number" id="top-k-card" value="10" min="1" max="20" class="topk-input">
</label>
</div>
<!-- Loading state -->
<div class="loading-state" id="loading-state" style="display: none;">
<div class="loading-spinner"></div>
<p class="loading-text">Running design pipeline...</p>
<p class="loading-subtext" id="loading-subtext">Loading pest transcripts...</p>
</div>
<!-- Error state -->
<div class="error-state" id="error-state" style="display: none;">
<p class="error-text" id="error-text"></p>
</div>
</div>
</section>
<section class="results-section" id="results-section" style="display: none;">
<div class="container">
<div class="stats-strip" id="stats-strip"></div>
<div class="result-block">
<h3 class="block-title">Parsed pest report</h3>
<div class="pest-report-card" id="pest-report-card"></div>
</div>
<div class="result-block">
<h3 class="block-title">Top candidates</h3>
<div class="candidates-grid" id="candidates-grid"></div>
</div>
<div class="result-block">
<div class="tabs">
<button class="tab active" data-tab="analytics">Analytics</button>
<button class="tab" data-tab="simulation">Wet-lab simulation</button>
<button class="tab" data-tab="safety">Safety cards</button>
<button class="tab" data-tab="regulatory">Regulatory memo</button>
<button class="tab" data-tab="export">Export</button>
</div>
<div class="tab-content active" id="tab-analytics">
<div class="chart-grid">
<div class="chart-card">
<h4 class="chart-title">Efficacy scores (0&ndash;1 scale)</h4>
<div class="chart-container"><canvas id="efficacy-chart"></canvas></div>
</div>
<div class="chart-card">
<h4 class="chart-title">Environmental half-life (hours)</h4>
<div class="chart-container"><canvas id="halflife-chart"></canvas></div>
</div>
</div>
<div class="chart-card chart-card-wide">
<h4 class="chart-title">Off-target risk heatmap (candidates &times; 14 species)</h4>
<div class="chart-container chart-container-tall" id="heatmap-container"></div>
</div>
</div>
<div class="tab-content" id="tab-simulation">
<div class="sim-intro">
<h4 class="sim-title">Virtual wet-lab validation</h4>
<p class="sim-desc">Simulates the cellular knockdown pipeline: dsRNA delivery &rarr; uptake &rarr; Dicer processing &rarr; RISC loading &rarr; target mRNA cleavage &rarr; phenotypic response. Runs 1000 Monte Carlo trials per candidate with noise at each step.</p>
<button id="simulate-btn" class="design-btn sim-btn">Run wet-lab simulation</button>
</div>
<div id="simulation-results" class="sim-results"></div>
</div>
<div class="tab-content" id="tab-safety">
<div id="safety-cards-content" class="safety-cards-content"></div>
</div>
<div class="tab-content" id="tab-regulatory">
<div id="regulatory-memo-content" class="regulatory-memo-content"></div>
</div>
<div class="tab-content" id="tab-export">
<div class="export-section">
<div class="export-card">
<h4 class="export-title">CSV export</h4>
<p class="export-desc">Download the top candidates as a CSV file.</p>
<button class="export-btn" id="export-csv-btn">Download CSV</button>
</div>
<div class="export-card">
<h4 class="export-title">JSON export</h4>
<p class="export-desc">Download the full design result as JSON.</p>
<button class="export-btn" id="export-json-btn">Download JSON</button>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="about-section" id="about">
<div class="container">
<h2 class="section-title">How it works</h2>
<div class="pipeline-grid">
<div class="pipeline-step"><div class="pipeline-num">01</div><h4>Select</h4><p>Click a pest target card (7 species supported) or describe the problem in natural language.</p></div>
<div class="pipeline-step"><div class="pipeline-num">02</div><h4>Tile &amp; Dice</h4><p>PyTorch backend tiles pest transcripts into 200-nt dsRNA precursors, then dices them into 21-nt siRNAs.</p></div>
<div class="pipeline-step"><div class="pipeline-num">03</div><h4>Score</h4><p>Dilated CNN scores each siRNA for efficacy. K-mer index checks off-target risk against 14 species.</p></div>
<div class="pipeline-step"><div class="pipeline-num">04</div><h4>Predict</h4><p>Physics-Informed Neural Network predicts environmental half-life based on sequence and field conditions.</p></div>
<div class="pipeline-step"><div class="pipeline-num">05</div><h4>Rank</h4><p>Learned ranker combines efficacy, safety, and fate into a final score. Top candidates are selected.</p></div>
<div class="pipeline-step"><div class="pipeline-num">06</div><h4>Simulate</h4><p>Virtual wet-lab runs 1000 Monte Carlo trials per candidate, modeling delivery, uptake, Dicer, RISC, and knockdown.</p></div>
</div>
</div>
</section>
<footer class="site-footer">
<div class="container">
<p>Built for the AMD Developer Hackathon Unicorn Track &middot; PyTorch + Ollama Llama 3.2 3B &middot; 14-species safety panel &middot; MIT licensed</p>
</div>
</footer>
<script src="/static/app.js"></script>
</body>
</html>