Area: Files/photos (re-run) (audit p5r) · Surface: /gallery, /gallery/{id}, /gallery/upload (AnsiGalleryController → ansi/index.php, show.php, upload.php) · Dimension: law1-polish · Severity: minor
Engineering Law 1 (genuinely kick-ass, not 'good enough'). The ANSI gallery is markedly rougher than every adjacent surface in this area: no hero, no stat strip, no card thumbnails/preview, no dropzone on upload, inline styles instead of a dedicated component class set, and no empty-state graphic on par with pg-empty-state. It reads as an unfinished first pass next to the photos and file-exchange UIs.
Evidence
platform/templates/ansi/index.php:7 uses raw inline-style filter bar (`style="margin-bottom: var(--space-4); display: flex; gap: var(--space-2); flex-wrap: wrap;"`) and a bare `grid grid-cols-2` of plain `.card` tiles with no thumbnails (line 22-33); ansi/upload.php:16-23 uses a plain `<select>` and basic `.form-input` file input with NO dropzone and NO description AI wand (cf. files/upload.php:33 dropzone + post-toolbar). Compare to the richly designed photos (pg-hero, pg-empty-state graphic, pg-album-card overlays in my-albums.php) and files (fe-hero, fe-stats-bar in index.php) surfaces.
Suggested fix. Give /gallery the same treatment as /files and /photos: a proper hero + stat strip, card tiles that render an ANSI thumbnail/preview, an upload dropzone, and the post-toolbar (with AI wand) on the description. Move the inline styles into a .ag-* component set. Note: per the area brief, AnsiGallery is also a POLICY_DISABLED removal candidate — if it is being retired, removing it is the alternative to polishing it.
Filed by the automated tenant-app audit and adversarially evidence-verified. Status: verified. Open — not yet actioned.
Patrick Bass
@mobieus