Saas usage dashboard
@usagemetrics/saas-usage-dashboard
Turn a product events CSV (timestamp, account_id, user_id, event) into one self-contained HTML dashboard: DAU, WAU, MAU, stickiness, active accounts, top features, activation rate, weekly retention, and accounts trending down. No external scripts; open it in any browser or attach it to an email.
- Activity
- New: be the first to try it
- Installs
- 0 installs
- Likes
- 0 likes
- Clones
- 0 clones
- 1{
- 2 "name": "saas-usage-dashboard",
- 3 "owner": "usagemetrics",
- 4 "version": "1.0.0",
- 5 "type": "skill",
- 6 "description": "Turn a product events CSV (timestamp, account_id, user_id, event) into one self-contained HTML dashboard: DAU, WAU, MAU, stickiness, active accounts, top features, activation rate, weekly retention, and accounts trending down. No external scripts; open it in any browser or attach it to an email.",
- 7 "category": "data",
- 8 "license": "MIT",
- 9 "compat": ["claude-code"],
- 10 "permissions": {
- 11 "shell": ["node scripts/usage-dashboard.mjs"],
- 12 "files": { "read": ["./data/**"], "write": ["./out/usage-dashboard*"] }
- 13 },
- 14 "tests": {
- 15 "cases": [
- 16 {
- 17 "name": "builds the dashboard from the example events",
- 18 "inputs": {},
- 19 "checks": [
- 20 { "type": "command_exits_zero", "command": "node scripts/usage-dashboard.mjs examples/events.csv --activation-event shared_dashboard --out out/usage-dashboard.html" },
- 21 { "type": "file_contains", "path": "out/usage-dashboard.html", "text": "<svg viewBox" },
- 22 { "type": "file_contains", "path": "out/usage-dashboard.html", "text": "Accounts trending down" },
- 23 { "type": "file_not_contains", "path": "out/usage-dashboard.html", "text": "<script" },
- 24 {
- 25 "type": "output_matches_schema",
- 26 "path": "out/usage-dashboard.json",
- 27 "schema": {
- 28 "type": "object",
- 29 "required": ["dau", "wau", "mau", "stickiness", "activation", "top_features", "retention", "accounts_trending_down"],
- 30 "properties": {
- 31 "as_of": { "const": "2026-10-30" },
- 32 "dau": { "const": 14 },
- 33 "wau": { "const": 32 },
- 34 "mau": { "const": 42 },
- 35 "active_accounts_30d": { "const": 12 },
- 36 "activation": { "type": "object", "properties": { "rate": { "const": 0.5909 } } },
- 37 "accounts_trending_down": {
- 38 "type": "array",
- 39 "minItems": 3,
- 40 "maxItems": 3,
- 41 "items": { "type": "object", "properties": { "account": { "enum": ["bluebird-labs", "harbor-retail", "juniper-bank"] } } }
- 42 }
- 43 }
- 44 }
- 45 }
- 46 ]
- 47 },
- 48 {
- 49 "name": "counts DAU, WAU, and MAU exactly on a tiny log",
- 50 "inputs": {
- 51 "data/events.csv": "timestamp,account_id,user_id,event\n2026-10-01T10:00:00Z,a1,u1,ran_query\n2026-10-25T10:00:00Z,a1,u2,ran_query\n2026-10-30T09:00:00Z,a2,u3,created_report\n2026-10-30T11:00:00Z,a2,u3,login\n2026-10-30T12:00:00Z,a1,u2,ran_query\n"
- 52 },
- 53 "checks": [
- 54 { "type": "command_exits_zero", "command": "node scripts/usage-dashboard.mjs data/events.csv --out out/usage-dashboard.html" },
- 55 {
- 56 "type": "output_matches_schema",
- 57 "path": "out/usage-dashboard.json",
- 58 "schema": {
- 59 "type": "object",
- 60 "properties": {
- 61 "dau": { "const": 2 },
- 62 "wau": { "const": 2 },
- 63 "mau": { "const": 3 },
- 64 "top_features": { "type": "array", "minItems": 2, "maxItems": 2 }
- 65 }
- 66 }
- 67 }
- 68 ]
- 69 }
- 70 ]
- 71 }
- 72}
