- Welcome to AuraGlass
+ Welcome to AuraGlass by AuraOne
This is a comprehensive glassmorphism design system built with React and TypeScript.
It provides beautiful, modern UI components with advanced glass effects and animations.
@@ -150,4 +150,3 @@ export function AuraGlassExample() {
}
export default AuraGlassExample;
-
diff --git a/docs/glass-utilities.md b/docs/glass-utilities.md
index 9383021ba..84bd67a67 100644
--- a/docs/glass-utilities.md
+++ b/docs/glass-utilities.md
@@ -1,8 +1,8 @@
-# AuraGlass Utility Guide vs Tailwind
+# AuraGlass by AuraOne Utility Guide vs Tailwind
## Overview
-This guide provides a complete reference for AuraGlass utilities and their relationship to Tailwind CSS. AuraGlass uses a token-first architecture with glass-specific utilities that extend beyond standard Tailwind classes while maintaining compatibility.
+This guide provides a complete reference for AuraGlass by AuraOne utilities and their relationship to Tailwind CSS. AuraGlass uses a token-first architecture with glass-specific utilities that extend beyond standard Tailwind classes while maintaining compatibility.
## 🎯 Philosophy: Glass-First vs Utility-First
diff --git a/docs/guides/accessibility.md b/docs/guides/accessibility.md
index 90d9e3b18..f0906fd17 100644
--- a/docs/guides/accessibility.md
+++ b/docs/guides/accessibility.md
@@ -1,6 +1,6 @@
-# AuraGlass Accessibility Guide
+# AuraGlass by AuraOne Accessibility Guide
-This comprehensive guide covers all accessibility features and enhancements implemented in the AuraGlass component library to ensure WCAG 2.1 AA compliance.
+This comprehensive guide covers all accessibility features and enhancements implemented in the AuraGlass by AuraOne component library to ensure WCAG 2.1 AA compliance.
## 📋 Table of Contents
@@ -619,4 +619,4 @@ function SearchInput({ onSearch, results, ...props }) {
The AuraGlass component library provides comprehensive accessibility support out of the box. All components are designed with accessibility as a first-class concern, ensuring that your applications are usable by everyone, regardless of their abilities or the assistive technologies they use.
-For questions or suggestions about accessibility features, please reach out to the development team or file an issue in our repository.
\ No newline at end of file
+For questions or suggestions about accessibility features, please reach out to the development team or file an issue in our repository.
diff --git a/docs/guides/component-standards.md b/docs/guides/component-standards.md
index 2becadcf5..63f2d9adb 100644
--- a/docs/guides/component-standards.md
+++ b/docs/guides/component-standards.md
@@ -1,8 +1,8 @@
-# AuraGlass Component Standards
+# AuraGlass by AuraOne Component Standards
## Overview
-This document defines proper usage patterns, standards, and best practices for all AuraGlass components. Following these standards ensures consistency, accessibility, and maintainability across the design system while maintaining our 100/100 design system score.
+This document defines proper usage patterns, standards, and best practices for all AuraGlass by AuraOne components. Following these standards ensures consistency, accessibility, and maintainability across the design system while maintaining our 100/100 design system score.
## 🎯 Core Principles
diff --git a/docs/guides/elevation-guidelines.md b/docs/guides/elevation-guidelines.md
index f5af306c5..c4ef1f7f1 100644
--- a/docs/guides/elevation-guidelines.md
+++ b/docs/guides/elevation-guidelines.md
@@ -1,8 +1,8 @@
-# AuraGlass Elevation Guidelines
+# AuraGlass by AuraOne Elevation Guidelines
## Overview
-This document defines the elevation system for the AuraGlass component library. Elevation creates visual hierarchy and depth through consistent shadow systems that help users understand the layered nature of interface elements.
+This document defines the elevation system for the AuraGlass by AuraOne component library. Elevation creates visual hierarchy and depth through consistent shadow systems that help users understand the layered nature of interface elements.
## Elevation Levels
@@ -206,4 +206,4 @@ If updating existing components:
- [Component Standards](../guides/component-standards.md)
- [Design System Enforcement](./design-system-enforcement.md)
- [Button Spacing Guide](./button-spacing.md)
-- [Accessibility Guide](./accessibility.md)
\ No newline at end of file
+- [Accessibility Guide](./accessibility.md)
diff --git a/docs/guides/migration.md b/docs/guides/migration.md
index 39814c3b5..4ef0aa0cb 100644
--- a/docs/guides/migration.md
+++ b/docs/guides/migration.md
@@ -1,8 +1,8 @@
-# AuraGlass Migration Guide
+# AuraGlass by AuraOne Migration Guide
## Version 2.0 - Token-First Architecture
-This guide helps you migrate from raw values to the new token-first AuraGlass system with semantic elevation levels and comprehensive utilities.
+This guide helps you migrate from raw values to the token-first AuraGlass by AuraOne system with semantic elevation levels and comprehensive utilities.
## Quick Start
diff --git a/docs/readme.md b/docs/readme.md
index a4f3e88e9..24a1d4f08 100644
--- a/docs/readme.md
+++ b/docs/readme.md
@@ -1,10 +1,10 @@
-# AuraGlass Documentation
+# AuraGlass by AuraOne Documentation
-This is the documentation home for AuraGlass. It separates product usage, component references, design-system rules, testing evidence, deployment notes, and release-ready maintenance guidance.
+This is the documentation home for AuraGlass by AuraOne. It separates product usage, component references, design-system rules, testing evidence, deployment notes, and release-ready maintenance guidance.
## Current Source Of Truth
-- Package version: 3.0.1
+- Package version: 3.1.0
- Certified component inventory: 356 components in [reports/component_inventory.json](../reports/component_inventory.json)
- Liquid Glass public surface: 32 value exports plus related type exports from the root package entrypoint.
- Visual certification: 356/356 passed entries in [reports/glassmorphism-storybook-visual-certification.json](../reports/glassmorphism-storybook-visual-certification.json)
diff --git a/package-lock.json b/package-lock.json
index 4fe870255..2a46f3836 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,21 +1,31 @@
{
"name": "aura-glass",
- "version": "3.0.7",
+ "version": "3.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "aura-glass",
- "version": "3.0.7",
+ "version": "3.1.0",
"license": "MIT",
"dependencies": {
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
+ "@radix-ui/react-select": "^2.2.6",
+ "@radix-ui/react-slot": "^1.2.3",
"chart.js": "^4.5.0",
"clsx": "^2.0.0",
"date-fns": "^4.1.0",
+ "framer-motion": "^11.18.2",
+ "lucide-react": "^0.544.0",
+ "react-chartjs-2": "^5.3.0",
+ "react-hook-form": "^7.54.0",
"socket.io-client": "^4.8.3",
"tailwind-merge": "^3.3.1",
"zod": "^3.22.0"
},
+ "bin": {
+ "aura-glass": "bin/aura-glass.cjs"
+ },
"devDependencies": {
"@axe-core/react": "^4.7.0",
"@babel/core": "^7.28.5",
@@ -100,6 +110,7 @@
"npm": ">=9.0.0"
},
"peerDependencies": {
+ "@google-cloud/vision": "^5.0.0",
"@radix-ui/react-dropdown-menu": "^2.0.0",
"@radix-ui/react-label": "^2.0.0",
"@radix-ui/react-select": "^2.0.0",
@@ -109,6 +120,7 @@
"@sentry/react": "^7.100.0 || ^8.0.0 || ^9.0.0 || ^10.0.0",
"framer-motion": ">=10.0.0",
"lucide-react": "^0.400.0",
+ "openai": "^6.0.0",
"react": ">=18.0.0 <20.0.0",
"react-chartjs-2": "^5.0.0",
"react-dom": ">=18.0.0 <20.0.0",
@@ -116,6 +128,9 @@
"three": ">=0.159.0 <1.0.0"
},
"peerDependenciesMeta": {
+ "@google-cloud/vision": {
+ "optional": true
+ },
"@radix-ui/react-dropdown-menu": {
"optional": true
},
@@ -143,6 +158,9 @@
"lucide-react": {
"optional": true
},
+ "openai": {
+ "optional": true
+ },
"react-chartjs-2": {
"optional": true
},
diff --git a/package.json b/package.json
index 33f305c97..2369d2e8f 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,13 @@
{
"name": "aura-glass",
- "version": "3.0.7",
- "description": "React Liquid Glass and glassmorphism component library with 356 certified UI components, Next.js/SSR support, TypeScript, accessibility, tokens, Storybook, and 3D/AR.",
+ "version": "3.1.0",
+ "description": "React Liquid Glass component library for Next.js, premium dashboards, AI products, media interfaces, and accessible glassmorphism UI.",
"main": "dist/index.js",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
+ "bin": {
+ "aura-glass": "bin/aura-glass.cjs"
+ },
"exports": {
".": {
"types": "./dist/index.d.ts",
@@ -44,7 +47,10 @@
"default": "./dist/esm/utils/env.js"
},
"./hooks/useGlassProbes": {
- "types": "./dist/hooks/useGlassProbes.d.ts"
+ "types": "./dist/hooks/useGlassProbes.d.ts",
+ "import": "./dist/esm/hooks/useGlassProbes.js",
+ "require": "./dist/cjs/hooks/useGlassProbes.js",
+ "default": "./dist/esm/hooks/useGlassProbes.js"
},
"./services/ai/openai-service": {
"types": "./dist/services/ai/openai-service.d.ts",
@@ -89,6 +95,7 @@
"./package.json": "./package.json"
},
"files": [
+ "bin",
"dist",
"workers",
"README.md",
@@ -129,6 +136,7 @@
"test:exports:cjs": "jest tests/exports/package-exports.test.ts",
"test:exports:esm": "node tests/exports/package-exports.spec.mjs",
"test:exports": "npm run build && npm run test:exports:cjs && npm run test:exports:esm",
+ "test:cli": "npm run build && node scripts/ci/verify-cli.js",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage",
"test:a11y": "jest --testPathPattern=a11y",
@@ -174,29 +182,37 @@
"verify:pack": "node scripts/ci/verify-pack.js",
"size-check": "bundlesize",
"analyze": "npm run build && npx bundle-analyzer dist/index.mjs",
+ "audit:3.1-frame-loop": "node scripts/audit/3.1-frame-loop-audit.js",
+ "audit:3.1-frame-loop:strict": "node scripts/audit/3.1-frame-loop-audit.js --strict",
"audit:3.0.7-source": "node scripts/audit/3.0.7-source-audit.js"
},
"keywords": [
"react",
- "react-components",
- "react-ui",
"nextjs",
- "nextjs-components",
- "glassmorphism",
- "glassmorphism-ui",
"liquid-glass",
+ "glassmorphism",
"apple-liquid-glass",
- "aurora-ui",
"glass-ui",
- "design-system",
- "marketing-ui",
- "landing-page",
- "component-library",
"ui-components",
- "ui-library",
+ "component-library",
+ "design-system",
+ "dashboard",
+ "saas",
"ai-ui",
+ "media-ui",
"typescript",
"accessibility",
+ "motion",
+ "tailwind",
+ "shadcn-alternative",
+ "nextjs-components",
+ "react-components",
+ "react-ui",
+ "glassmorphism-ui",
+ "aurora-ui",
+ "marketing-ui",
+ "landing-page",
+ "ui-library",
"accessible-ui",
"ssr",
"react-19",
@@ -233,8 +249,10 @@
"@react-three/drei": "^9.122.0 || ^10.0.0",
"@react-three/fiber": "^8.18.0 || ^9.0.0",
"@sentry/react": "^7.100.0 || ^8.0.0 || ^9.0.0 || ^10.0.0",
+ "@google-cloud/vision": "^5.0.0",
"framer-motion": ">=10.0.0",
"lucide-react": "^0.400.0",
+ "openai": "^6.0.0",
"react": ">=18.0.0 <20.0.0",
"react-chartjs-2": "^5.0.0",
"react-dom": ">=18.0.0 <20.0.0",
@@ -260,6 +278,9 @@
"@sentry/react": {
"optional": true
},
+ "@google-cloud/vision": {
+ "optional": true
+ },
"@react-three/fiber": {
"optional": true
},
@@ -269,6 +290,9 @@
"lucide-react": {
"optional": true
},
+ "openai": {
+ "optional": true
+ },
"react-chartjs-2": {
"optional": true
},
@@ -359,9 +383,16 @@
"vite": "^7.1.5"
},
"dependencies": {
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
+ "@radix-ui/react-select": "^2.2.6",
+ "@radix-ui/react-slot": "^1.2.3",
"chart.js": "^4.5.0",
"clsx": "^2.0.0",
"date-fns": "^4.1.0",
+ "framer-motion": "^11.18.2",
+ "lucide-react": "^0.544.0",
+ "react-chartjs-2": "^5.3.0",
+ "react-hook-form": "^7.54.0",
"socket.io-client": "^4.8.3",
"tailwind-merge": "^3.3.1",
"zod": "^3.22.0"
diff --git a/reports/3.1-release/README.md b/reports/3.1-release/README.md
new file mode 100644
index 000000000..0fd321eb0
--- /dev/null
+++ b/reports/3.1-release/README.md
@@ -0,0 +1,50 @@
+# AuraGlass 3.1 Release Evidence
+
+This directory is the package-repo evidence baseline for the AuraGlass 3.1 launch. It records the launch positioning, required gates, and evidence handoff points without claiming that pending release checks have already passed.
+
+## Positioning Baseline
+
+AuraGlass 3.1 is positioned as:
+
+> Liquid Glass components for React and Next.js.
+
+The launch should describe AuraGlass as a production React and Next.js component system for premium dashboards, AI products, media interfaces, creator tools, and polished SaaS surfaces. It should not lead with raw component count before explaining taxonomy and launch quality.
+
+## Evidence Files
+
+| File | Purpose | Status |
+| --- | --- | --- |
+| [package-gates.md](./package-gates.md) | Package build, lint, test, pack, export, and integration gates. | Baseline created; gates pending. |
+| [flagship-components.md](./flagship-components.md) | 3.1 flagship component list and readiness checklist. | Baseline created; per-component evidence pending. |
+| [catalog-and-website-evidence.md](./catalog-and-website-evidence.md) | Website/catalog evidence required by the PRD. | Baseline created; website repo work intentionally out of scope here. |
+| [accessibility-and-visual-qa.md](./accessibility-and-visual-qa.md) | Accessibility, reduced-motion, visual, contrast, geometry, and manual QA sign-off. | Baseline created; QA evidence pending. |
+| [recipes-and-agent-readiness.md](./recipes-and-agent-readiness.md) | Recipe targets and AI-agent/GEO readiness checklist. | Baseline created; content evidence pending. |
+
+## Required Package Gates
+
+Run and record the relevant command output in [package-gates.md](./package-gates.md):
+
+```bash
+npm run audit:components
+npm run audit:exports
+npm run audit:api
+npm run audit:runtime
+npm run typecheck
+npm run lint:check
+npm run lint:tokens
+npm run lint:styles
+npm run build
+npm run verify:pack
+npm run test:integration:next -- --skip-build
+npm run build-storybook
+npm run release:dry-run
+git diff --check
+```
+
+## Website Handoff
+
+The PRD requires website catalog, SEO, GEO, recipe, and visual evidence. This package repo must not edit the website repo as part of this launch-artifact pass. Website evidence should be linked from [catalog-and-website-evidence.md](./catalog-and-website-evidence.md) after the website repo produces it.
+
+## Evidence Rule
+
+Do not mark a claim as complete unless the linked artifact exists and was produced for the 3.1 release candidate.
diff --git a/reports/3.1-release/accessibility-and-visual-qa.md b/reports/3.1-release/accessibility-and-visual-qa.md
new file mode 100644
index 000000000..7fa8cee30
--- /dev/null
+++ b/reports/3.1-release/accessibility-and-visual-qa.md
@@ -0,0 +1,48 @@
+# 3.1 Accessibility And Visual QA
+
+This ledger tracks the accessibility, reduced-motion, contrast, geometry, and visual QA evidence required before calling AuraGlass 3.1 complete.
+
+## Accessibility Gates
+
+| Gate | Status | Evidence |
+| --- | --- | --- |
+| ContrastGuard metadata coverage | Pending 3.1 evidence | |
+| ARIA metadata coverage | Pending 3.1 evidence | |
+| Focus-management metadata coverage | Pending 3.1 evidence | |
+| Reduced-motion metadata coverage | Pending 3.1 evidence | |
+| Keyboard/focus manual spot check | Pending 3.1 evidence | |
+| Reduced-motion manual spot check | Pending 3.1 evidence | |
+| High-contrast mode review | Pending 3.1 evidence | |
+
+## Visual QA Gates
+
+| Gate | Status | Evidence |
+| --- | --- | --- |
+| Storybook visual certification | Pending 3.1 evidence | |
+| Static Storybook exhaustive QA | Pending 3.1 evidence | |
+| Desktop catalog sweep | Pending website evidence | |
+| Mobile catalog sweep | Pending website evidence | |
+| Contrast sweep | Pending website evidence | |
+| Geometry/overflow sweep | Pending website evidence | |
+| Empty-preview sweep | Pending website evidence | |
+| Flagship screenshot contact sheet | Pending website evidence | |
+| Manual flagship sign-off | Pending evidence | |
+
+## Current Baseline References
+
+Existing 3.0-era checked-in evidence can be used as a starting point, not as final 3.1 completion evidence:
+
+- [../component_inventory.json](../component_inventory.json)
+- [../glassmorphism-storybook-visual-certification.json](../glassmorphism-storybook-visual-certification.json)
+- [../glassmorphism-storybook-visual-certification.md](../glassmorphism-storybook-visual-certification.md)
+- [../storybook-exhaustive-qa.md](../storybook-exhaustive-qa.md)
+
+## Manual Review Notes
+
+Record reviewers, dates, target routes/stories, and known follow-ups here:
+
+- Reviewer:
+- Date:
+- Targets:
+- Result:
+- Follow-ups:
diff --git a/reports/3.1-release/catalog-and-website-evidence.md b/reports/3.1-release/catalog-and-website-evidence.md
new file mode 100644
index 000000000..401c92236
--- /dev/null
+++ b/reports/3.1-release/catalog-and-website-evidence.md
@@ -0,0 +1,43 @@
+# 3.1 Catalog And Website Evidence
+
+This package repo records the website evidence requirements from `auraglass31PRD.md`, but website implementation is owned outside this package-repo artifact pass.
+
+## Required Website Evidence
+
+| Evidence | Required artifact | Status | Link |
+| --- | --- | --- | --- |
+| Inventory reconciliation | `reports/website-3.1/inventory-reconciliation.json` | Pending website repo evidence | |
+| Catalog summary | `reports/website-3.1/catalog-summary.md` | Pending website repo evidence | |
+| Full catalog runtime sweep | Website verification output | Pending website repo evidence | |
+| Full catalog contrast sweep | Website verification output | Pending website repo evidence | |
+| Full catalog geometry/overflow sweep | Website verification output | Pending website repo evidence | |
+| Empty-preview sweep | Website verification output | Pending website repo evidence | |
+| Visual-density sweep | Website verification output | Pending website repo evidence | |
+| Screenshot contact sheets | Website-generated image/contact-sheet artifacts | Pending website repo evidence | |
+| Featured component section | `/components/featured` or equivalent | Pending website repo evidence | |
+| SEO/GEO route coverage | Website metadata and sitemap evidence | Pending website repo evidence | |
+
+## Catalog Acceptance Criteria
+
+The 3.1 launch should not claim catalog completion until evidence shows:
+
+- website preview count matches the certified inventory count, or every intentional non-card item is documented
+- every certified component is represented or intentionally excluded with a reason
+- no hidden preview errors
+- no unexpected "Preview unavailable" cards
+- no empty "No data" states unless the component is an empty-state component
+- no text-only previews for visual or interactive components
+- no obvious clipping, overlap, washed-out slabs, unreadable text, harsh white outlines, blank canvases, or uncontained fixed-position overlays
+- provider-dependent and compound components are represented correctly
+
+## Package Handoff Notes
+
+Package-side work that supports the website evidence:
+
+- README now uses 3.1 positioning and links this evidence directory.
+- npm metadata now targets React Liquid Glass, Next.js, dashboards, AI UI, media UI, accessibility, motion, Tailwind, and shadcn-alternative discovery.
+- GitHub issue templates include a visual regression path for catalog and Storybook issues.
+
+## Website Repo Boundary
+
+Do not edit `/Users/gurbakshchahal/auraglasswebsite` from this package-repo launch-artifact pass. Link website artifacts here after they are produced by website work.
diff --git a/reports/3.1-release/flagship-components.md b/reports/3.1-release/flagship-components.md
new file mode 100644
index 000000000..6882a2473
--- /dev/null
+++ b/reports/3.1-release/flagship-components.md
@@ -0,0 +1,65 @@
+# 3.1 Flagship Components
+
+AuraGlass 3.1 should highlight a curated flagship set instead of presenting every inventory item as equivalent. Each flagship component needs package confidence plus website/docs proof before launch.
+
+## Flagship Set
+
+| Component | Category | Package status | Docs status | Website demo status | Test status | Notes |
+| --- | --- | --- | --- | --- | --- | --- |
+| `OptimizedGlass` | Core surface | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassCard` | Core surface | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassButton` | Core control | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `EnhancedGlassButton` | Core control | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassModal` | Overlay | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassDrawer` | Overlay | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassPopover` | Overlay | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassCommandPalette` | Command UI | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassNavbar` | Navigation | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassSidebar` | Navigation | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassTabs` | Navigation | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassDataGrid` | Data | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassDataTable` | Data | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassDataChart` | Data visualization | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassHeatmap` | Data visualization | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassCalendar` | Scheduling | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassKanbanBoard` | Workflow | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassWizard` | Workflow | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassFileUpload` | Forms/media | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `LiquidGlassMediaControls` | Media | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | Current public export for media controls. |
+| `GlassImageViewer` | Media | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassMusicVisualizer` | Media | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `LiquidGlassMaterial` | Liquid Glass primitive | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `LiquidGlassSourceTransition` | Liquid Glass primitive | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `LiquidGlassScrollEdge` | Liquid Glass primitive | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `LiquidGlassLayerProvider` | Liquid Glass primitive | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassDashboard` | Product surface | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassPrismComparison` | Product surface | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `CollaborativeGlassWorkspace` | Product surface | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassProductRecommendations` | Ecommerce | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+| `GlassSmartShoppingCart` | Ecommerce | Pending evidence | Pending evidence | Pending website evidence | Pending evidence | |
+
+## Per-Component Launch Checklist
+
+Each flagship component should have:
+
+- public root-package import
+- polished basic example
+- production-layout example where relevant
+- compact example where relevant
+- docs with props, accessibility notes, SSR notes, performance notes, and peer requirements
+- focused tests
+- Storybook coverage
+- website demo that works at desktop and mobile widths
+- no text-only preview unless the component itself is text-oriented
+- no hidden provider requirement
+- no clipping, unreadable contrast, blank canvas, or uncontained overlay in catalog cards
+
+## Evidence Links
+
+Add final links here:
+
+- Component inventory:
+- Storybook certification:
+- Website featured section:
+- Website contact sheet:
+- Manual flagship sign-off:
diff --git a/reports/3.1-release/frame-loop-canvas-audit.json b/reports/3.1-release/frame-loop-canvas-audit.json
new file mode 100644
index 000000000..bb2ba4c19
--- /dev/null
+++ b/reports/3.1-release/frame-loop-canvas-audit.json
@@ -0,0 +1,8036 @@
+{
+ "objective": "AuraGlass 3.1 release-candidate audit for frame loops, canvas, readbacks, audio analysers, WebGL, and obvious reduced-motion or animation guard terms.",
+ "summary": {
+ "generatedAt": "2026-05-12T19:20:13.118Z",
+ "scannedRoot": "src",
+ "scannedFileCount": 671,
+ "filesWithSignalsCount": 106,
+ "componentFilesWithSignalsCount": 73,
+ "reviewRequiredFileCount": 18,
+ "findingCount": 18,
+ "strict": false,
+ "categoryTotals": {
+ "frameLoop": 246,
+ "canvas": 229,
+ "readback": 24,
+ "audioAnalyser": 49,
+ "webgl": 219
+ },
+ "filesBySeverity": {
+ "guarded-or-explicit": 80,
+ "review-required": 18,
+ "inventory": 8
+ },
+ "findingsByIssue": {
+ "canvas-or-gpu-readback-review": 18
+ }
+ },
+ "strict": false,
+ "guardTerms": [
+ "prefersReducedMotion",
+ "prefers-reduced-motion",
+ "useReducedMotion",
+ "useMotionPreference",
+ "isReducedMotion",
+ "reducedMotion",
+ "reduceMotion",
+ "shouldAnimate",
+ "animationEnabled",
+ "animationsEnabled",
+ "disableAnimation",
+ "enableAnimation",
+ "isPlaying",
+ "paused",
+ "document.hidden",
+ "visibilityState",
+ "IntersectionObserver",
+ "isIntersecting",
+ "performanceMode"
+ ],
+ "exclusions": {
+ "fileGlobs": [
+ "*.stories.*",
+ "*.test.*",
+ "*.spec.*",
+ "**/__snapshots__/**",
+ "src/docs/**",
+ "src/scripts/**"
+ ],
+ "basenames": [
+ "testSetup.ts",
+ "testSetup.tsx",
+ "testingUtils.ts",
+ "testingUtils.tsx"
+ ]
+ },
+ "findings": [
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/advanced/GlassProgressiveEnhancement.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 282,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/ai/GlassDeepDreamGlass.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 342,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/ai/GlassGANGenerator.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 384,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/ai/GlassGenerativeArt.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 379,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/ai/GlassLiveFilter.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 693,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/ai/GlassStyleTransfer.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 262,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/ar/ARGlassEffects.r3f.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 516,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/charts/GlassDataChart.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 1724,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/charts/ModularGlassDataChart.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 786,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/interactive/GlassDrawingCanvas.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 445,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/interactive/GlassPatternBuilder.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 491,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/interactive/GlassSignaturePad.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 287,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/components/interactive/GlassWhiteboard.tsx",
+ "categories": [
+ "readback"
+ ],
+ "line": 645,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/utils/browserCompatibility.ts",
+ "categories": [
+ "readback"
+ ],
+ "line": 56,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/utils/compatibility.ts",
+ "categories": [
+ "readback"
+ ],
+ "line": 243,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/utils/contrastGuard.ts",
+ "categories": [
+ "readback"
+ ],
+ "line": 300,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/utils/deviceCapabilities.ts",
+ "categories": [
+ "readback"
+ ],
+ "line": 138,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ },
+ {
+ "severity": "review-required",
+ "issue": "canvas-or-gpu-readback-review",
+ "filePath": "src/utils/smartColorExtraction.ts",
+ "categories": [
+ "readback"
+ ],
+ "line": 104,
+ "note": "Readbacks can block rendering if used per-frame. Verify they are user-triggered, export-only, setup-only, or otherwise throttled."
+ }
+ ],
+ "filesWithSignals": [
+ {
+ "filePath": "src/animations/hooks/useAnimationSequenceBasic.ts",
+ "isComponentFile": false,
+ "severity": "guarded-or-explicit",
+ "categories": {
+ "frameLoop": {
+ "count": 6,
+ "firstLine": 200,
+ "tokens": [
+ "cancelAnimationFrame",
+ "requestAnimationFrame"
+ ]
+ }
+ },
+ "guardTerms": [
+ {
+ "term": "isPlaying",
+ "count": 12,
+ "firstLine": 31
+ },
+ {
+ "term": "paused",
+ "count": 6,
+ "firstLine": 27
+ }
+ ],
+ "signals": [
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 200,
+ "excerpt": "animationRef.current = requestAnimationFrame(runAnimation);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 262,
+ "excerpt": "animationRef.current = requestAnimationFrame(runAnimation);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 285,
+ "excerpt": "animationRef.current = requestAnimationFrame(runAnimation);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 297,
+ "excerpt": "cancelAnimationFrame(animationRef.current);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 306,
+ "excerpt": "cancelAnimationFrame(animationRef.current);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 385,
+ "excerpt": "cancelAnimationFrame(animationRef.current);"
+ }
+ ]
+ },
+ {
+ "filePath": "src/animations/hooks/useMultiSpringBasic.ts",
+ "isComponentFile": false,
+ "severity": "guarded-or-explicit",
+ "categories": {
+ "frameLoop": {
+ "count": 4,
+ "firstLine": 129,
+ "tokens": [
+ "cancelAnimationFrame",
+ "requestAnimationFrame"
+ ]
+ }
+ },
+ "guardTerms": [],
+ "signals": [
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 129,
+ "excerpt": "animationRef.current = requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 150,
+ "excerpt": "animationRef.current = requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 176,
+ "excerpt": "cancelAnimationFrame(animationRef.current);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 208,
+ "excerpt": "cancelAnimationFrame(animationRef.current);"
+ }
+ ]
+ },
+ {
+ "filePath": "src/animations/orchestration/useAnimationSequenceOrchestrator.ts",
+ "isComponentFile": false,
+ "severity": "guarded-or-explicit",
+ "categories": {
+ "frameLoop": {
+ "count": 7,
+ "firstLine": 237,
+ "tokens": [
+ "cancelAnimationFrame",
+ "requestAnimationFrame"
+ ]
+ }
+ },
+ "guardTerms": [
+ {
+ "term": "isPlaying",
+ "count": 14,
+ "firstLine": 32
+ },
+ {
+ "term": "paused",
+ "count": 6,
+ "firstLine": 27
+ }
+ ],
+ "signals": [
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 237,
+ "excerpt": "animationRef.current = requestAnimationFrame(runAnimation);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 319,
+ "excerpt": "animationRef.current = requestAnimationFrame(runAnimation);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 326,
+ "excerpt": "animationRef.current = requestAnimationFrame(runAnimation);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 353,
+ "excerpt": "animationRef.current = requestAnimationFrame(runAnimation);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 365,
+ "excerpt": "cancelAnimationFrame(animationRef.current);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 372,
+ "excerpt": "cancelAnimationFrame(animationRef.current);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 420,
+ "excerpt": "cancelAnimationFrame(animationRef.current);"
+ }
+ ]
+ },
+ {
+ "filePath": "src/animations/physics/chartAnimations.ts",
+ "isComponentFile": false,
+ "severity": "guarded-or-explicit",
+ "categories": {
+ "frameLoop": {
+ "count": 9,
+ "firstLine": 115,
+ "tokens": [
+ "cancelAnimationFrame",
+ "requestAnimationFrame"
+ ]
+ }
+ },
+ "guardTerms": [],
+ "signals": [
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 115,
+ "excerpt": "requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 122,
+ "excerpt": "requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 173,
+ "excerpt": "requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 180,
+ "excerpt": "requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 232,
+ "excerpt": "requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 239,
+ "excerpt": "requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 452,
+ "excerpt": "requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 458,
+ "excerpt": "const animationId = requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 460,
+ "excerpt": "return () => cancelAnimationFrame(animationId);"
+ }
+ ]
+ },
+ {
+ "filePath": "src/animations/physics/galileoPhysicsSystem.ts",
+ "isComponentFile": false,
+ "severity": "guarded-or-explicit",
+ "categories": {
+ "frameLoop": {
+ "count": 2,
+ "firstLine": 106,
+ "tokens": [
+ "cancelAnimationFrame",
+ "requestAnimationFrame"
+ ]
+ }
+ },
+ "guardTerms": [
+ {
+ "term": "paused",
+ "count": 4,
+ "firstLine": 43
+ }
+ ],
+ "signals": [
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 106,
+ "excerpt": "cancelAnimationFrame(this.animationFrame);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 131,
+ "excerpt": "this.animationFrame = requestAnimationFrame(this.animate);"
+ }
+ ]
+ },
+ {
+ "filePath": "src/animations/physics/useMultiSpringPhysics.ts",
+ "isComponentFile": false,
+ "severity": "guarded-or-explicit",
+ "categories": {
+ "frameLoop": {
+ "count": 4,
+ "firstLine": 126,
+ "tokens": [
+ "cancelAnimationFrame",
+ "requestAnimationFrame"
+ ]
+ }
+ },
+ "guardTerms": [],
+ "signals": [
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 126,
+ "excerpt": "animationRef.current = requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "requestAnimationFrame",
+ "line": 167,
+ "excerpt": "animationRef.current = requestAnimationFrame(animate);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 175,
+ "excerpt": "cancelAnimationFrame(animationRef.current);"
+ },
+ {
+ "category": "frameLoop",
+ "token": "cancelAnimationFrame",
+ "line": 226,
+ "excerpt": "cancelAnimationFrame(animationRef.current);"
+ }
+ ]
+ },
+ {
+ "filePath": "src/components/advanced/GlassMeshGradient.tsx",
+ "isComponentFile": true,
+ "severity": "inventory",
+ "categories": {
+ "canvas": {
+ "count": 3,
+ "firstLine": 99,
+ "tokens": [
+ "