Spaces:
Runtime error
Runtime error
| <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 — 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 & 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 & 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 β</button> | |
| <button class="ghost-btn" id="historyBtn">past cases β</button> | |
| <div class="sources-line">searches OPENALEX Β· ARXIV Β· CROSSREF Β· SEMANTIC SCHOLAR | |
| Β· WIKIPEDIA Β· GUTENBERG Β· INTERNET ARCHIVE + 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 & parsing</li> | |
| <li data-key="understood">Deep understanding</li> | |
| <li data-key="searching">World-literature search</li> | |
| <li data-key="graph">Citation-graph & 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 forensics</a> | |
| <a href="#sec-coverage">Coverage</a> | |
| </div> | |
| <a class="ghost-btn rn-pdf" id="rnPdf" download>PDF β</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 & 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 β</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 β</a> | |
| <button class="ghost-btn" id="newCaseBtn">open a new case β</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> | |