cognis-digital/startboard

GitHub: cognis-digital/startboard

一款可自托管的分析师起始页生成器,用 JSON 配置即可构建出零外部依赖的独立静态 HTML 看板,集成书签、笔记和服务状态面板。

Stars: 0 | Forks: 0

# startboard 一个可自托管的**起始页 / 仪表盘生成器**,专为分析师设计。只需指定一个 小型的 JSON 配置文件,它就能生成一个单一、独立的静态 HTML 起始 看板 —— 包含书签组、工作笔记以及一个服务状态面板 —— **不依赖任何 外部资源、脚本、样式表、字体或图片**。将该文件放在 任何地方(本地磁盘、S3、静态托管服务)然后打开即可。 - 零运行时依赖。纯粹的 Node ESM。 - 独立输出:仅内联 CSS,不获取任何文档外的内容。 - 可插拔、可注入的状态检查 —— 完全支持离线测试。 - 一个以非零状态退出的 `validate` 命令,可用作 CI 门禁。 许可证:COCL 1.0。由 **Cognis Digital** 维护。 ## 安装说明 需要 Node.js 20 或更高版本。 ``` # 从 clone 开始 npm install # no runtime deps; installs nothing but sets up scripts npm link # optional: expose the `startboard` bin globally ``` 或者直接运行二进制文件而无需安装: ``` node bin/startboard.js help ``` ## 快速开始 ``` # 1. scaffold 一个 config startboard new -o config.json # 2. (可选) 编辑 config.json,然后 validate 它 startboard validate config.json # 3. 生成一个 self-contained 的 start board startboard build config.json -o board.html # 4. 在任意浏览器中打开 board.html ``` ## 命令 | 命令 | 描述 | | --- | --- | | `startboard build [-o board.html]` | 生成独立的 HTML。如果省略 `-o`,则写入 stdout。 | | `startboard validate ` | 验证配置。任何错误都会以非零状态退出 —— 可用作 CI 门禁。 | | `startboard new [-o config.json]` | 生成初始配置脚手架。如果省略 `-o`,则写入 stdout。 | | `startboard check ` | 唯一联网的命令。探测每个状态目标并打印 UP/DOWN/ERROR。如果任何目标未处于 UP 状态,则以非零状态退出。 | | `startboard help` | 显示用法。 | ## 配置格式 ``` { "title": "Analyst Start Board", // required, non-empty "subtitle": "Daily links & status", // optional "theme": "dark", // optional: "light" | "dark" "groups": [ // optional bookmark groups { "title": "Markets", "links": [ { "label": "TradingView", "url": "https://www.tradingview.com", "description": "Charts" } ] } ], "notes": [ // optional note widgets { "title": "Today", "body": "Free-form text.\nNewlines are preserved." } ], "status": [ // optional status targets { "name": "Example Service", "url": "https://example.com", "timeoutMs": 5000, // optional, default 5000 "okStatuses": [200] // optional; default is any 2xx/3xx } ] } ``` 验证规则(由 `validate` 和在 `build` 之前强制执行): - 必须提供 `title` 且不能为空。 - 所有 `url` 值(链接和状态目标)必须是 `http`/`https`。 `javascript:`、`data:` 和 `file:` URL 将被拒绝 —— 以确保输出安全。 - 如果存在 `theme`,则必须为 `light` 或 `dark`。 - `links` 需要 `label` + `url`;`notes` 需要 `title` + `body`; `status` 目标需要 `name` + `url`。 完整示例位于 [`examples/config.json`](examples/config.json)。 ## 状态检查是可插拔的 `check` 是唯一使用网络的路径。获取器(fetcher)被抽象在 一个可注入的函数背后,因此整个检查流水线可以使用模拟的获取器进行离线 单元测试,并且在测试中绝不会发起真实的请求。 ``` import { checkAll } from "@cognis-digital/startboard"; const fakeFetcher = async (url) => ({ status: 200 }); const results = await checkAll(config, fakeFetcher); // no network ``` 默认获取器使用全局的 `fetch`,并配有 `AbortController` 超时。 ## 自包含保证 生成的 HTML 内联了所有样式,且不引用任何远程 资源。测试套件会断言输出不包含任何 `