data-dashboards
Skill5.6k starsChanged 2 months agoApache-2.0View on GitHub
Build a fast, good-looking page: a data dashboard, or any page made with show_html (a landing page, a pricing page, a tool), in this chat or at a public link with publish_page. Use when the person asks for a dashboard, charts or KPIs on a page, a page or mock-up to look at, or a data page to share or keep up to date.
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 7 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 36
Keep the rest: the pinned versions (DuckDB-WASM 1.32.0, ECharts 6.1.0, both from cdn.jsdelivr.net.
- Distinctive: line 44
Size: Keep data at or under about 5 MB (a published page holds 5 MB in all).
- Distinctive: line 47
Published pages: prefer Parquet. It is often 10 to 20 times smaller than CSV.
- Very specific: line 49
Put filter values into SQL only through the template's quote().
- Distinctive: line 50
Check one or two numbers on the page against a direct query before you show it.
- Distinctive: line 57
Never: 3D, two y-axes (use two charts, or index both series to 100), pies with more than 3 slices, rainbow colour scales, a number on every …
- Distinctive: line 92
Look at it, light and dark, wide and narrow: labels must not collide or clip.
- Distinctive: line 122
Keep it under 256 KB: embed data, not libraries.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Data dashboards and pages
A page made with show_html shows in the chat as one card. The person watches it appear, steps back through
its versions, opens it full screen, shares it at a public link, and points at a part to change: their next
message then says what they pointed at (a tag, its text, a CSS selector and a bit of its HTML). Change exactly
that with update_html; the same card refreshes.
Pick the right home
| The person wants | Build |
| A quick answer or one chart | No page. Use the Data tools (data_sql, data_show) or a markdown table. |
| A small summary to look at here | A chat page (show_html) with pre-aggregated rows embedded as CSV. |
| To explore bigger data, or a link to share | Query with the Data tools, export the slice with data_export (format: "parquet") into a folder beside index.html, show the folder in the chat with show_html path, and publish_page it when the person wants a link: the same card gains it. |
| "Keep it up to date" | The shared page, plus a schedule (create_trigger, when=schedule) whose instructions re-run the export, set CONFIG.updated, and publish the same folder again. Publishing the same path keeps the same link. |
Publish only when the person asks to share. A published page is public: never put secrets, personal details or rows they didn't ask to share in it.
Start from the template
dashboard.html sits next to this guide, in the folder named by this skill's root. It is tested in the chat
sandbox and on published pages, in light and dark, at phone and desktop widths. Copy it to your working folder as
index.html (a small chat page sends its text as html; a folder page is shown with path) and change only what the
data needs:
CONFIG:dataFile(data.parquetordata.csv),source,updated(when the data was refreshed, ISO time),currency.QUERIESand therender…functions: your columns and your questions. The sample hasdate,region,category,product,units,revenue.- Headings, notes and KPI labels in the HTML.
- For a chat page, paste the CSV between the
embedded-datatags.
Keep the rest: the pinned versions (DuckDB-WASM 1.32.0, ECharts 6.1.0, both from cdn.jsdelivr.net; never @latest),
the single-threaded DuckDB set up through a blob worker (it needs no special headers, so it runs in the chat sandbox),
the colour tokens, Intl formatting, loading and error states, aria labels and the "Show the numbers" tables.
Cut cards rather than adding a fifth chart.
Data
- Aggregate first. Ship the smallest table that answers the questions: one row per day and dimension, not raw events. Do the heavy work with the Data tools, then export.
- Size. Keep data at or under about 5 MB (a published page holds 5 MB in all). A chat page is at most 256 KB including the template (about 28 KB), so embed at most about 200 KB of CSV.
- A page sent as
htmlreads embedded CSV only. A folder page (show_htmlpath) loads the files beside its index.html, Parquet included, so it shows inline exactly as it will publish. - Published pages: prefer Parquet. It is often 10 to 20 times smaller than CSV; DuckDB fetches its Parquet reader (about 0.5 MB) on first load. CSV works too.
- Types. Dates as DATE (Parquet) or
YYYY-MM-DD(CSV). Cast sums and counts to DOUBLE in SQL so they arrive as plain numbers. - Put filter values into SQL only through the template's
quote(). - Check one or two numbers on the page against a direct query before you show it.
Design
Charts
- One question per chart. Make the heading the question ("Which regions sell the most?") and the note under it the answer, computed from the data.
- Pick the form by the job: compare categories with a bar (horizontal and sorted when labels are long); show change over time with a line; show part-to-whole with a stacked bar. A single number is a KPI tile, not a chart. Many categories belong in a table.
- Never: 3D, two y-axes (use two charts, or index both series to 100), pies with more than 3 slices, rainbow colour scales, a number on every point.
- Bars start at zero. Don't cut an axis to make a change look bigger.
- Label directly: values at bar tips, series names at line ends. Use a legend only when direct labels collide.
- Annotate the key point (the peak, a target, the change that matters) on the chart itself.
- Emphasis beats colour: one accent for what matters, grey for the rest (the template greys every region but the selected one).
Colour
- One accent colour for the page. The template's 6 categorical colours (separate light and dark sets) were checked for colour-blind separation and at least 3:1 contrast; use them in order.
- Give each category a fixed colour, so filtering never repaints the survivors. Fold anything past 6 into "Other".
- Magnitude: one hue from light to dark. Above/below a baseline: two hues with a grey middle.
- Green and red mean good and bad only, always with ▲ ▼ and words, never colour alone.
- Text uses the ink colours, never a series colour.
Layout and type
- Order: title and filters, then 3 to 5 KPI tiles, the main chart full width, 1 or 2 supporting charts, a detail table, and the source line.
- Space on a 4, 8, 12, 16, 24, 32 px scale; align to the grid; hairline grid lines; let whitespace separate cards.
- System font. Tabular numbers in tables and axes; KPI numbers stay proportional.
- Format every number and date with
Intl: compact for KPIs and axes ($1.2M), full in tables and tooltips. - Say where the data came from, the dates it covers and when it was refreshed, at the bottom.
Interaction and access
- One or two filters, in one row above everything; every KPI, chart and table follows them.
- Tooltips add detail but never hold the only copy of a number: each chart has its table.
- Each chart has an
aria-labelthat states what it shows and the takeaway. Nativeselectanddetailskeep the keyboard working; keep visible focus and text contrast of at least 4.5:1. - It must work at 360 px wide: one column, nothing scrolls sideways except a wide table inside its own box.
- Show a loading line at start, a plain error if a file or library fails, and dim (don't blank) the cards while filters apply.
Chat pages
- The chat shows about 640 px of height before scrolling: keep to KPIs, two charts and a short table.
- The chat sets the light or dark theme on the page; the template follows it.
- The template tells you which filters the person picked (
mausbot.setContext), so a follow-up like "why did it drop?" has context.
Before you hand it over
- Look at it, light and dark, wide and narrow: labels must not collide or clip.
- First load takes 1 to 3 seconds (DuckDB is about 7 MB, cached afterwards). Never chart more than about 10,000 marks; aggregate in SQL.
- For a shared page, give the link and say how it stays current (the schedule, if any).
Make a page
Pick the format
jsxfor anything with state, several sections or repeated parts: a landing or pricing page, a form-like tool, a mock-up to iterate on. One file, a default export of the page component.htmlfor a quick static page, or when you start fromdashboard.html.
Building blocks a jsx file can import, nothing else (pinned, loaded from cdn.jsdelivr.net):
react(19.3): hooks and all;react-domfor portals.lucide-reacticons:import { Check, ArrowRight } from "lucide-react", sized withsize={16}.echarts(6.1), orimport { Chart, useTheme } from "mausbot":<Chart option={…} height={280} label="…" />follows the light or dark theme;useTheme()returns"light"or"dark".mausbotalso hassend(text),open(url)andsetContext(text), as in the tool's description.- Tailwind classes (4.3) need no import.
dark:follows the chat's theme. TypeScript types are fine. A file that doesn't read, or imports anything else, comes back as an error with the line: fix it and send the whole file again. Errors while it runs show on the page and reach you with the next message.
Design
- Space on 4, 8, 12, 16, 24, 32 and 48 px (Tailwind 1, 2, 3, 4, 6, 8, 12). One container,
max-w-5xl mx-auto px-4. - Type: one family; sizes 12, 14, 16, 20, 24, 30, 36; headings
font-semibold tracking-tight, bodyleading-relaxed. - Colour: neutral greys (
zinc) for text and surfaces, one accent for actions and what matters. Give every surface and text colour adark:partner (bg-white dark:bg-zinc-900,text-zinc-900 dark:text-zinc-100). - Cards:
rounded-2xl border border-zinc-200 dark:border-zinc-800, a soft shadow at most. Buttons at least 36 px tall. - It must work at 360 px wide: stack columns (
grid gap-4 sm:grid-cols-3), nothing scrolls sideways. - Real words, not lorem ipsum. Give each section a
data-nameand each repeated item akey, so a point at it names it clearly. - Keep it under 256 KB: embed data, not libraries.
Trending
More talk lately.about the whole repository
Who's talking about milind-soni/OpenMausBot
- A Hacker News story“Open-source Grok Bot alternative”Hacker News · Oct 30, 2026 · 3 points
- @github-trending.bsky.social“💎 Hidden Gem! 💎 (1000+ new stars) 📦 milind-soni / OpenMausBot ⭐ 7,056 (+1,190) 🗒 TypeScript Open-source …”Bluesky · Oct 29, 2026 · 2 likes
- A Hacker News story“OpenMausBot: Open-source Grok Bot alternative with a VM the bot can use”Hacker News · Oct 28, 2026 · 1 points
- gaku1023/agent-hangar“決まった時刻やイベント(PR・CI・webhook)で会話を動かす”GitHub · Oct 31, 2026
- gaku1023/agent-hangar“MCP で外から触れる操作の範囲を絞る(削除・停止に確認を挟む)”GitHub · Oct 31, 2026
The biggest 5 of 54 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 54
Talked about on GitHub, Hacker News and Bluesky (54 times).
On GitHub · 50
- Oct 31, 2026決まった時刻やイベント(PR・CI・webhook)で会話を動かす — gaku1023/agent-hangar0 reactions · 1 comment
- Oct 31, 2026MCP で外から触れる操作の範囲を絞る(削除・停止に確認を挟む) — gaku1023/agent-hangar0 reactions
- Oct 31, 2026Github trending [milind-soni/OpenMausBot] 开源Grok Bot替代品,每个bot自带人格模型与云电脑 — web1992/github-trending0 reactions
- Oct 30, 2026Feature: ready xerj setup for AI-coworker desktop apps (OpenMausBot, nightly-labs OpenBot, CopilotKit OpenBot) — xerj-org/xerj0 reactions · 1 comment
- Oct 30, 2026Add openmausbot community listing — AppitStudio/awesome-jev0 reactions
45 more on GitHub
- Oct 30, 2026Research: GitHub-Radar-Delta 30.10.2026 (Review only) — Shuwajaja/WERKAtlas0 reactions
- Oct 30, 2026agent-skills.github.milind-soni.openmausbot: 0.1.132 → 0.1.134 — sudosubin/agents.nix0 reactions
- Oct 30, 2026Github trending [milind-soni/OpenMausBot] 开源Grok Bot替代品,每个bot自带人格模型与云电脑 — web1992/github-trending0 reactions
- Oct 29, 2026Review upstream OpenMausBot v0.1.132 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 29, 2026agent-skills.github.milind-soni.openmausbot: 0.1.131 → 0.1.132 — sudosubin/agents.nix0 reactions
- Oct 29, 2026agent-skills.github.milind-soni.openmausbot: 0.1.130 → 0.1.131 — sudosubin/agents.nix0 reactions
- Oct 28, 2026[concept] parity: разбор OpenMausBot — что забрать в Alive — rimgro/alivebot0 reactions
- Oct 27, 2026agent-skills.github.milind-soni.openmausbot: 0.1.129 → 0.1.130 — sudosubin/agents.nix0 reactions
- Oct 27, 2026Review upstream OpenMausBot v0.1.129 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 27, 2026agent-skills.github.milind-soni.openmausbot: 0.1.128 → 0.1.129 — sudosubin/agents.nix0 reactions
- Oct 27, 2026agent-skills.github.milind-soni.openmausbot: 0.1.127 → 0.1.128 — sudosubin/agents.nix0 reactions
- Oct 25, 2026Review upstream OpenMausBot v0.1.127 — jbellsolutions/Open-Orgo-Bot0 reactions · 1 comment
- Oct 24, 2026agent-skills.github.milind-soni.openmausbot: 0.1.126 → 0.1.127 — sudosubin/agents.nix0 reactions
- Oct 24, 2026Review upstream OpenMausBot v0.1.126 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 24, 2026agent-skills.github.milind-soni.openmausbot: 0.1.125 → 0.1.126 — sudosubin/agents.nix0 reactions
- Oct 23, 2026agent-skills.github.milind-soni.openmausbot: 0.1.124 → 0.1.125 — sudosubin/agents.nix0 reactions
- Oct 23, 2026Review upstream OpenMausBot v0.1.125 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 23, 2026agent-skills.github.milind-soni.openmausbot: 0.1.123 → 0.1.124 — sudosubin/agents.nix0 reactions
- Oct 22, 2026agent-skills.github.milind-soni.openmausbot: 0.1.122 → 0.1.123 — sudosubin/agents.nix0 reactions
- Oct 22, 2026Review upstream OpenMausBot v0.1.122 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 22, 2026agent-skills.github.milind-soni.openmausbot: 0.1.121 → 0.1.122 — sudosubin/agents.nix0 reactions
- Oct 21, 2026agent-skills.github.milind-soni.openmausbot: 0.1.120 → 0.1.121 — sudosubin/agents.nix0 reactions
- Oct 21, 2026Review upstream OpenMausBot v0.1.121 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 21, 2026Add direct Outlook, Gmail, and Slack sign-in on this computer — bkcarlos/OpenMausBot0 reactions
- Oct 21, 2026agent-skills.github.milind-soni.openmausbot: 0.1.119 → 0.1.120 — sudosubin/agents.nix0 reactions
- Oct 20, 2026Browser S4 and comms e2e: hold on GitHub's macOS and Windows runners — sjmaple/cr-OpenMausBot0 reactions
- Oct 20, 2026Review upstream OpenMausBot v0.1.119 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 20, 2026agent-skills.github.milind-soni.openmausbot: 0.1.118 → 0.1.119 — sudosubin/agents.nix0 reactions
- Oct 20, 2026agent-skills.github.milind-soni.openmausbot: 0.1.117 → 0.1.118 — sudosubin/agents.nix0 reactions
- Oct 19, 2026agent-skills.github.milind-soni.openmausbot: 0.1.116 → 0.1.117 — sudosubin/agents.nix0 reactions
- Oct 19, 2026Review upstream OpenMausBot v0.1.117 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 18, 2026agent-skills.github.milind-soni.openmausbot: 0.1.115 → 0.1.116 — sudosubin/agents.nix0 reactions
- Oct 18, 2026Review upstream OpenMausBot v0.1.115 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 18, 2026Add OpenMausBot (milind-soni/OpenMausBot) — reacher-z/Awesome-CUA0 reactions
- Oct 17, 2026agent-skills.github.milind-soni.openmausbot: 0.1.114 → 0.1.115 — sudosubin/agents.nix0 reactions
- Oct 17, 2026Review upstream OpenMausBot v0.1.114 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 16, 2026agent-skills.github.milind-soni.openmausbot: 0.1.113 → 0.1.114 — sudosubin/agents.nix0 reactions
- Oct 16, 2026Review upstream OpenMausBot v0.1.113 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 16, 2026agent-skills.github.milind-soni.openmausbot: 0.1.112 → 0.1.113 — sudosubin/agents.nix0 reactions
- Oct 15, 2026agent-skills.github.milind-soni.openmausbot: 0.1.111 → 0.1.112 — sudosubin/agents.nix0 reactions
- Oct 15, 2026Review upstream OpenMausBot v0.1.111 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 15, 2026agent-skills.github.milind-soni.openmausbot: 0.1.110 → 0.1.111 — sudosubin/agents.nix0 reactions
- Oct 15, 2026agent-skills.github.milind-soni.openmausbot: 0.1.109 → 0.1.110 — sudosubin/agents.nix0 reactions
- Oct 14, 2026Review upstream OpenMausBot v0.1.109 — jbellsolutions/Open-Orgo-Bot0 reactions
- Oct 14, 2026agent-skills.github.milind-soni.openmausbot: 0.1.108 → 0.1.109 — sudosubin/agents.nix0 reactions
On Hacker News · 2
- Oct 30, 2026Open-source Grok Bot alternative3 points
- Oct 28, 2026OpenMausBot: Open-source Grok Bot alternative with a VM the bot can use1 point
On Bluesky · 2
- Oct 29, 2026💎 Hidden Gem! 💎 (1000+ new stars) 📦 milind-soni / OpenMausBot ⭐ 7,056 (+1,190) 🗒 TypeScript Open-source Grok Bot alternative with a… — @github-trending.bsky.social2 likes and reposts · 1 reply
- Oct 29, 2026💎 Hidden Gem! 💎 (1000+ new stars) 📦 milind-soni / OpenMausBot ⭐ 7,056 (+1,190) 🗒 TypeScript Open-source Grok Bot alternative with a… — @github-trending-js.bsky.social0 likes and reposts · 1 reply
In this repository5 other files it gives its agents.
- AGENTS.mdAGENTS.md
- verify-ombSkill
- windows-releaseSkill
- create-verification-skillSkill
- phone-harnessSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

