← back to Model Arena
auto-save: 2026-07-24T18:29:03 (1 files) — data/landings/562168e2a620-qwen3-14b.html
793fdc102ee728e286a26bf2fc791bf1bd5b3ca6 · 2026-07-24 18:29:08 -0700 · Steve Abrams
Files touched
A data/landings/562168e2a620-qwen3-14b.html
Diff
commit 793fdc102ee728e286a26bf2fc791bf1bd5b3ca6
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Fri Jul 24 18:29:08 2026 -0700
auto-save: 2026-07-24T18:29:03 (1 files) — data/landings/562168e2a620-qwen3-14b.html
---
data/landings/562168e2a620-qwen3-14b.html | 263 ++++++++++++++++++++++++++++++
1 file changed, 263 insertions(+)
diff --git a/data/landings/562168e2a620-qwen3-14b.html b/data/landings/562168e2a620-qwen3-14b.html
new file mode 100644
index 0000000..735bc95
--- /dev/null
+++ b/data/landings/562168e2a620-qwen3-14b.html
@@ -0,0 +1,263 @@
+<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
+<title>RENTV — CRE Market Pulse — built by Qwen3 14B · Model Arena</title>
+<style>*{box-sizing:border-box}html,body{margin:0;height:100%;background:#0b0d10;color:#e6ecf2;font:14px/1.5 ui-monospace,Menlo,monospace}
+header{display:flex;align-items:center;gap:14px;padding:13px 20px;border-bottom:1px solid #1c2430;background:#0e1116}
+header .k{color:#7cf;font-weight:700;letter-spacing:2px;text-transform:uppercase;font-size:12px;white-space:nowrap}
+header h1{font-size:15px;margin:0;font-weight:600}header .by{color:#8a93a0;font-size:12px;margin-left:auto;white-space:nowrap}
+.wrap{height:calc(100% - 51px)}iframe{width:100%;height:100%;border:0;background:#000;display:block}</style></head><body>
+<header><span class="k">⚔ Model Arena</span><h1>RENTV — CRE Market Pulse</h1><span class="by">built by <b>Qwen3 14B</b></span></header>
+<div class="wrap"><iframe sandbox="allow-scripts allow-pointer-lock" srcdoc="<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>CRE Market Pulse - RENTV.com</title>
+ <style>
+ body {
+ margin: 0;
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+ background-color: #0f0f0f;
+ color: #e0e0e0;
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ }
+ header {
+ background-color: #1a1a1a;
+ padding: 16px;
+ text-align: center;
+ font-size: 24px;
+ font-weight: bold;
+ }
+ .timestamp {
+ font-size: 14px;
+ color: #888;
+ margin-top: 8px;
+ }
+ .dashboard {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 16px;
+ gap: 16px;
+ }
+ .tile {
+ background-color: #1e1e1e;
+ padding: 16px;
+ border-radius: 8px;
+ flex: 1 1 300px;
+ min-width: 250px;
+ }
+ .tile h3 {
+ margin: 0 0 12px;
+ font-size: 16px;
+ }
+ .tile .value {
+ font-size: 24px;
+ font-weight: bold;
+ }
+ .tile .delta {
+ font-size: 14px;
+ margin-top: 4px;
+ }
+ .tile .delta.up::before {
+ content: "▲";
+ color: #4caf50;
+ }
+ .tile .delta.down::before {
+ content: "▼";
+ color: #f44336;
+ }
+ .tile .delta.flat::before {
+ content: "●";
+ color: #999;
+ }
+ .charts {
+ flex: 1 1 100%;
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ }
+ canvas {
+ background-color: #1e1e1e;
+ border: 1px solid #333;
+ border-radius: 8px;
+ }
+ .reits {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ }
+ .reit {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 10px;
+ }
+ .reit .label {
+ flex: 1;
+ font-weight: bold;
+ color: #e0e0e0;
+ }
+ .reit .value {
+ font-weight: bold;
+ color: #e0e0e0;
+ }
+ .reit .delta {
+ font-size: 12px;
+ margin-top: 2px;
+ }
+ .reit .delta.up::before {
+ content: "▲";
+ color: #4caf50;
+ }
+ .reit .delta.down::before {
+ content: "▼";
+ color: #f44336;
+ }
+ .reit .delta.flat::before {
+ content: "●";
+ color: #999;
+ }
+ </style>
+</head>
+<body>
+ <header>
+ CRE Market Pulse - RENTV.com
+ <div class="timestamp">Data as of: <span id="timestamp">Loading...</span></div>
+ </header>
+ <div class="dashboard">
+ <div class="tile">
+ <h3>US Treasury Yield Curve</h3>
+ <canvas id="yieldCurve" width="400" height="200"></canvas>
+ </div>
+ <div class="tile">
+ <h3>Credit Spreads</h3>
+ <canvas id="creditSpreads" width="400" height="200"></canvas>
+ </div>
+ <div class="tile">
+ <h3>REIT Performance</h3>
+ <div class="reits">
+ <div class="reit">
+ <div class="label">DJ U.S. Real Estate</div>
+ <div class="value">394.84</div>
+ <div class="delta down">-0.22%</div>
+ </div>
+ <div class="reit">
+ <div class="label">MSCI U.S. REIT</div>
+ <div class="value">1,289.55</div>
+ <div class="delta flat">0.00%</div>
+ </div>
+ <div class="reit">
+ <div class="label">Vanguard REIT ETF (VNQ)</div>
+ <div class="value">$98.69</div>
+ <div class="delta down">-0.84%</div>
+ </div>
+ </div>
+ </div>
+ <div class="tile">
+ <h3>Market Fundamentals</h3>
+ <div class="fundamentals">
+ <div class="tile">
+ <h3>LA Office Vac</h3>
+ <div class="value">23.1%</div>
+ <div class="delta">Q2 2026 - CBRE/JLL market reports</div>
+ </div>
+ <div class="tile">
+ <h3>IE Industrial Cap</h3>
+ <div class="value">5.2%</div>
+ <div class="delta">Q2 2026 - Colliers IE industrial</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <script>
+ const marketData = {
+ "curve": [
+ {"label": "3-Month", "value": "3.80%", "change_bps": 5, "dir": "up"},
+ {"label": "5-Year", "value": "4.46%", "change_bps": 5, "dir": "up"},
+ {"label": "10-Year", "value": "4.70%", "change_bps": 5, "dir": "up"},
+ {"label": "30-Year", "value": "5.17%", "change_bps": 2, "dir": "up"}
+ ],
+ "spreads": [
+ {"label": "30Y – 10Y (curve)", "value": "+47 bps", "dir": "up"},
+ {"label": "10Y – 3M (curve)", "value": "+90 bps", "dir": "up"}
+ ],
+ "reits": [
+ {"label": "DJ U.S. Real Estate", "value": "394.84", "change_pct": -0.22, "dir": "down"},
+ {"label": "MSCI U.S. REIT", "value": "1,289.55", "change_pct": 0, "dir": "flat"},
+ {"label": "Vanguard REIT ETF (VNQ)", "value": "$98.69", "change_pct": -0.84, "dir": "down"}
+ ],
+ "fundamentals": [
+ {"label": "LA OFFICE VAC", "value": "23.1%", "as_of": "Q2 2026", "source": "CBRE/JLL market reports"},
+ {"label": "IE INDUSTRIAL CAP", "value": "5.2%", "as_of": "Q2 2026", "source": "Colliers IE industrial"}
+ ]
+ };
+
+ const now = new Date();
+ const timestamp = document.getElementById('timestamp');
+ timestamp.textContent = now.toLocaleString();
+
+ function drawYieldCurve(ctx, data) {
+ const padding = 30;
+ const width = ctx.canvas.width - padding * 2;
+ const height = ctx.canvas.height - padding * 2;
+ const max = Math.max(...data.map(d => parseFloat(d.value.replace('%', ''))));
+ const min = Math.min(...data.map(d => parseFloat(d.value.replace('%', ''))));
+ const scale = height / (max - min);
+
+ ctx.beginPath();
+ ctx.moveTo(padding, padding + height - (parseFloat(data[0].value.replace('%', '')) - min) * scale);
+ for (let i = 1; i < data.length; i++) {
+ const y = padding + height - (parseFloat(data[i].value.replace('%', '')) - min) * scale;
+ ctx.lineTo(padding + i * (width / (data.length - 1)), y);
+ }
+ ctx.strokeStyle = '#4caf50';
+ ctx.lineWidth = 2;
+ ctx.stroke();
+
+ // Labels
+ ctx.font = '12px sans-serif';
+ ctx.textAlign = 'right';
+ ctx.textBaseline = 'middle';
+ for (let i = 0; i < data.length; i++) {
+ ctx.fillText(data[i].label, padding + i * (width / (data.length - 1)), padding + height / 2);
+ }
+ }
+
+ function drawCreditSpreads(ctx, data) {
+ const padding = 30;
+ const width = ctx.canvas.width - padding * 2;
+ const height = ctx.canvas.height - padding * 2;
+ const max = Math.max(...data.map(d => parseFloat(d.value.replace(' ', '').replace('bps', ''))));
+ const min = Math.min(...data.map(d => parseFloat(d.value.replace(' ', '').replace('bps', ''))));
+ const scale = height / (max - min);
+
+ ctx.beginPath();
+ ctx.moveTo(padding, padding + height - (parseFloat(data[0].value.replace(' ', '').replace('bps', '')) - min) * scale);
+ for (let i = 1; i < data.length; i++) {
+ const y = padding + height - (parseFloat(data[i].value.replace(' ', '').replace('bps', '')) - min) * scale;
+ ctx.lineTo(padding + i * (width / (data.length - 1)), y);
+ }
+ ctx.strokeStyle = '#f44336';
+ ctx.lineWidth = 2;
+ ctx.stroke();
+
+ // Labels
+ ctx.font = '12px sans-serif';
+ ctx.textAlign = 'right';
+ ctx.textBaseline = 'middle';
+ for (let i = 0; i < data.length; i++) {
+ ctx.fillText(data[i].label, padding + i * (width / (data.length - 1)), padding + height / 2);
+ }
+ }
+
+ const yieldCurveCanvas = document.getElementById('yieldCurve');
+ const yieldCurveCtx = yieldCurveCanvas.getContext('2d');
+ drawYieldCurve(yieldCurveCtx, marketData.curve);
+
+ const creditSpreadsCanvas = document.getElementById('creditSpreads');
+ const creditSpreadsCtx = creditSpreadsCanvas.getContext('2d');
+ drawCreditSpreads(creditSpreadsCtx, marketData.spreads);
+ </script>
+</body>
+</html>" title="RENTV — CRE Market Pulse"></iframe></div>
+</body></html>
\ No newline at end of file
← 5754afa auto-save: 2026-07-24T13:58:01 (2 files) — data/challenges.j
·
back to Model Arena
·
auto-save: 2026-07-24T20:59:44 (4 files) — data/artifacts/7b 5c09122 →