---
name: visual-ui-auditor
description: "Master guide for multimodal vision UI auditing (Gemini 4 Argon/Pro Vision, Claude Sonnet 5.5 Vision, GPT-5.6 Sol Vision, Muse Wonder) against Anti-Slop Pillar 7, 1px crisp borders, 3-tier radius scales, tabular numerals, and WCAG 2.2 AA / Panduan utama audit visual UI berbasis vision multimodal."
author: "Roedy Rustam"
version: "4.4.2"
---
# Visual UI Auditor & Vision Quality Gate (2026 Sovereign Edition)
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
---
## English
### Executive Directive & The Vision Imperative (2026 Shift)
Text-based code linters (ESLint, Biome, TypeScript) analyze syntax abstractly. They are completely blind to **spatial breathing room, optical balance, perceived elevation, color clashing, and visual degradation**. A React component can be 100% syntactically valid yet visually repulsive, violating brand aesthetics and suffering from lazy AI design tropes.
**The Visual UI Auditor** establishes an autonomous **Multimodal Vision Quality Gate**. By rendering components via Playwright or Headless Chrome, capturing high-DPI screenshots, and passing them to frontier vision models (Gemini 4 Argon/Pro Vision, Claude Sonnet 5.5 Vision, Muse Wonder), the auditor inspects rendered pixels against **Anti-Slop Pillar 7** and automatically synthesizes self-healing CSS diffs.
---
### Orchestration & Integration
- **Upstream Orchestrators**: Works under `brainstorming` and `zero-to-prod-orchestrator` (Phase 5/6 - Frontend Assembly & QA Gate).
- **Core Design & Anti-Slop Standards**: `anti-slop` (Pillar 7 Sovereign UI Craft), `design-system-architect`, `tailwind-expert`, `modern-css-native-expert`.
- **E2E Testing & Screen Capture**: `e2e-testing-expert`, `browser-automation-expert`, `screenshot-to-code-expert`.
- **A11y & Visual Compliance**: `accessibility-testing-expert`, `ui-ux-pro-max`, `hig`.
---
### Core Architectural Topologies
```
┌────────────────────────────────────────────────────────────────────────┐
│ MULTIMODAL VISUAL UI AUDIT PIPELINE │
├────────────────────────────────────────────────────────────────────────┤
│ 1. Render Target UI Component (Playwright / Headless Browser) │
│ │ │
│ ▼ │
│ 2. High-DPI Screenshot Capture (1080p Desktop & 390p Mobile) │
│ │ │
│ ▼ │
│ 3. Frontier Vision LLM Audit (Gemini 4 Pro / Claude Sonnet 5.5 Vision) │
│ • Pillar 7 Visual Checklist • 1px Crisp Borders • Tabular-Nums │
│ • 3-Tier Radius Compliance • Ban Generic Slop Gradients / Orbs │
│ │ │
│ ┌─────────────────────────┴─────────────────────────┐ │
│ ▼ ▼ │
│ [Score >= 90: Passed] [Violations Found]│
│ Generate Audit Certificate Emit Exact Diff │
│ Proceed to Production Patch Tailwind CSS│
│ │ │
│ ▼ │
│ Re-render & Re-verify │
└────────────────────────────────────────────────────────────────────────┘
```
#### The 6 Non-Negotiable Visual Laws (Anti-Slop Pillar 7)
1. **1px Crisp Borders**: Elevated surfaces (dialogs, cards, dropdowns) must use crisp 1px borders (`border border-neutral-200/80 dark:border-neutral-800`). Heavy blurry box-shadows without borders are banned.
2. **Three-Tier Radius Contract**:
- `rounded-lg` (8px) for buttons, inputs, badges.
- `rounded-xl` (12px) for cards, dialog surfaces.
- `rounded-2xl` (16px) for root modals, sheets.
- `rounded-full` is strictly prohibited on standard rectangular buttons.
3. **Tabular Numerals (`tabular-nums`)**: Every monetary balance, price, counter, timestamp, and percentage MUST include `tabular-nums` to eliminate character jitter during live re-renders.
4. **Anti-Generic Gradients**: Purple-to-blue AI gradients (`from-purple-500 to-blue-500`) and glowing neon blur orbs are strictly prohibited.
5. **Mandatory 5-State Affordance**: Buttons and inputs must provide distinct visual styling for: `default`, `hover`, `active`, `focus-visible`, and `disabled`/`loading`.
6. **WCAG 2.2 AA Contrast Compliance**: Minimum 4.5:1 text contrast for body text and 3:1 for large headings across both Light and Dark themes.
---
### Production Implementation Blueprints
#### Blueprint 1: Multimodal Vision UI Audit Engine (`engine/visual-ui-auditor.ts`)
```typescript
import { generateObject } from 'ai';
import { google } from '@ai-sdk/google';
import { z } from 'zod';
import fs from 'node:fs/promises';
export const VisualViolationSchema = z.object({
category: z.enum([
'PILL_BUTTON_OBSESSION',
'MISSING_1PX_BORDER',
'MISSING_TABULAR_NUMS',
'GENERIC_AI_GRADIENT',
'CONTRAST_DEFECT',
'SPATIAL_IMBALANCE',
]),
description: z.string(),
elementSelector: z.string(),
suggestedTailwindFix: z.string(),
severity: z.enum(['CRITICAL', 'WARNING', 'SUGGESTION']),
});
export const VisualAuditScorecardSchema = z.object({
overallScore: z.number().min(0).max(100),
pillar7Compliance: z.boolean(),
wcagAaPassed: z.boolean(),
summary: z.string(),
violations: z.array(VisualViolationSchema),
correctedCodePatch: z.string().optional(),
});
export type VisualAuditScorecard = z.infer;
export class VisualUiAuditor {
public static async auditScreenshot(
screenshotPath: string,
componentSourceCode?: string
): Promise {
const imageBuffer = await fs.readFile(screenshotPath);
const base64Image = imageBuffer.toString('base64');
const auditPrompt = [
'You are the Master Visual UI Auditor enforcing Anti-Slop Pillar 7.',
'Analyze the provided screenshot of the rendered web interface with pixel-level scrutiny.',
'',
'INSPECTION CRITERIA:',
'1. Crisp 1px Borders: Ensure all cards, containers, and inputs have grounded 1px borders.',
'2. Pill Button Ban: Flag any rectangular buttons utilizing rounded-full (pill addiction).',
'3. Tabular Numerals: Ensure all prices, currency values, metrics, and dates use tabular-nums.',
'4. Ban Generic AI Clichés: Flag any purple-blue gradients or blurry neon orbs.',
'5. Spatial Hierarchy: Verify clean padding, balanced typography scales, and WCAG 2.2 AA contrast.',
'',
componentSourceCode ? `COMPONENT SOURCE CODE:\n${componentSourceCode}` : '',
].join('\n');
// Invariant: If Gemini 4 Pro is unavailable/unprovisioned, gracefully fall back to Gemini 3.8 Flash
try {
const result = await generateObject({
model: google('gemini-4-pro'),
schema: VisualAuditScorecardSchema,
messages: [
{
role: 'user',
content: [
{ type: 'text', text: auditPrompt },
{
type: 'image',
image: `data:image/png;base64,${base64Image}`,
},
],
},
],
});
return result.object;
} catch (error) {
console.warn('[VisualUiAuditor] Gemini 4 Pro unavailable. Falling back to Gemini 3.8 Flash:', error);
const fallbackResult = await generateObject({
model: google('gemini-3.8-flash'),
schema: VisualAuditScorecardSchema,
messages: [
{
role: 'user',
content: [
{ type: 'text', text: auditPrompt },
{
type: 'image',
image: `data:image/png;base64,${base64Image}`,
},
],
},
],
});
return fallbackResult.object;
}
}
}
```
---
#### Blueprint 2: Playwright Automated Visual Audit Test (`tests/visual-audit.spec.ts`)
```typescript
import { test, expect } from '@playwright/test';
import path from 'node:path';
import { VisualUiAuditor } from '../engine/visual-ui-auditor';
test.describe('Automated Visual UI Quality Gate', () => {
test('audit dashboard against Anti-Slop Pillar 7 standards', async ({ page }) => {
await page.goto('/dashboard');
await page.waitForLoadState('networkidle');
// 1. Capture High-DPI Screenshot
const screenshotPath = path.resolve('test-results/dashboard-audit.png');
await page.screenshot({ path: screenshotPath, fullPage: true });
// 2. Execute Multimodal Vision Audit
const scorecard = await VisualUiAuditor.auditScreenshot(screenshotPath);
console.log(`[Visual Audit Score]: ${scorecard.overallScore}/100`);
if (scorecard.violations.length > 0) {
console.table(scorecard.violations);
}
// 3. Strict Quality Threshold
expect(scorecard.overallScore).toBeGreaterThanOrEqual(90);
expect(scorecard.pillar7Compliance).toBe(true);
});
});
```
### Sovereign Execution, Token Efficiency & Invariants
| Dimension | Sovereign Mandate & Deterministic Contract |
| :--- | :--- |
| **Frontier Model Cascade** | Medium / High (`Gemini 4 Argon`, `Claude Sonnet 5.5 High`, `Muse Wonder High`, `Composer 2.5 Fast`) |
| **Availability Fallback** | `Gemini 4 Argon/Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6` (Zero unhandled missing-model errors) |
| **KV-Cache & Token Protocol** | Pin static instructions & schemas at prompt prefix (`kv-cache-prefix-optimizer`); pass surgical `CONTEXT_MAP.md` slices (<250 tokens/call) during Swarm Fan-Out |
| **SaaT CLI & MCP Dispatch** | CLI: `vibes skill exec visual-ui-auditor ` / MCP: `vibes_skill_dispatch`, `vibes_visual_audit`, `vibes_ast_query`, `vibes_verify_gate` |
| **NFR & Anti-Slop Invariants** | LCP < 1.8s, INP < 100ms, CLS < 0.05, 1px crisp borders, 3-tier radius (6px/8px/12px), `tabular-nums`, 5-state interactive contract; 100% complete zero-placeholder output verified via `node scripts/check-anti-slop.js --strict` |
---
---
## Bahasa Indonesia
### Direktif Eksekutif & Kebutuhan Audit Visual Multimodal (Pergeseran 2026)
Linter kode berbasis teks (ESLint, Biome, TypeScript) hanya memeriksa sintaksis secara abstrak. Mereka sama sekali buta terhadap **keseimbangan optik, pernapasan tata letak (*spatial breathing room*), elevasi permukaan, dan tabrakan warna**. Sebuah komponen React bisa saja lolos 100% dari galat kompilasi namun secara visual terlihat buruk dan dipenuhi klise AI murahan.
**Visual UI Auditor** menyediakan **Gerbang Kualitas Visual Multimodal** otonom. Dengan merender komponen melalui Playwright, menangkap tangkapan layar beresolusi tinggi, dan memeriksanya menggunakan model vision frontier (Gemini 4 Argon/Pro Vision, Claude Sonnet 5.5 Vision, Muse Wonder), auditor memeriksa setiap piksel terhadap **Pilar 7 Anti-Slop** serta menghasilkan rekomendasi perbaikan CSS secara otomatis.
---
### Integrasi Orkestrasi
- **Orkestrator Hulu**: Beroperasi di bawah arahan `brainstorming` dan `zero-to-prod-orchestrator` (Fase 5/6 - Perakitan Frontend & QA).
- **Standar Desain & Anti-Slop**: `anti-slop` (Pilar 7 Kerajinan UI Berdaulat), `design-system-architect`, `tailwind-expert`, `modern-css-native-expert`.
- **Pengujian E2E & Tangkapan Layar**: `e2e-testing-expert`, `browser-automation-expert`, `screenshot-to-code-expert`.
- **Aksesibilitas & Kepatuhan Visual**: `accessibility-testing-expert`, `ui-ux-pro-max`, `hig`.
---
### 6 Aturan Mutlak Visual (Pilar 7 Anti-Slop)
1. **Border 1px Tegas**: Seluruh kartu, kontainer, dan input wajib memiliki border 1px yang tegas (`border border-neutral-200/80 dark:border-neutral-800`). Bayangan kabur tebal tanpa border dilarang keras.
2. **Skala Radius 3-Tingkat**: `rounded-lg` (8px) untuk tombol/input, `rounded-xl` (12px) untuk kartu, dan `rounded-2xl` (16px) untuk modal utama. Dilarang memakai tombol pil (`rounded-full`) pada tombol aksi standar.
3. **Angka Tabular Wajib (`tabular-nums`)**: Seluruh nilai moneter, harga, saldo, kuantitas, dan tanggal wajib menerapkan `tabular-nums` untuk mencegah pergeseran teks saat data diperbarui.
4. **Larangan Gradien Klise AI**: Gradien ungu-ke-biru AI dan orb neon blur di belakang kartu dilarang keras.
5. **Kontrak 5-State Interaktif Wajib**: Elemen tombol dan kontrol wajib menyediakan visual untuk state: `default`, `hover`, `active`, `focus-visible`, dan `disabled`/`loading`.
6. **Kepatuhan Kontras WCAG 2.2 AA**: Rasio kontras teks minimal 4.5:1 untuk teks biasa dan 3:1 untuk judul besar pada mode terang maupun gelap.
---
### Topologi Arsitektur Audit Visual
```
┌────────────────────────────────────────────────────────────────────────┐
│ ALUR PIPA AUDIT UI VISUAL MULTIMODAL │
├────────────────────────────────────────────────────────────────────────┤
│ 1. Render Komponen UI Target (Playwright / Headless Browser) │
│ │ │
│ ▼ │
│ 2. Tangkap Screenshot High-DPI (1080p Desktop & 390p Mobile) │
│ │ │
│ ▼ │
│ 3. Audit Model Vision Frontier (Gemini 4 Argon/Pro / Claude Sonnet) │
│ • Ceklis Visual Pilar 7 • Border 1px Tegas • Tabular-Nums │
│ • Skala Radius 3-Tingkat • Larangan Gradien AI Klise & Neon Orb │
│ │ │
│ ┌─────────────────────────┴─────────────────────────┐ │
│ ▼ ▼ │
│ [Skor >= 90: Lolos Audit] [Pelanggaran Ada] │
│ Terbitkan Sertifikat Audit Hasilkan Patch CSS│
│ Lanjutkan ke Produksi Terapkan Tailwind │
│ │ │
│ ▼ │
│ Render Ulang & Uji │
└────────────────────────────────────────────────────────────────────────┘
```
---
### Blueprint Implementasi Produksi
#### Blueprint 1: Mesin Audit UI Multimodal (`engine/visual-ui-auditor.ts`)
```typescript
import { generateObject } from 'ai';
import { google } from '@ai-sdk/google';
import { z } from 'zod';
import fs from 'node:fs/promises';
export const SkemaPelanggaranVisual = z.object({
kategori: z.enum([
'TOMBOL_PIL_BERLEBIHAN',
'BORDER_1PX_HILANG',
'ANGKA_TABULAR_HILANG',
'GRADIEN_AI_KLISE',
'CACAT_KONTRAS',
'KETIDAKSEIMBANGAN_SPASIAL',
]),
deskripsi: z.string(),
selektorElemen: z.string(),
saranPerbaikanTailwind: z.string(),
tingkatKeparahan: z.enum(['KRITIS', 'PERINGATAN', 'SARAN']),
});
export const SkemaKartuSkorVisual = z.object({
skorKeseluruhan: z.number().min(0).max(100),
kepatuhanPilar7: z.boolean(),
lolosWcagAa: z.boolean(),
ringkasan: z.string(),
pelanggaran: z.array(SkemaPelanggaranVisual),
patchKodePerbaikan: z.string().optional(),
});
export type KartuSkorVisual = z.infer;
export class VisualUiAuditorId {
public static async auditScreenshot(
jalurScreenshot: string,
kodeSumberKomponen?: string
): Promise {
const bufferGambar = await fs.readFile(jalurScreenshot);
const gambarBase64 = bufferGambar.toString('base64');
const promptAudit = [
'Anda adalah Master Visual UI Auditor yang menegakkan Anti-Slop Pilar 7.',
'Analisis screenshot antarmuka web yang diberikan dengan ketelitian piksel tinggi.',
'',
'KRITERIA PEMERIKSAAN:',
'1. Border 1px Tegas: Pastikan seluruh kartu dan kontainer memiliki border 1px yang nyata.',
'2. Larangan Tombol Pil: Tandai tombol persegi panjang yang memakai rounded-full.',
'3. Angka Tabular: Pastikan harga, kuantitas, dan tanggal menggunakan tabular-nums.',
'4. Larangan Klise AI: Tandai gradien ungu-biru murah dan efek neon blur orb.',
'5. Hierarki Spasial: Periksa keselarasan padding, tipografi, dan kontras WCAG 2.2 AA.',
'',
kodeSumberKomponen ? `KODE SUMBER KOMPONEN:\n${kodeSumberKomponen}` : '',
].join('\n');
// Invarian: Jika Gemini 4 Pro belum tersedia/unprovisioned, alihkan ke Gemini 3.8 Flash secara otomatis
try {
const hasil = await generateObject({
model: google('gemini-4-pro'),
schema: SkemaKartuSkorVisual,
messages: [
{
role: 'user',
content: [
{ type: 'text', text: promptAudit },
{
type: 'image',
image: `data:image/png;base64,${gambarBase64}`,
},
],
},
],
});
return hasil.object;
} catch (kesalahan) {
console.warn('[VisualUiAuditorId] Gemini 4 Pro tidak tersedia. Mengalihkan ke Gemini 3.8 Flash:', kesalahan);
const hasilCadangan = await generateObject({
model: google('gemini-3.8-flash'),
schema: SkemaKartuSkorVisual,
messages: [
{
role: 'user',
content: [
{ type: 'text', text: promptAudit },
{
type: 'image',
image: `data:image/png;base64,${gambarBase64}`,
},
],
},
],
});
return hasilCadangan.object;
}
}
}
```
---
### Panduan Praktik Terbaik
1. **Jadikan Gerbang Kualitas Otomatis**: Integrasikan pengujian tangkapan layar Playwright ke alur CI/CD agar setiap PR yang memuat perubahan visual diverifikasi sebelum rilis.
2. **Prioritaskan Angka Tabular**: Selalu sertakan utilitas `tabular-nums` pada komponen tabel finansial, dashboard transaksi, dan penghitung mundur.
3. **Patuhi Batas Skor Minimum 90**: Tolak kode yang memiliki skor visual < 90 atau melanggar aturan border 1px dan larangan tombol pil.
4. **Protokol Fallback Ketersediaan**: Jika Gemini 4 Pro Vision belum terpasang atau mengalami pembatasan kuota, audit visual dialihkan secara otomatis ke Gemini 3.8 Flash Vision tanpa menghentikan pipeline CI.
### Matriks Eksekusi Berdaulat, Efisiensi Token & Invarian
| Dimensi | Mandat Berdaulat & Kontrak Deterministik |
| :--- | :--- |
| **Kaskade Model Frontier** | Medium / High (`Gemini 4 Argon`, `Claude Sonnet 5.5 High`, `Muse Wonder High`, `Composer 2.5 Fast`) |
| **Invarian Fallback Ketersediaan** | `Gemini 4 Argon/Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6` (Bebas gagal saat model belum tersedia/kuota penuh) |
| **Protokol Hemat Token & KV-Cache** | Kunci instruksi & skema statis di prefix awal (`kv-cache-prefix-optimizer`); kirim potongan `CONTEXT_MAP.md` (<250 token/panggilan) saat Fan-Out |
| **Eksekusi SaaT CLI & MCP** | CLI: `vibes skill exec visual-ui-auditor ` / MCP: `vibes_skill_dispatch`, `vibes_visual_audit`, `vibes_ast_query`, `vibes_verify_gate` |
| **Invarian NFR & Anti-Slop** | LCP < 1.8s, INP < 100ms, CLS < 0.05, border tegas 1px, radius 3-tier (6px/8px/12px), `tabular-nums`, kontrak interaktif 5-state; kode 100% tuntas tanpa placeholder diverifikasi melalui `node scripts/check-anti-slop.js --strict` |