Last Updated: June 24, 2025 Audience: Developers tasked with maintaining, customizing, or troubleshooting the application.
The ADAM QC Viewer is intentionally designed as a zero-dependency, single-file web application. This architecture was chosen for maximum portability and ease of use for non-technical users, as it requires no build process, package manager, or local development server. Simplicity.
The application operates on the following principles:
index.html File: The entire application—structure, styles, and logic—is contained within a single .html file.unpkg.com) in the <head> of the document. This avoids the need for npm or a local node_modules folder.<script type="text/babel"> tag. The Babel Standalone library, also loaded from a CDN, transpiles this JSX into standard JavaScript that the browser can execute in real-time. While not suitable for high-performance production apps, it is perfect for this type of self-contained tool.useState and useMemo hooks. There is no backend or persistent database.<aside>
Update as needed.
{
"document_id": "string", // Unique ID for the document
"source_file": "string", // Original file name or S3 URI
"metadata": {
"author": "string | null", // May not always be available
"keywords": ["string"], // May include derivations from crop and Region values
"status": "normalized" | "needs_review", // Set by the Validator
"quality_score": "float" // Final score from the Validator
},
"content_blocks": [
{
"block_id": "string", // Unique ID for this chunk
"type": "prose" | "table",
"page_number": "number", // Added for context
// The Normalizer decides which field to populate:
"content": "string | null", // For prose, or a sentence describing a table/figure
"data": [["string"]] | null // The raw structured data of a table, for reference
}
]
}
</aside>
The primary logic is located inside the <script type="text/babel"> tag.
Since an npm package like lucide-react cannot be used, all required icons are pre-defined as simple React functional components that render inline SVG. This ensures the application remains self-contained.
const Icon = ({ children, className }) => <svg>...</svg>;
const UploadCloudIcon = ({ className }) => <Icon>...</Icon>;