Skip to content

Commit 368517f

Browse files
committed
feat(templates): replace calculator seed with dashboard template
Swap the calculator widget for a KPI dashboard with revenue, active users, conversion metrics, and a monthly revenue bar chart.
1 parent a1c84e0 commit 368517f

File tree

1 file changed

+64
-69
lines changed

1 file changed

+64
-69
lines changed

apps/app/src/components/template-library/seed-templates.ts

Lines changed: 64 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -127,81 +127,76 @@ const invoiceHtml = `<style>
127127
</div>
128128
</div>`;
129129

130-
const calculatorHtml = `<style>
131-
.calc {
130+
const dashboardHtml = `<style>
131+
.dash {
132132
font-family: var(--font-sans);
133-
max-width: 320px;
133+
max-width: 480px;
134134
border-radius: var(--border-radius-xl);
135135
background: var(--color-background-secondary);
136136
border: 0.5px solid var(--color-border-tertiary);
137-
overflow: hidden;
138-
}
139-
.calc-display {
140-
padding: 20px 24px 12px;
141-
text-align: right;
142-
}
143-
.calc-expression { font-size: 13px; color: var(--color-text-tertiary); min-height: 18px; }
144-
.calc-result { font-size: 36px; font-weight: 700; color: var(--color-text-primary); line-height: 1.2; }
145-
.calc-grid {
146-
display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px;
147-
background: var(--color-border-tertiary);
148-
border-top: 0.5px solid var(--color-border-tertiary);
137+
padding: 24px;
149138
}
150-
.calc-btn {
151-
padding: 16px; font-size: 16px; font-weight: 500;
152-
border: none; border-radius: 0; cursor: pointer;
139+
.dash-title { font-size: 18px; font-weight: 600; color: var(--color-text-primary); margin-bottom: 4px; }
140+
.dash-subtitle { font-size: 12px; color: var(--color-text-tertiary); margin-bottom: 20px; }
141+
.dash-kpis { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 20px; }
142+
.dash-kpi {
143+
padding: 12px; border-radius: var(--border-radius-md);
153144
background: var(--color-background-primary);
154-
color: var(--color-text-primary);
155-
transition: background 0.1s;
145+
border: 0.5px solid var(--color-border-tertiary);
156146
}
157-
.calc-btn:hover { background: var(--color-background-tertiary); }
158-
.calc-btn.op { color: var(--color-text-info); font-weight: 600; }
159-
.calc-btn.eq {
160-
background: var(--color-background-info); color: var(--color-text-info); font-weight: 600;
147+
.dash-kpi-label { font-size: 11px; color: var(--color-text-tertiary); }
148+
.dash-kpi-value { font-size: 22px; font-weight: 700; color: var(--color-text-primary); margin-top: 2px; }
149+
.dash-kpi-change { font-size: 11px; margin-top: 2px; }
150+
.dash-kpi-change.up { color: var(--color-text-success); }
151+
.dash-kpi-change.down { color: var(--color-text-danger); }
152+
.dash-chart { margin-bottom: 16px; }
153+
.dash-chart-title { font-size: 13px; font-weight: 600; color: var(--color-text-primary); margin-bottom: 8px; }
154+
.dash-bars { display: flex; align-items: flex-end; gap: 6px; height: 100px; }
155+
.dash-bar-col { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; }
156+
.dash-bar {
157+
width: 100%; border-radius: 4px 4px 0 0;
158+
background: linear-gradient(180deg, rgba(99,102,241,0.7), rgba(16,185,129,0.5));
159+
transition: height 0.3s ease;
161160
}
162-
.calc-btn.eq:hover { opacity: 0.85; }
163-
.calc-btn.wide { grid-column: span 2; }
161+
.dash-bar-label { font-size: 10px; color: var(--color-text-tertiary); }
162+
.dash-legend { display: flex; gap: 16px; padding-top: 12px; border-top: 0.5px solid var(--color-border-tertiary); }
163+
.dash-legend-item { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--color-text-secondary); }
164+
.dash-legend-dot { width: 8px; height: 8px; border-radius: 50%; }
164165
</style>
165-
<div class="calc">
166-
<div class="calc-display">
167-
<div class="calc-expression" id="expr"></div>
168-
<div class="calc-result" id="result">0</div>
166+
<div class="dash">
167+
<div class="dash-title">Q1 2026 Performance</div>
168+
<div class="dash-subtitle">Revenue, users, and conversion metrics — Jan to Mar 2026</div>
169+
<div class="dash-kpis">
170+
<div class="dash-kpi">
171+
<div class="dash-kpi-label">Revenue</div>
172+
<div class="dash-kpi-value">$284k</div>
173+
<div class="dash-kpi-change up">+12.3% vs Q4</div>
174+
</div>
175+
<div class="dash-kpi">
176+
<div class="dash-kpi-label">Active Users</div>
177+
<div class="dash-kpi-value">18.2k</div>
178+
<div class="dash-kpi-change up">+8.1% vs Q4</div>
179+
</div>
180+
<div class="dash-kpi">
181+
<div class="dash-kpi-label">Conversion</div>
182+
<div class="dash-kpi-value">3.4%</div>
183+
<div class="dash-kpi-change down">-0.2% vs Q4</div>
184+
</div>
185+
</div>
186+
<div class="dash-chart">
187+
<div class="dash-chart-title">Monthly Revenue</div>
188+
<div class="dash-bars">
189+
<div class="dash-bar-col"><div class="dash-bar" style="height:65%"></div><div class="dash-bar-label">Jan</div></div>
190+
<div class="dash-bar-col"><div class="dash-bar" style="height:78%"></div><div class="dash-bar-label">Feb</div></div>
191+
<div class="dash-bar-col"><div class="dash-bar" style="height:100%"></div><div class="dash-bar-label">Mar</div></div>
192+
</div>
169193
</div>
170-
<div class="calc-grid">
171-
<button class="calc-btn" onclick="clearCalc()">C</button>
172-
<button class="calc-btn op" onclick="inputOp('(')">(</button>
173-
<button class="calc-btn op" onclick="inputOp(')')">)</button>
174-
<button class="calc-btn op" onclick="inputOp('/')">÷</button>
175-
<button class="calc-btn" onclick="inputNum('7')">7</button>
176-
<button class="calc-btn" onclick="inputNum('8')">8</button>
177-
<button class="calc-btn" onclick="inputNum('9')">9</button>
178-
<button class="calc-btn op" onclick="inputOp('*')">×</button>
179-
<button class="calc-btn" onclick="inputNum('4')">4</button>
180-
<button class="calc-btn" onclick="inputNum('5')">5</button>
181-
<button class="calc-btn" onclick="inputNum('6')">6</button>
182-
<button class="calc-btn op" onclick="inputOp('-')">−</button>
183-
<button class="calc-btn" onclick="inputNum('1')">1</button>
184-
<button class="calc-btn" onclick="inputNum('2')">2</button>
185-
<button class="calc-btn" onclick="inputNum('3')">3</button>
186-
<button class="calc-btn op" onclick="inputOp('+')">+</button>
187-
<button class="calc-btn wide" onclick="inputNum('0')">0</button>
188-
<button class="calc-btn" onclick="inputNum('.')">.</button>
189-
<button class="calc-btn eq" onclick="calc()">=</button>
194+
<div class="dash-legend">
195+
<div class="dash-legend-item"><div class="dash-legend-dot" style="background: var(--color-text-success)"></div>Above target</div>
196+
<div class="dash-legend-item"><div class="dash-legend-dot" style="background: var(--color-text-danger)"></div>Below target</div>
197+
<div class="dash-legend-item"><div class="dash-legend-dot" style="background: var(--color-text-tertiary)"></div>No change</div>
190198
</div>
191-
</div>
192-
<script>
193-
var expression = '';
194-
function inputNum(n) { expression += n; update(); }
195-
function inputOp(o) { expression += o; update(); }
196-
function clearCalc() { expression = ''; document.getElementById('expr').textContent = ''; document.getElementById('result').textContent = '0'; }
197-
function update() { document.getElementById('expr').textContent = expression; }
198-
function calc() {
199-
try {
200-
var r = Function('"use strict"; return (' + expression + ')')();
201-
document.getElementById('result').textContent = Number.isFinite(r) ? parseFloat(r.toFixed(8)).toString() : 'Error';
202-
} catch(e) { document.getElementById('result').textContent = 'Error'; }
203-
}
204-
</script>`;
199+
</div>`;
205200

206201
export const SEED_TEMPLATES: SeedTemplate[] = [
207202
{
@@ -223,11 +218,11 @@ export const SEED_TEMPLATES: SeedTemplate[] = [
223218
version: 1,
224219
},
225220
{
226-
id: "seed-calculator-001",
227-
name: "Calculator",
228-
description: "Interactive calculator with basic arithmetic operations",
229-
html: calculatorHtml,
230-
data_description: "N/A — interactive widget, no data substitution needed",
221+
id: "seed-dashboard-001",
222+
name: "Dashboard",
223+
description: "KPI dashboard with metrics cards and bar chart for quarterly performance",
224+
html: dashboardHtml,
225+
data_description: "Title, subtitle, KPI labels/values/changes, monthly bar chart data, legend items",
231226
created_at: "2026-01-01T00:00:02.000Z",
232227
version: 1,
233228
},

0 commit comments

Comments
 (0)