Plaiglab / webapp /static /index.html
SanidhyaDhangar's picture
PlaigLab β€” Hugging Face Space (Docker) clean deploy
ebebfe8
Raw
History Blame Contribute Delete
9.19 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>PlaigLab β€” Forensic Document Analysis</title>
<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,300;9..144,500;9..144,700;9..144,900&family=Spectral:ital,wght@0,300;0,400;0,600;1,400&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="grain"></div>
<header class="masthead">
<div class="case-no" id="caseNo">CASE NΒΊ β€”</div>
<h1>Plaig<span class="amp">Β·</span>Lab</h1>
<p class="tagline">FORENSIC DOCUMENT ANALYSIS &mdash; PLAGIARISM Β· SIMILARITY Β· AI AUTHORSHIP</p>
<p class="byline">BY ADITYA SIKARWAR Β· SANIDHYA DHANGAR Β· DEEPAK GUPTA</p>
<div class="rule-double"></div>
</header>
<main>
<!-- ====================== UPLOAD VIEW ====================== -->
<section id="view-upload" class="view">
<div class="dropzone" id="dropzone" tabindex="0" role="button"
aria-label="Upload a document for analysis">
<svg class="bag-icon" viewBox="0 0 64 64" aria-hidden="true">
<rect x="10" y="14" width="44" height="42" rx="3" fill="none" stroke="currentColor" stroke-width="2.5"/>
<path d="M22 14 v-4 a10 10 0 0 1 20 0 v4" fill="none" stroke="currentColor" stroke-width="2.5"/>
<path d="M20 30 h24 M20 38 h24 M20 46 h16" stroke="currentColor" stroke-width="2" stroke-dasharray="2 3"/>
</svg>
<div class="dz-title">Submit evidence</div>
<div class="dz-sub">Drag a <b>PDF</b>, <b>DOCX</b> or <b>TXT</b> here, or click to browse.<br>
The document will be investigated against world literature in real time.</div>
<input type="file" id="fileInput" accept=".pdf,.txt,.docx" hidden>
</div>
<label class="depth-toggle">
<input type="checkbox" id="deepToggle" checked>
<span><b>DEEP HISTORY SWEEP</b> β€” walk the citation graph &amp; the topic's
all-time canon, plus the web/books tier (Wikipedia, Gutenberg, Internet
Archive), scrape up to 14 full texts (slower, exhaustive)</span>
</label>
<label class="depth-toggle max-toggle">
<input type="checkbox" id="maxToggle">
<span><b>MAX β€” READ EVERYTHING</b> β€” open &amp; read every open-access
candidate's FULL text (not just a shortlist) and run the AI ensemble on
each source paper too. Most exhaustive; ~5–10 min. Paywalled bodies stay
abstract + shadow-text (legal).</span>
</label>
<div class="upload-foot">
<button class="ghost-btn" id="sampleBtn">run the specimen case&nbsp;β†’</button>
<button class="ghost-btn" id="historyBtn">past cases&nbsp;β†’</button>
<div class="sources-line">searches OPENALEX Β· ARXIV Β· CROSSREF Β· SEMANTIC SCHOLAR
Β· WIKIPEDIA Β· GUTENBERG Β· INTERNET ARCHIVE &nbsp;+&nbsp; deep-scrapes full texts</div>
</div>
<div class="case-history" id="caseHistory" hidden></div>
</section>
<!-- ====================== PROGRESS VIEW ====================== -->
<section id="view-progress" class="view" hidden>
<div class="invest-head">
<div class="blink-dot"></div>
<h2>Investigation in progress</h2>
<div class="invest-file" id="investFile"></div>
</div>
<ol class="custody" id="custody">
<li data-key="extract">Extraction &amp; parsing</li>
<li data-key="understood">Deep understanding</li>
<li data-key="searching">World-literature search</li>
<li data-key="graph">Citation-graph &amp; canon sweep</li>
<li data-key="scraping">Deep PDF scraping</li>
<li data-key="comparison">Multi-level comparison</li>
<li data-key="ai-writing">AI authorship scan</li>
<li data-key="report">Report assembly</li>
</ol>
<div class="console" id="console" aria-live="polite"></div>
</section>
<!-- ====================== REPORT VIEW ====================== -->
<section id="view-report" class="view" hidden>
<div class="report-head">
<div>
<div class="exhibit-label">FINDINGS β€” <span id="rptCase"></span></div>
<h2 id="rptTitle" class="rpt-title"></h2>
<div class="rpt-meta" id="rptMeta"></div>
</div>
<div class="stamp" id="stamp"><span id="stampText"></span></div>
</div>
<nav class="report-nav" id="reportNav" aria-label="Report sections">
<span class="rn-verdict" id="rnVerdict" aria-live="polite"></span>
<div class="rn-links">
<a href="#sec-dials">Scores</a>
<a href="#sec-sources">Exhibits</a>
<a href="#sec-heatmap">Heatmap</a>
<a href="#sec-ai">AI&nbsp;forensics</a>
<a href="#sec-coverage">Coverage</a>
</div>
<a class="ghost-btn rn-pdf" id="rnPdf" download>PDF&nbsp;↓</a>
</nav>
<div class="verdict-basis" id="verdictBasis"></div>
<div class="evasion-panel" id="evasionPanel" hidden></div>
<div class="llm-summary" id="llmSummary" hidden></div>
<div class="fraud-panel" id="fraudPanel" hidden></div>
<div class="figure-panel" id="figurePanel" hidden></div>
<div class="dials" id="sec-dials">
<div class="dial-card">
<div class="dial-label">SIMILARITY INDEX</div>
<svg viewBox="0 0 200 120" class="dial">
<path class="dial-track" d="M20 110 A 80 80 0 0 1 180 110"/>
<path class="dial-fill" id="simArc" d="M20 110 A 80 80 0 0 1 180 110"/>
<line class="needle" id="simNeedle" x1="100" y1="110" x2="100" y2="38"/>
<circle cx="100" cy="110" r="5" class="needle-hub"/>
</svg>
<div class="dial-value"><span id="simVal">0</span><small>%</small></div>
<div class="dial-sub" id="simSub"></div>
</div>
<div class="dial-card">
<div class="dial-label">AI AUTHORSHIP SIGNAL</div>
<svg viewBox="0 0 200 120" class="dial">
<path class="dial-track" d="M20 110 A 80 80 0 0 1 180 110"/>
<path class="dial-fill ai" id="aiArc" d="M20 110 A 80 80 0 0 1 180 110"/>
<line class="needle" id="aiNeedle" x1="100" y1="110" x2="100" y2="38"/>
<circle cx="100" cy="110" r="5" class="needle-hub"/>
</svg>
<div class="dial-value"><span id="aiVal">0</span><small>%</small></div>
<div class="dial-sub" id="aiSub"></div>
</div>
<div class="stat-stack" id="statStack"></div>
</div>
<h3 class="sec-head" id="sec-sources">Exhibits β€” matched sources</h3>
<div id="sourceList" class="source-list"></div>
<div id="nearBlock" hidden>
<h3 class="sec-head">Near misses β€” below threshold, shown so nothing is hidden</h3>
<div id="nearMisses" class="near-misses"></div>
</div>
<h3 class="sec-head" id="sec-heatmap">Manuscript heatmap</h3>
<div class="legend">
<span><i class="sw sw-exact"></i>verbatim copy (5-gram proof)</span>
<span><i class="sw sw-high"></i>strong match β‰₯ 72%</span>
<span><i class="sw sw-mid"></i>partial / paraphrase 55–72%</span>
<span><i class="sw sw-sem"></i>semantic match (meaning-level)</span>
<span><i class="sw sw-none"></i>no source found</span>
</div>
<article class="manuscript" id="manuscript"></article>
<h3 class="sec-head" id="sec-ai">AI authorship β€” section strip</h3>
<div class="ai-strip" id="aiStrip"></div>
<div class="ai-strip-labels" id="aiStripLabels"></div>
<h3 class="sec-head">AI detector ensemble</h3>
<div class="ai-detectors" id="aiDetectors"></div>
<div class="lm-metrics" id="lmMetrics"></div>
<div class="fusion-note" id="fusionNote"></div>
<div id="seamBlock" hidden>
<h3 class="sec-head">Style seam map β€” where the writing style changes</h3>
<div class="seam-strip" id="seamStrip"></div>
<div class="seam-legend" id="seamLegend"></div>
</div>
<details class="warrants coverage-block" id="sec-coverage">
<summary>COVERAGE β€” everything that was searched, screened &amp; scraped</summary>
<div class="cov-chips" id="covChips"></div>
<div class="cov-pdfs" id="covPdfs"></div>
<div class="cov-tablewrap">
<table class="cov-table" id="covTable"></table>
</div>
<a class="ghost-btn cov-dl" id="manifestBtn" download>download full manifest JSON&nbsp;↓</a>
</details>
<details class="warrants">
<summary>Search warrants issued (queries used)</summary>
<div id="queryList"></div>
</details>
<div class="report-foot">
<a class="ghost-btn" id="pdfBtn" download>download PDF report&nbsp;↓</a>
<button class="ghost-btn" id="newCaseBtn">open a new case&nbsp;β†’</button>
</div>
</section>
</main>
<footer class="colophon">
PlaigLab Β· winnowing fingerprints Β· federated academic search Β· DQN-planned
investigation Β· causal intent SCM β€” handle results as investigative leads,
not verdicts.
<span class="credits">Built by Aditya Sikarwar Β· Sanidhya Dhangar Β· Deepak Gupta</span>
</footer>
<script src="app.js"></script>
</body>
</html>