- Grid images: photograph component boxes in sub-sections, assemble into one logical grid via perspective warp (homography) - Source image gallery: bulk upload photos separately from grid setup - Grid drafts: persist partial work, resume across sessions - Multi-panel grids: define rows/cols per photo, system computes panel layout; process partially configured grids, edit individual panels - Pan/zoom canvas editor (HiDPI-aware, touch support) for corner alignment - SPA routing with canonical URLs (history.pushState, server catch-all) - Express error visibility: uncaughtException/unhandledRejection handlers and 4-arg error middleware - Original filename stored on source image upload - Various null-safety fixes and CSS [hidden] override fixes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
24 lines
759 B
HTML
24 lines
759 B
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Electronics Inventory</title>
|
|
<link rel="stylesheet" href="/style.css">
|
|
<link rel="preload" as="fetch" href="/templates.html" crossorigin>
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<div class="app-title">Electronics Inventory</div>
|
|
<nav>
|
|
<button class="nav-btn active" data-section="components">Components</button>
|
|
<button class="nav-btn" data-section="inventory">Inventory</button>
|
|
<button class="nav-btn" data-section="fields">Fields</button>
|
|
<button class="nav-btn" data-section="grids">Grids</button>
|
|
</nav>
|
|
</header>
|
|
<main id="main"></main>
|
|
<script type="module" src="/app.mjs"></script>
|
|
</body>
|
|
</html>
|