[object Object]

← back to Model Arena

auto-save: 2026-07-31T07:25:03 (3 files) — data/challenges.json yolo/daily-log.jsonl data/artifacts/6067924bfe58/

dc38eee73d2a678b138058b626f96845bd654523 · 2026-07-31 07:25:13 -0700 · Steve Abrams

Files touched

Diff

commit dc38eee73d2a678b138058b626f96845bd654523
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Fri Jul 31 07:25:13 2026 -0700

    auto-save: 2026-07-31T07:25:03 (3 files) — data/challenges.json yolo/daily-log.jsonl data/artifacts/6067924bfe58/
---
 data/artifacts/6067924bfe58/gemma3-12b.html | 125 ++++++++++++++
 data/artifacts/6067924bfe58/gemma3-12b.png  | Bin 0 -> 40509 bytes
 data/artifacts/6067924bfe58/hermes3-8b.html | 159 ++++++++++++++++++
 data/artifacts/6067924bfe58/hermes3-8b.png  | Bin 0 -> 8848 bytes
 data/artifacts/6067924bfe58/qwen25-7b.html  | 163 +++++++++++++++++++
 data/artifacts/6067924bfe58/qwen25-7b.png   | Bin 0 -> 48294 bytes
 data/artifacts/6067924bfe58/qwen3-14b.html  | 244 ++++++++++++++++++++++++++++
 data/artifacts/6067924bfe58/qwen3-14b.png   | Bin 0 -> 38422 bytes
 data/challenges.json                        |  90 ++++++++++
 yolo/daily-log.jsonl                        |   1 +
 10 files changed, 782 insertions(+)

