Files
nexu-io-open-design/plugins/spec/examples/create-live-artifact-ops/example.html
pftom a0a3ad1299 feat(plugins): introduce portable plugin specification and authoring kit
- Replaced the `community/` directory with `spec/`, which now serves as the portable plugin specification and authoring kit, including documentation, templates, and examples for contributors.
- Added new files for agent development, contributing guidelines, and a comprehensive README for the plugin spec kit.
- Updated existing documentation to reflect the new structure and clarify authoring rules for plugins.
- Introduced multiple example plugins under the new `spec/examples/` directory, showcasing various use cases and workflows for plugin authors.

This update enhances the clarity and accessibility of the plugin development process, providing a robust framework for contributors and external agents.
2026-05-13 21:24:36 +08:00

174 lines
5.2 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Example Live Ops Artifact</title>
<style>
:root {
--bg: #eef2f0;
--ink: #18201d;
--muted: #65736f;
--line: #cdd9d4;
--panel: #ffffff;
--green: #0a7b5e;
--blue: #2e5aac;
--amber: #b86f00;
}
* { box-sizing: border-box; }
body {
margin: 0;
min-height: 100vh;
background: var(--bg);
color: var(--ink);
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
padding: 28px;
}
.artifact {
max-width: 1180px;
margin: 0 auto;
}
header {
display: flex;
justify-content: space-between;
gap: 20px;
align-items: start;
margin-bottom: 18px;
}
h1 {
margin: 0;
font-size: 36px;
line-height: 1.04;
letter-spacing: 0;
}
.meta {
margin-top: 8px;
color: var(--muted);
line-height: 1.45;
}
.refresh {
border: 1px solid var(--line);
border-radius: 8px;
background: #fbfdfc;
padding: 12px 14px;
min-width: 230px;
font-size: 13px;
color: var(--muted);
}
.refresh strong {
display: block;
color: var(--green);
font-size: 15px;
margin-bottom: 4px;
}
.grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 14px;
margin-bottom: 14px;
}
.card {
background: var(--panel);
border: 1px solid var(--line);
border-radius: 8px;
padding: 18px;
}
.label {
color: var(--muted);
text-transform: uppercase;
letter-spacing: .08em;
font-size: 12px;
font-weight: 820;
}
.value {
margin-top: 10px;
font-size: 32px;
line-height: 1;
font-weight: 860;
}
.split {
display: grid;
grid-template-columns: minmax(0, 1.1fr) minmax(320px, .9fr);
gap: 14px;
}
.source {
display: flex;
align-items: center;
justify-content: space-between;
padding: 14px 0;
border-bottom: 1px solid #edf1ef;
gap: 12px;
}
.source:last-child { border-bottom: 0; }
.source b { display: block; margin-bottom: 4px; }
.source span { color: var(--muted); font-size: 14px; }
.pill {
border-radius: 999px;
padding: 5px 9px;
background: #e9f6f2;
color: var(--green);
font-size: 12px;
font-weight: 820;
white-space: nowrap;
}
.pill.warn {
background: #fff2db;
color: var(--amber);
}
.actions {
display: grid;
gap: 10px;
margin-top: 14px;
}
.action {
border: 1px solid var(--line);
border-radius: 8px;
padding: 14px;
display: grid;
gap: 5px;
background: #fbfdfc;
}
.action strong { font-size: 15px; }
.action span { color: var(--muted); line-height: 1.4; }
@media (max-width: 860px) {
body { padding: 18px; }
header { flex-direction: column; }
.grid, .split { grid-template-columns: 1fr; }
}
</style>
</head>
<body>
<main class="artifact">
<header>
<div>
<h1>Customer success live artifact</h1>
<div class="meta">Seeded mock source for connector-ready weekly account review. Designed to refresh from Notion, Linear, or Stripe later.</div>
</div>
<div class="refresh"><strong>Fresh</strong>Updated 4 minutes ago from mock data. Refresh target: every 60 seconds.</div>
</header>
<section class="grid" aria-label="Live KPIs">
<div class="card"><div class="label">Accounts at risk</div><div class="value">9</div></div>
<div class="card"><div class="label">Expansion signals</div><div class="value">17</div></div>
<div class="card"><div class="label">Open blockers</div><div class="value">24</div></div>
<div class="card"><div class="label">Health score</div><div class="value">82</div></div>
</section>
<section class="split">
<div class="card">
<div class="label">Source health</div>
<div class="source"><div><b>Mock account table</b><span>12 rows mapped into KPI cards and action queue.</span></div><span class="pill">Ready</span></div>
<div class="source"><div><b>Linear blockers</b><span>Connector not bound. Showing seeded issue counts.</span></div><span class="pill warn">Seeded</span></div>
<div class="source"><div><b>Stripe expansion</b><span>ARR deltas use sample values until credentials are connected.</span></div><span class="pill warn">Seeded</span></div>
</div>
<div class="card">
<div class="label">Next actions</div>
<div class="actions">
<div class="action"><strong>Escalate Northstar Labs</strong><span>Renewal date moved up. Owner: Priya. Send migration plan before Friday.</span></div>
<div class="action"><strong>Unblock billing export</strong><span>Two enterprise teams are waiting on CSV field mapping.</span></div>
<div class="action"><strong>Prepare expansion brief</strong><span>Three workspaces crossed 80% active-seat utilization this week.</span></div>
</div>
</div>
</section>
</main>
</body>
</html>