WIP: overhaul Studio, commissions, media, accessibility, and visual QA - #6
WIP: overhaul Studio, commissions, media, accessibility, and visual QA#6lowestprime wants to merge 43 commits into
Conversation
Add server-backed drafts, idempotent submissions, private attachment staging, capability access, and abuse controls. Prevent runtime databases from entering standalone or Docker build artifacts.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Pull request overview
This draft PR introduces a large, cross-cutting overhaul spanning Studio/media workflows, commissions security + resumability, public-site accessibility/responsiveness, deployment hardening, and a new deterministic Playwright-based “visual archive / audit” toolchain intended for NAS operations and visual QA.
Changes:
- Adds a standalone
visual-audit/package (Playwright + Sharp) plus NAS-focused scripts/compose files to capture, compare, report, validate, and retain visual archives in live-readonly and snapshot-lab modes. - Hardens build/deploy safety by gating Next standalone output (rejecting bundled SQLite/backup artifacts), adding build SHA propagation, and updating NAS deployment guidance and env templates.
- Refactors public + Studio surfaces: normalized piece media roles/links, commissions workflow + access cookies + draft APIs, improved media HTTP caching/validators, and multiple accessibility/responsive UX upgrades.
Reviewed changes
Copilot reviewed 112 out of 114 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| visual-audit/tsconfig.json | Adds TS config for the visual-audit subproject build output. |
| visual-audit/src/util.ts | Shared filesystem + hashing + HTML escaping + atomic JSON helpers for audit tooling. |
| visual-audit/src/types.ts | Defines the audit manifest/inventory/capture/diagnostic schema types. |
| visual-audit/src/tiling.ts | Implements overlapping tiling math for scroll/page capture segmentation. |
| visual-audit/src/tiling.test.ts | Node test coverage for tiling position/range logic. |
| visual-audit/src/readiness.ts | Adds deterministic “visual ready” settling for Playwright captures. |
| visual-audit/src/policy.ts | Adds same-origin + unsafe-method + token-eligibility policy helpers. |
| visual-audit/src/policy.test.ts | Tests audit policy behavior (origins, methods, eligibility). |
| visual-audit/src/inventory.ts | Builds audit route inventories from repo routes + admin inventory API. |
| visual-audit/src/diff.ts | Produces baseline comparisons using pixel diffs + summary JSON output. |
| visual-audit/src/config.ts | Defines environment-driven audit configuration and validation. |
| visual-audit/scripts/run-snapshot-lab.sh | Automates snapshot-lab run orchestration + diff/report/validate. |
| visual-audit/scripts/run-live-audit.sh | Automates live-readonly archive run orchestration. |
| visual-audit/scripts/prune-audits.sh | Retention pruning for visual audit archive directories. |
| visual-audit/scripts/prepare-snapshot-lab.sh | Creates isolated snapshot-lab data/media copies + secrets. |
| visual-audit/scripts/prepare-live-secrets.sh | Extracts/creates audit secret files with safe perms. |
| visual-audit/package.json | Adds pinned dependencies + build/test/capture/report/validate scripts. |
| visual-audit/Dockerfile | Containerizes the visual-audit runner with pinned Playwright base image. |
| docker-compose.visual-audit-live.yml | Live-readonly audit runner Compose definition (secrets/tmpfs/RO). |
| docker-compose.visual-audit-lab.yml | Snapshot-lab Compose definition (internal net + lab woodsmith service). |
| synology-nas-deploy.md | Updates NAS build args, seed/migration notes, media validator checks, and visual archive runbook pointers. |
| docs/visual-archive.md | Referenced by docs as the operating guide for the new visual archive (added/linked by changes). |
| site/scripts/safe-build.test.mjs | Adds tests for safe-build temp root cleanup + forbidden output detection. |
| site/scripts/safe-build.mjs | Adds npm run build entrypoint that enforces the standalone runtime-data gate. |
| site/scripts/safe-build-lib.mjs | Implements the safe-build standalone output scanner + disposable roots. |
| site/package.json | Switches build to safe-build and expands the node:test suite list. |
| site/next.config.ts | Adds image qualities + output tracing excludes to reduce bundled runtime state. |
| Dockerfile | Propagates build SHA into build and runtime, aligning with inventory/audit metadata. |
| docker-compose.synology.yml | Adds VISUAL_AUDIT_TOKEN(+limits) to the production compose environment. |
| .env.example | Documents VISUAL_AUDIT_TOKEN and record limits. |
| .gitignore | Ignores audit artifacts, lab outputs, and secrets directory. |
| .dockerignore | Excludes audit artifacts/design/archive/secrets from Docker build context. |
| site/proxy.ts | Adds visual-audit read-only mutation blocking behavior via a request header. |
| site/lib/visual-audit.ts | Adds server-side audit token reading + request authorization helper. |
| site/lib/visual-audit-token.ts | Adds constant-time audit token matching helper. |
| site/lib/visual-audit-policy.ts | Adds server policy for audit read-only blocking by method + header. |
| site/lib/visual-audit-security.test.mts | Tests token matching and read-only mutation policy. |
| site/app/api/visual-audit/inventory/route.ts | Adds admin + token-protected inventory endpoint for audit tooling. |
| site/lib/ui-behavior.ts | Adds URL-current logic + pan/zoom clamping utilities. |
| site/lib/ui-behavior.test.mts | Tests navigation-current and bounded zoom/pan behaviors. |
| site/lib/site-structure.ts | Adds normalization/validation for footer + homepage services structure. |
| site/lib/site-structure.test.mts | Tests link safety + ordering/validation for site-structure normalization. |
| site/lib/seed.ts | Adds typed footer/home-services seed structures + updates commissions page copy. |
| site/lib/request-security.ts | Adds origin-validation helpers intended for mutation endpoints. |
| site/lib/piece-model.ts | Adds normalized pricing/inquiry/reviews modes + eligibility helpers. |
| site/lib/piece-model.test.mts | Tests pricing/inquiry/review mode behavior and cart eligibility rules. |
| site/lib/piece-media.ts | Adds normalized piece media link parsing/validation. |
| site/lib/piece-media.test.mts | Tests piece media link normalization and rejection of unsafe inputs. |
| site/lib/media-http.ts | Adds ETag/Last-Modified + conditional request freshness helpers. |
| site/lib/media-http.test.mts | Tests media validators and conditional request handling. |
| site/lib/media-operations.ts | Adds transactional batch organization plan + compensated filesystem moves and rollback helpers. |
| site/lib/media-reference-transaction.test.mts | Tests transactional rename reference rewriting across legacy + normalized media references. |
| site/lib/database-migrations.test.mts | Tests additive/idempotent schema migration behavior and rollback safety. |
| site/lib/commission-security.ts | Adds opaque capability cookie access + owner key computation utilities. |
| site/lib/commission-workflow.test.mts | Adds broad workflow tests: drafts, idempotency, quotas, grants, uploads, and seed upgrade behavior. |
| site/lib/inline-edit-registry.test.mts | Expands tests around registry validation, URL safety, transactions, and origin policy use. |
| site/lib/estimator.ts | Generalizes visualizer kind handling + adds limits normalization and template resolution. |
| site/lib/estimator.test.mts | Tests estimator normalization, template coverage, and future kind defaults. |
| site/lib/categories.ts | Adds builtin/custom icon support + ordering/visibility and sanitization integration. |
| site/lib/category-icons.test.mts | Tests builtin icon normalization and custom SVG sanitization constraints. |
| site/lib/catalog.ts | Switches display media selection to normalized public links and re-exports piece policy helpers. |
| site/components/theme-toggle.tsx | Updates theme synchronization behavior and SSR initial snapshot handling. |
| site/components/category-icon.tsx | Adds new SVG icon set + supports custom sanitized icons. |
| site/components/studio-category-editor.tsx | Adds Studio UI for managing category icons (builtin/custom), ordering, visibility, and aliases. |
| site/components/site-nav-link.tsx | Adds client nav link that sets aria-current + data attribute for current route. |
| site/components/piece-media-editor.tsx | Adds role/stage/publication editing UI for normalized piece media links. |
| site/components/inline-editable.tsx | Switches to typed inline edit resource and createElement rendering. |
| site/components/header-shell.tsx | Improves focus behavior so auto-hiding header doesn’t cover focused content. |
| site/components/forms.tsx | Refactors contact/commission entry to use workflow component + adds idempotency + honeypot. |
| site/components/commission-draft-cleanup.tsx | Removes legacy local draft key after successful project creation. |
| site/app/layout.tsx | Adds skip link + main landmark target/focus improvements. |
| site/app/page.tsx | Updates homepage services/commission call-to-action content and removes Process rail usage. |
| site/app/portfolio/page.tsx | Switches portfolio filter icons to new CategoryIcon API + includes “all” as a category object. |
| site/app/portfolio/[slug]/page.tsx | Adds build-record timeline + process media carousel and gates reviews/inquiry behavior via policy helpers. |
| site/app/shop/page.tsx | Updates shop cards to Next/Image thumbnails and new inquiry/cart gating behavior. |
| site/app/shop/cart/page.tsx | Switches cart thumbnails to Next/Image. |
| site/app/contact/page.tsx | Supports optional “piece inquiry” routing and surfaces errors consistently. |
| site/app/commissions/page.tsx | Plumbs signed-in defaults into the commission/contact workflow. |
| site/app/commissions/status/page.tsx | Converts lookup to POST flow that avoids placing email addresses in URLs. |
| site/app/requests/[reference]/page.tsx | Uses capability cookie access checks + POST lookup renewal flow instead of URL email gating. |
| site/app/media/[...slug]/route.ts | Adds ETag/Last-Modified revalidation support and streams via Web ReadableStream. |
| site/app/api/commissions/draft/route.ts | Adds CRUD API for server-side commission drafts with trusted-origin enforcement. |
| site/app/api/render-preview/route.ts | Adds origin enforcement + quota gating + normalized input handling for photorealistic renders. |
| site/app/api/shop/local-reservation/route.ts | Tightens cart eligibility checks via pieceCanEnterCart. |
| README.md | Updates documentation to reflect new workflows, security model, accessibility, and visual audit tooling. |
| PLANS.md | Adds a detailed progress ledger entry for the ongoing overhaul work. |
| admin.md | Updates dashboard manual for new inline editing behavior, media organization, and visual archive guidance. |
Files not reviewed (1)
- visual-audit/package-lock.json: Generated file
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Summary
Why
The sitewide overhaul makes Studio changes rebuild-safe and auditable, keeps customer and media operations transactional, and establishes release evidence that cannot mutate production. Client review has since rejected every overlapping, fanned, or stacked grouped-media presentation. That sitewide non-overlapping collection redesign, its browser acceptance matrix, measured GPU/archive acceleration, and final real-production archive are active required work and are not represented as complete here.
Files / areas touched
Validation
Caveats / follow-up