diff --git a/data/artifacts/6067924bfe58/gemma3-12b.html b/data/artifacts/6067924bfe58/gemma3-12b.html
new file mode 100644
index 0000000..e58aa07
--- /dev/null
+++ b/data/artifacts/6067924bfe58/gemma3-12b.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Wallcovering Catalog</title>
+    <style>
+        body { font-family: sans-serif; margin: 0; padding: 20px; }
+        #searchContainer { margin-bottom: 20px; }
+        #searchInput { width: 100%; padding: 8px; box-sizing: border-box; }
+        .cardGrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; }
+        .card { border: 1px solid #ddd; padding: 16px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); text-align: left; }
+        .card h3 { margin-top: 0; font-size: 1.2em; }
+        .card p { margin-bottom: 8px; }
+        .sortableColumn { cursor: pointer; user-select: none; }
+        .sortableColumn::after { content: " ▲ "; display: inline-block; vertical-align: middle; margin-left: 5px; }
+        .sortableColumn.descending::after { content: " ▼ "; }
+        </style>
+</head>
+<body>
+
+    <div id="searchContainer">
+        <input type="text" id="searchInput" placeholder="Search...">
+    </div>
+
+    <h2>Wallcovering Catalog</h2>
+
+    <div class="cardGrid" id="catalog">
+        <!-- Cards will be dynamically inserted here -->
+    </div>
+
+    <script>
+        const wallcoverings = [
+            { sku: "WC001", pattern: "Geometric Stripe", colorway: "Navy & Gold", price: 45.99, stock: 128 },
+            { sku: "WC002", pattern: "Floral Bloom", colorway: "Blush Pink", price: 38.50, stock: 75 },
+            { sku: "WC003", pattern: "Abstract Waves", colorway: "Teal & Gray", price: 52.00, stock: 42 },
+            { sku: "WC004", pattern: "Damask Texture", colorway: "Charcoal Black", price: 61.75, stock: 98 },
+            { sku: "WC005", pattern: "Subtle Linen", colorway: "Natural Beige", price: 32.25, stock: 150 },
+            { sku: "WC006", pattern: "Chevron Pattern", colorway: "Olive Green", price: 48.99, stock: 63 },
+            { sku: "WC007", pattern: "Paisley Print", colorway: "Deep Burgundy", price: 55.50, stock: 28 },
+            { sku: "WC008", pattern: "Modern Dots", colorway: "Coral & White", price: 39.00, stock: 81 }
+        ];
+
+        let sortedWallcoverings = [...wallcoverings]; // Create a copy to avoid modifying the original array
+        let sortColumn = null;
+
+        function renderCatalog() {
+            const catalogDiv = document.getElementById("catalog");
+            catalogDiv.innerHTML = "";
+
+            sortedWallcoverings.forEach(item => {
+                const card = document.createElement("div");
+                card.classList.add("card");
+                card.innerHTML = `
+                    <h3>${item.sku}</h3>
+                    <p><strong>Pattern:</strong> ${item.pattern}</p>
+                    <p><strong>Colorway:</strong> ${item.colorway}</p>
+                    <p><strong>Price:</strong> $${item.price.toFixed(2)}</p>
+                    <p><strong>Stock:</strong> ${item.stock}</p>
+                `;
+                catalogDiv.appendChild(card);
+            });
+        }
+
+        function sortTable(columnName, ascending = true) {
+            sortedWallcoverings.sort((a, b) => {
+                const aValue = a[columnName];
+                const bValue = b[columnName];
+
+                if (typeof aValue === 'string' && typeof bValue === 'string') {
+                    return ascending ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue);
+                } else if (typeof aValue === 'number' && typeof bValue === 'number') {
+                    return ascending ? aValue - bValue : bValue - aValue;
+                } else {
+                    return 0; // Handle cases with mixed data types or unexpected values
+                }
+            });
+            sortColumn = columnName;
+
+            renderCatalog();
+        }
+
+        // Add click handlers for sortable columns
+        document.querySelectorAll('.card').forEach(card => {
+          const skuElement = card.querySelector('h3');
+          skuElement.addEventListener('click', () => sortTable('sku'));
+        });
+
+        document.querySelectorAll('.card p').forEach(p =>{
+            if (p.textContent.startsWith("Pattern:")) {
+                p.addEventListener('click',()=>sortTable('pattern'))
+            } else if (p.textContent.startsWith("Colorway:")) {
+                p.addEventListener('click', () => sortTable('colorway'));
+
+            } else if( p.textContent.startsWith("Price:")){
+                p.addEventListener('click', ()=>{ sortTable('price')});
+            }else if (p.textContent.startsWith("Stock:")) {
+                p.addEventListener('click',()=>sortTable('stock'))
+            }
+        })
+
+       // Search functionality
+        const searchInput = document.getElementById("searchInput");
+        searchInput.addEventListener("input", function() {
+            const searchTerm = this.value.toLowerCase();
+            sortedWallcoverings = wallcoverings.filter(item => {
+                return (
+                    item.sku.toLowerCase().includes(searchTerm) ||
+                    item.pattern.toLowerCase().includes(searchTerm) ||
+                    item.colorway.toLowerCase().includes(searchTerm) ||
+                    item.price.toFixed(2).toString().includes(searchTerm) ||
+                    item.stock.toString().includes(searchTerm)
+                );
+            });
+
+             renderCatalog(); // Re-render the catalog after filtering
+        });
+
+
+        // Initial rendering
+        renderCatalog();
+
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/data/artifacts/6067924bfe58/gemma3-12b.png b/data/artifacts/6067924bfe58/gemma3-12b.png
new file mode 100644
index 0000000..f382488
Binary files /dev/null and b/data/artifacts/6067924bfe58/gemma3-12b.png differ
diff --git a/data/artifacts/6067924bfe58/hermes3-8b.html b/data/artifacts/6067924bfe58/hermes3-8b.html
new file mode 100644
index 0000000..48144fc
--- /dev/null
+++ b/data/artifacts/6067924bfe58/hermes3-8b.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Wallcovering Catalog</title>
+    <style>
+        * {
+            box-sizing: border-box;
+        }
+
+        body {
+            font-family: Arial, sans-serif;
+        }
+
+        .search-box input[type="text"] {
+            padding: 5px;
+            width: 100%;
+        }
+
+        table {
+            border-collapse: collapse;
+            margin-top: 20px;
+        }
+
+        th, td {
+            text-align: left;
+            padding: 8px;
+            border-bottom: 1px solid #ddd;
+        }
+
+        th {
+            background-color: #f2f2f2;
+        }
+
+        .sku, .pattern, .colorway, .price, .stock {
+            display: none;
+        }
+
+        .active {
+            display: table-row;
+        }
+    </style>
+</head>
+<body>
+
+<div class="search-box">
+    <input type="text" id="searchInput" placeholder="Search...">
+</div>
+
+<table>
+    <thead>
+        <tr>
+            <th class="sku">SKU</th>
+            <th class="pattern">Pattern</th>
+            <th class="colorway">Colorway</th>
+            <th class="price">Price</th>
+            <th class="stock">Stock</th>
+        </tr>
+    </thead>
+    <tbody id="catalogBody">
+        <tr class="sku pattern colorway price stock active">
+            <td>001</td>
+            <td>Geometric Shapes</td>
+            <td>Blue/Green</td>
+            <td>$45.00</td>
+            <td>30</td>
+        </tr>
+        <tr class="sku pattern colorway price stock">
+            <td>002</td>
+            <td>Floral Motif</td>
+            <td>Pink/White</td>
+            <td>$48.50</td>
+            <td>20</td>
+        </tr>
+        <tr class="sku pattern colorway price stock">
+            <td>003</td>
+            <td>Abstract Design</td>
+            <td>Grey/Yellow</td>
+            <td>$52.00</td>
+            <td>15</td>
+        </tr>
+        <tr class="sku pattern colorway price stock">
+            <td>004</td>
+            <td>Simplicity Stripes</td>
+            <td>Beige/White</td>
+            <td>$45.50</td>
+            <td>25</td>
+        </tr>
+        <tr class="sku pattern colorway price stock">
+            <td>005</td>
+            <td>Luxury Embroidery</td>
+            <td>Brown/Cream</td>
+            <td>$60.00</td>
+            <td>10</td>
+        </tr>
+        <tr class="sku pattern colorway price stock">
+            <td>006</td>
+            <td>Rustic Woodgrain</td>
+            <td>Taupe/Dark Brown</td>
+            <td>$50.00</td>
+            <td>30</td>
+        </tr>
+        <tr class="sku pattern colorway price stock">
+            <td>007</td>
+            <td>Natural Stone</td>
+            <td>Light/Deep Grey</td>
+            <td>$55.50</td>
+            <td>20</td>
+        </tr>
+        <tr class="sku pattern colorway price stock">
+            <td>008</td>
+            <td>Textured Metallics</td>
+            <td>Silver/Gold</td>
+            <td>$62.00</td>
+            <td>15</td>
+        </tr>
+    </tbody>
+</table>
+
+<script>
+    const table = document.querySelector('table');
+    const tbody = document.getElementById('catalogBody');
+    const searchInput = document.getElementById('searchInput');
+
+    // Function to toggle visibility of columns
+    function toggleColumn(columnClass) {
+        const columns = Array.from(document.querySelectorAll('th, td'));
+
+        columns.forEach(col => {
+            if (col.classList.contains(columnClass)) {
+                col.style.display = col.style.display === 'none' ? 'table-cell' : 'none';
+            }
+        });
+    }
+
+    // Function to apply search filter
+    function applyFilter() {
+        const searchText = searchInput.value.toLowerCase();
+        const rows = Array.from(document.querySelectorAll('.sku, .pattern, .colorway, .price, .stock'));
+
+        tbody.innerHTML = rows.filter(row => 
+            row.children[0].textContent.toLowerCase().includes(searchText) ||
+            row.children[1].textContent.toLowerCase().includes(searchText) || 
+            row.children[2].textContent.toLowerCase().includes(searchText) || 
+            row.children[3].textContent.toLowerCase().includes(searchText) ||  
+            row.children[4].textContent.toLowerCase().includes(searchText)
+        ).join('');
+    }
+
+    // Add event listeners
+    searchInput.addEventListener('input', applyFilter);
+    document.querySelectorAll('.column-switch button').forEach(button => {
+        button.addEventListener('click', () => toggleColumn(button.dataset.column));
+    });
+</script>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/data/artifacts/6067924bfe58/hermes3-8b.png b/data/artifacts/6067924bfe58/hermes3-8b.png
new file mode 100644
index 0000000..51989c4
Binary files /dev/null and b/data/artifacts/6067924bfe58/hermes3-8b.png differ
diff --git a/data/artifacts/6067924bfe58/qwen25-7b.html b/data/artifacts/6067924bfe58/qwen25-7b.html
new file mode 100644
index 0000000..21cae12
--- /dev/null
+++ b/data/artifacts/6067924bfe58/qwen25-7b.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Wallcovering Catalog</title>
+    <style>
+        body {
+            font-family: Arial, sans-serif;
+            margin: 20px;
+        }
+        .card-grid {
+            display: grid;
+            gap: 20px;
+            grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
+        }
+        .card {
+            border: 1px solid #ddd;
+            padding: 10px;
+            background-color: white;
+            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
+            transition: transform 0.3s ease-in-out;
+        }
+        .card:hover {
+            transform: scale(1.05);
+        }
+        input[type="text"] {
+            width: 100%;
+            padding: 10px;
+            margin-bottom: 20px;
+            font-size: 16px;
+            border: 1px solid #ccc;
+            border-radius: 4px;
+        }
+        th, td {
+            text-align: center;
+            padding: 8px;
+            border-bottom: 1px solid #ddd;
+        }
+        th {
+            cursor: pointer;
+        }
+    </style>
+</head>
+<body>
+    <input type="text" id="searchBox" placeholder="Search for patterns or colors...">
+    <table id="catalogTable">
+        <thead>
+            <tr>
+                <th onclick="sortTable(0)">SKU</th>
+                <th onclick="sortTable(1)">Pattern</th>
+                <th onclick="sortTable(2)">Colorway</th>
+                <th onclick="sortTable(3)">Price ($)</th>
+                <th onclick="sortTable(4)">Stock</th>
+            </tr>
+        </thead>
+        <tbody>
+            <tr class="card" data-sku="W101">
+                <td>W101</td>
+                <td>Banana Leaves</td>
+                <td>Green</td>
+                <td>25.99</td>
+                <td>In Stock</td>
+            </tr>
+            <tr class="card" data-sku="W102">
+                <td>W102</td>
+                <td>Geometric</td>
+                <td>Pink</td>
+                <td>34.99</td>
+                <td>In Stock</td>
+            </tr>
+            <tr class="card" data-sku="W103">
+                <td>W103</td>
+                <td>Mushroom Spots</td>
+                <td>Brown</td>
+                <td>29.99</td>
+                <td>In Stock</td>
+            </tr>
+            <tr class="card" data-sku="W104">
+                <td>W104</td>
+                <td>Cactus Prints</td>
+                <td>Beige</td>
+                <td>32.99</td>
+                <td>In Stock</td>
+            </tr>
+            <tr class="card" data-sku="W105">
+                <td>W105</td>
+                <td>Dots and Stripes</td>
+                <td>Blue</td>
+                <td>37.99</td>
+                <td>In Stock</td>
+            </tr>
+            <tr class="card" data-sku="W106">
+                <td>W106</td>
+                <td>Vintage Flowers</td>
+                <td>Purple</td>
+                <td>39.99</td>
+                <td>In Stock</td>
+            </tr>
+            <tr class="card" data-sku="W107">
+                <td>W107</td>
+                <td>Herringbone</td>
+                <td>Gray</td>
+                <td>35.99</td>
+                <td>In Stock</td>
+            </tr>
+            <tr class="card" data-sku="W108">
+                <td>W108</td>
+                <td>Silk Leaves</td>
+                <td>White</td>
+                <td>45.99</td>
+                <td>In Stock</td>
+            </tr>
+        </tbody>
+    </table>
+    <script>
+        function sortTable(column) {
+            const table, rows, switching, i, x, y, shouldSwitch;
+            table = document.getElementById("catalogTable");
+            switching = true;
+            while (switching) {
+                switching = false;
+                rows = table.rows;
+                for (i = 1; i < (rows.length - 1); i++) {
+                    shouldSwitch = false;
+                    x = rows[i].getElementsByTagName("TD")[column];
+                    y = rows[i + 1].getElementsByTagName("TD")[column];
+                    if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
+                        shouldSwitch = true;
+                        break;
+                    }
+                }
+                if (shouldSwitch) {
+                    rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
+                    switching = true;
+                }
+            }
+        }
+
+        document.getElementById("searchBox").addEventListener("input", function() {
+            const filter = this.value.toLowerCase();
+            let table, tr, td, i, txtValue;
+            table = document.getElementById("catalogTable");
+            tr = table.getElementsByTagName("tr");
+
+            for (i = 1; i < tr.length; i++) {
+                td = tr[i].getElementsByTagName("td");
+                for (let j = 0; j < td.length; j++) {
+                    if (td[j]) {
+                        txtValue = td[j].textContent || td[j].innerText;
+                        if (txtValue.toLowerCase().indexOf(filter) > -1) {
+                            tr[i].style.display = "";
+                            break;
+                        } else {
+                            tr[i].style.display = "none";
+                        }
+                    }
+                }
+            }
+        });
+    </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/data/artifacts/6067924bfe58/qwen25-7b.png b/data/artifacts/6067924bfe58/qwen25-7b.png
new file mode 100644
index 0000000..4c1b644
Binary files /dev/null and b/data/artifacts/6067924bfe58/qwen25-7b.png differ
diff --git a/data/artifacts/6067924bfe58/qwen3-14b.html b/data/artifacts/6067924bfe58/qwen3-14b.html
new file mode 100644
index 0000000..9047da2
--- /dev/null
+++ b/data/artifacts/6067924bfe58/qwen3-14b.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <title>Wallcovering Catalog</title>
+  <style>
+    body {
+      font-family: Arial, sans-serif;
+      margin: 0;
+      padding: 0;
+      background: #f4f4f4;
+    }
+    header {
+      background: #333;
+      color: white;
+      padding: 1em;
+      text-align: center;
+    }
+    .search-box {
+      display: flex;
+      justify-content: center;
+      margin: 1em 0;
+    }
+    .search-box input {
+      width: 80%;
+      padding: 0.5em;
+      font-size: 1em;
+    }
+    .grid-container {
+      display: grid;
+      grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+      gap: 1em;
+      padding: 1em;
+    }
+    .card {
+      background: white;
+      border: 1px solid #ddd;
+      border-radius: 8px;
+      overflow: hidden;
+      box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+    }
+    .card-header {
+      background: #f0f0f0;
+      padding: 0.75em;
+      font-weight: bold;
+      text-align: center;
+    }
+    .card-body {
+      padding: 0.75em;
+      display: flex;
+      flex-direction: column;
+      gap: 0.5em;
+    }
+    .card-body div {
+      font-size: 0.9em;
+    }
+    .sortable {
+      cursor: pointer;
+      color: #007bff;
+    }
+    .sortable:hover {
+      text-decoration: underline;
+    }
+    @media (max-width: 600px) {
+      .grid-container {
+        grid-template-columns: 1fr;
+      }
+    }
+  </style>
+</head>
+<body>
+  <header>
+    <h1>Wallcovering Catalog</h1>
+  </header>
+  <div class="search-box">
+    <input type="text" id="searchBox" placeholder="Search by SKU, pattern, or colorway...">
+  </div>
+  <div class="grid-container" id="catalogGrid">
+    <div class="card">
+      <div class="card-header">SKU: 1001</div>
+      <div class="card-body">
+        <div>Pattern: Marble Vein</div>
+        <div>Colorway: Beige & Grey</div>
+        <div>Price: $29.99</div>
+        <div>Stock: 150</div>
+      </div>
+    </div>
+    <div class="card">
+      <div class="card-header">SKU: 1002</div>
+      <div class="card-body">
+        <div>Pattern: Modern Geometric</div>
+        <div>Colorway: Navy Blue</div>
+        <div>Price: $34.99</div>
+        <div>Stock: 95</div>
+      </div>
+    </div>
+    <div class="card">
+      <div class="card-header">SKU: 1003</div>
+      <div class="card-body">
+        <div>Pattern: Floral Bloom</div>
+        <div>Colorway: Soft Pink</div>
+        <div>Price: $27.99</div>
+        <div>Stock: 200</div>
+      </div>
+    </div>
+    <div class="card">
+      <div class="card-header">SKU: 1004</div>
+      <div class="card-body">
+        <div>Pattern: Rustic Wood</div>
+        <div>Colorway: Walnut & Oak</div>
+        <div>Price: $32.99</div>
+        <div>Stock: 120</div>
+      </div>
+    </div>
+    <div class="card">
+      <div class="card-header">SKU: 1005</div>
+      <div class="card-body">
+        <div>Pattern: Urban Abstract</div>
+        <div>Colorway: Charcoal & Cyan</div>
+        <div>Price: $39.99</div>
+        <div>Stock: 80</div>
+      </div>
+    </div>
+    <div class="card">
+      <div class="card-header">SKU: 1006</div>
+      <div class="card-body">
+        <div>Pattern: Coastal Waves</div>
+        <div>Colorway: Light Blue & White</div>
+        <div>Price: $26.99</div>
+        <div>Stock: 180</div>
+      </div>
+    </div>
+    <div class="card">
+      <div class="card-header">SKU: 1007</div>
+      <div class="card-body">
+        <div>Pattern: Classic Stripe</div>
+        <div>Colorway: Black & White</div>
+        <div>Price: $24.99</div>
+        <div>Stock: 220</div>
+      </div>
+    </div>
+    <div class="card">
+      <div class="card-header">SKU: 1008</div>
+      <div class="card-body">
+        <div>Pattern: Tropical Leaves</div>
+        <div>Colorway: Green & Yellow</div>
+        <div>Price: $31.99</div>
+        <div>Stock: 130</div>
+      </div>
+    </div>
+  </div>
+  <script>
+    const catalog = [
+      { sku: "1001", pattern: "Marble Vein", colorway: "Beige & Grey", price: "$29.99", stock: "150" },
+      { sku: "1002", pattern: "Modern Geometric", colorway: "Navy Blue", price: "$34.99", stock: "95" },
+      { sku: "1003", pattern: "Floral Bloom", color样: "Soft Pink", price: "$27.99", stock: "200" },
+      { sku: "1004", pattern: "Rustic Wood", colorway: "Walnut & Oak", price: "$32.99", stock: "120" },
+      { sku: "1005", pattern: "Urban Abstract", colorway: "Charcoal & Cyan", price: "$39.99", stock: "80" },
+      { sku: "1006", pattern: "Coastal Waves", colorway: "Light Blue & White", price: "$26.99", stock: "180" },
+      { sku: "1007", pattern: "Classic Stripe", colorway: "Black & White", price: "$24.99", stock: "220" },
+      { sku: "1008", pattern: "Tropical Leaves", colorway: "Green & Yellow", price: "$31.99", stock: "130" }
+    ];
+
+    const grid = document.getElementById("catalogGrid");
+    const searchBox = document.getElementById("searchBox");
+
+    const headers = ["SKU", "Pattern", "Colorway", "Price", "Stock"];
+    const sortBy = { field: "sku", order: 1 };
+
+    function renderCards(data) {
+      grid.innerHTML = "";
+      data.forEach(item => {
+        const card = document.createElement("div");
+        card.className = "card";
+        card.innerHTML = `
+          <div class="card-header">${item.sku}</div>
+          <div class="card-body">
+            <div>Pattern: ${item.pattern}</div>
+            <div>Colorway: ${item.colorway}</div>
+            <div>Price: ${item.price}</div>
+            <div>Stock: ${item.stock}</div>
+          </div>
+        `;
+        grid.appendChild(card);
+      });
+    }
+
+    function filterAndSort() {
+      let filtered = catalog.filter(item => {
+        const query = searchBox.value.toLowerCase();
+        return (
+          item.sku.toLowerCase().includes(query) ||
+          item.pattern.toLowerCase().includes(query) ||
+          item.colorway.toLowerCase().includes(query)
+        );
+      });
+
+      filtered.sort((a, b) => {
+        const valA = a[sortBy.field];
+        const valB = b[sortBy.field];
+        if (valA < valB) return -1 * sortBy.order;
+        if (valA > valB) return 1 * sortBy.order;
+        return 0;
+      });
+
+      renderCards(filtered);
+    }
+
+    function createHeader(name, field) {
+      const header = document.createElement("div");
+      header.className = "sortable";
+      header.textContent = name;
+      header.addEventListener("click", () => {
+        if (sortBy.field === field) {
+          sortBy.order *= -1;
+        } else {
+          sortBy.field = field;
+          sortBy.order = 1;
+        }
+        filterAndSort();
+      });
+      return header;
+    }
+
+    function renderHeader() {
+      const headerRow = document.createElement("div");
+      headerRow.style.display = "flex";
+      headerRow.style.justifyContent = "space-between";
+      headerRow.style.padding = "0.5em";
+      headerRow.style.background = "#f0f0f0";
+      headers.forEach((name, i) => {
+        const header = createHeader(name, headers[i].toLowerCase());
+        headerRow.appendChild(header);
+      });
+      grid.prepend(headerRow);
+    }
+
+    renderHeader();
+    filterAndSort();
+
+    searchBox.addEventListener("input", filterAndSort);
+  </script>
+</body>
+</html>
\ No newline at end of file
diff --git a/data/artifacts/6067924bfe58/qwen3-14b.png b/data/artifacts/6067924bfe58/qwen3-14b.png
new file mode 100644
index 0000000..fc7623f
Binary files /dev/null and b/data/artifacts/6067924bfe58/qwen3-14b.png differ
diff --git a/data/challenges.json b/data/challenges.json
index a029a9d..172c9e7 100644
--- a/data/challenges.json
+++ b/data/challenges.json
@@ -31004,5 +31004,95 @@
     "judging": false,
     "aiPick": "qwen25-7b",
     "judged_at": "2026-07-30T14:16:46.360Z"
+  },
+  {
+    "id": "6067924bfe58",
+    "title": "Daily: Sortable Catalog",
+    "prompt": "Single-file HTML catalog of 8 invented wallcovering SKUs (sku, pattern, colorway, price, stock) as a responsive card grid with a live search box and click-to-sort columns.",
+    "category": "Real Work",
+    "designTools": false,
+    "created_at": "2026-07-31T14:15:05.124Z",
+    "winner": null,
+    "runs": [
+      {
+        "model": "qwen3-14b",
+        "status": "done",
+        "error": null,
+        "seconds": 105,
+        "cost": 0,
+        "started_at": "2026-07-31T14:15:05.150Z",
+        "finished_at": "2026-07-31T14:16:50.648Z",
+        "queued_at": "2026-07-31T14:15:05.130Z",
+        "bytes": 7117,
+        "thumb": true,
+        "aiScore": 8.3,
+        "aiReason": "The catalog meets the requirements but lacks some visual polish and interactivity.",
+        "aiScores": {
+          "qwen2.5vl:7b": 7,
+          "minicpm-v:latest": 9.5
+        },
+        "aiSpread": 2.5
+      },
+      {
+        "model": "gemma3-12b",
+        "status": "done",
+        "error": null,
+        "seconds": 81,
+        "cost": 0,
+        "started_at": "2026-07-31T14:16:50.658Z",
+        "finished_at": "2026-07-31T14:18:11.411Z",
+        "queued_at": "2026-07-31T14:15:05.135Z",
+        "bytes": 5535,
+        "thumb": true,
+        "aiScore": 8,
+        "aiReason": "The catalog meets the requirements but lacks some visual polish and interactivity.",
+        "aiScores": {
+          "qwen2.5vl:7b": 7,
+          "minicpm-v:latest": 9
+        },
+        "aiSpread": 2
+      },
+      {
+        "model": "hermes3-8b",
+        "status": "done",
+        "error": null,
+        "seconds": 36,
+        "cost": 0,
+        "started_at": "2026-07-31T14:18:11.416Z",
+        "finished_at": "2026-07-31T14:18:47.705Z",
+        "queued_at": "2026-07-31T14:15:05.140Z",
+        "bytes": 4583,
+        "thumb": true,
+        "aiScore": 4,
+        "aiReason": "The image shows only one SKU and lacks the responsive card grid layout or search functionality required by the challenge.",
+        "aiScores": {
+          "qwen2.5vl:7b": 4,
+          "minicpm-v:latest": 4
+        },
+        "aiSpread": 0
+      },
+      {
+        "model": "qwen25-7b",
+        "status": "done",
+        "error": null,
+        "seconds": 35,
+        "cost": 0,
+        "started_at": "2026-07-31T14:15:05.162Z",
+        "finished_at": "2026-07-31T14:15:40.663Z",
+        "queued_at": "2026-07-31T14:15:05.144Z",
+        "bytes": 5372,
+        "thumb": true,
+        "aiScore": 8,
+        "aiReason": "The catalog is responsive and fulfills all requirements with clear columns and a search box.",
+        "aiScores": {
+          "qwen2.5vl:7b": 9,
+          "minicpm-v:latest": 7
+        },
+        "aiSpread": 2
+      }
+    ],
+    "judging": false,
+    "aiPick": "qwen3-14b",
+    "judged_at": "2026-07-31T14:19:31.505Z"
   }
 ]
\ No newline at end of file
diff --git a/yolo/daily-log.jsonl b/yolo/daily-log.jsonl
index fc19b71..63c014b 100644
--- a/yolo/daily-log.jsonl
+++ b/yolo/daily-log.jsonl
@@ -3,3 +3,4 @@
 {"ts":"2026-07-28T14:18:17.144Z","id":"b1ea25724e78","title":"Daily: Sample-Sale Email","done":4,"aiPick":"qwen3-14b"}
 {"ts":"2026-07-29T14:17:29.433Z","id":"b697e7a2f3e5","title":"Daily: Conway Life","done":4,"aiPick":"qwen25-7b"}
 {"ts":"2026-07-30T14:16:48.177Z","id":"40d4661c01ff","title":"Daily: Particle Fireworks","done":4,"aiPick":"qwen25-7b"}
+{"ts":"2026-07-31T14:19:37.271Z","id":"6067924bfe58","title":"Daily: Sortable Catalog","done":4,"aiPick":"qwen3-14b"}

← 0536bd2 Move Mood Board Studio out to tools.dw hub (delist from arca  ·  back to Model Arena  ·  auto-save: 2026-07-31T08:25:30 (2 files) — data/challenges.j 5416fd4 →