by ChartMind AI (LX AI)
I built ChartMind AI after watching teammates waste hours trying different chart types until one finally showed the pattern they suspected. The tool takes three inputs: a quick profile of the uploaded data, a short natural‑language prompt that states the question you want answered, and a set of evidence‑based rules from NN/g about which visual works best for each situation. The output is a single JSON object that names the chart type, gives a ready‑to‑paste configuration snippet for Chart.js, D3, or Vega‑Lite, and includes a short rationale you can share with colleagues.
When you drop a CSV file into the browser, the first step is a lightweight profiling run that records five concrete metrics:
These numbers form a data‑shape vector that drives a rule engine. The engine compares the vector to a decision tree that encodes NN/g guidance on when a bar chart beats a pie, when a scatter plot reveals correlation that a line chart hides, and when a heatmap is the most compact way to show a matrix.
The prompt you type after uploading the file is tokenised and matched to one of six intent categories we defined early in the product:
Each intent maps to a subset of chart types. For “Trend over time” the candidates are line, area, and column charts. For “Part‑to‑whole” the candidates are stacked bar, pie, and donut. The prompt therefore narrows the field before the NN/g rules are applied.
Because the prompt is processed locally in the browser, no data ever leaves your machine. This design also lets you work offline or inside a strict corporate network without worrying about data exfiltration. For more on keeping prompts safe, see the OWASP LLM Prompt Injection Cheat Sheet.
A data‑shape prompt is a short sentence you type after uploading your file. It does not need to be technical; it simply states the insight you are after. Examples we see in daily use:
The prompt is tokenised and matched to the intent categories listed above. Each intent maps to a subset of chart types. For “Trend over time” the candidates are line, area, and column charts. For “Part‑to‑whole” the candidates are stacked bar, pie, and donut. The prompt therefore narrows the field before the NN/g rules are applied.
Because the prompt is processed locally in the browser, no data ever leaves your machine. This design also lets you work offline or inside a strict corporate network without worrying about data exfiltration. For guidance on handling secrets in configuration files, see the Agents Squads config‑file guide.
NN/g’s articles on chart selection give concrete, evidence‑based rules. I encoded the most frequently cited ones as follows:
The rule engine checks the data‑shape vector against these conditions. If more than one rule matches, the engine picks the chart type that appears highest in the NN/g priority list for the matched intent.
The profiling step produces five numbers that become the vector components. Below is an example table that shows how different datasets map to the vector.
| Dataset description | Numeric columns | Categorical columns | Has timestamp? | Missing values | Cardinality (max) |
|---|---|---|---|---|---|
| Monthly sales by product (12 months, 50 products) | 1 | 1 | Yes | 0 | Medium |
| Survey responses with 20 Likert items | 20 | 0 | No | 5 % scattered | N/A |
| Experiment log with treatment, outcome, time | 2 | 1 | Yes | 2 % in outcome | Low |
| Geolocation points with latitude, longitude, altitude | 3 | 0 | No | 0 | N/A |
Each row shows how the raw counts translate into the vector that the rule engine consumes. The vector is then compared to the decision tree described earlier.
After the data‑shape vector is ready, the system looks at the natural‑language prompt. The prompt is lower‑cased, stripped of punctuation, and split into tokens. A simple lookup table maps token groups to intent categories:
If the prompt contains tokens that match more than one group, the system picks the intent with the highest token count. If there is a tie, the default intent is “Category comparison”. Once the intent is chosen, the engine limits the candidate chart types to the subset associated with that intent before applying the NN/g rules.
When the engine has settled on a chart type, it assembles a JSON payload with three fields:
chartType – a string such as "line", "bar", "scatter", "heatmap"config – a string containing the configuration snippet for the target library (Chart.js, D3, or Vega‑Lite)rationale – a short sentence explaining why this chart was chosen based on the data‑shape vector and the promptBelow is an example of the JSON you would receive for a dataset with two numeric columns, no timestamps, and a prompt asking for a relationship between advertising spend and click‑through rate:
{
"chartType": "scatter",
"config": "{\"type\":\"scatter\",\"data\":{\"datasets\":[{\"label\":\"Ad spend vs CTR\",\"data\":[{\"x\":100,\"y\":2.5},{\"x\":200,\"y\":3.1}]},\"options\":{\"scales\":{\"x\":{\"type\":\"linear\",\"position\":\"bottom\"}}}}",
"rationale": "Scatter plot selected because prompt indicates correlation and data‑shape shows two numeric columns, no time component."
}
You can copy the config string directly into your charting library initialization code. The rationale field is useful for documentation or for showing stakeholders why a particular visual was chosen.
ChartMind AI does not guarantee that the suggested chart will always be the perfect choice for every audience. The system follows published heuristics and the data you provide, but it cannot know the specific preferences of your stakeholders or the exact story you want to tell. It does not claim to be a 100 % accurate predictor, nor does it promise that you will never need to adjust the generated configuration. The tool is meant to reduce the amount of trial‑and‑error, not to eliminate it entirely.
I keep a written checklist next to every release that touches this topic. The list is boring on purpose: name the owner, name the evidence artifact, and name the rollback. If a step cannot produce a file, a ticket, or a log line, it is not a step — it is a wish.
| Signal | What to record | Stop-ship? |
|---|---|---|
| Unexpected write or send | Tool name, args, identity | Yes until gated |
| Missing confirmation on destructive action | Call path and bypass | Yes |
| Untrusted text treated as instruction | Source surface and resulting action | Yes for agent reach |
| Scanner clean, judgment open | Deferred items + owner | Only if core path safe |
chartmind-ai helps with the measurable first pass. Architecture choices, legal sign-off, and customer-facing claims still need a human owner. Treat every checklist row as decision support, not a certificate.
When a prospect asks whether the product "covers everything," I answer with the boundary: automated checks catch known patterns; novel chains and policy judgment still need review. That honesty keeps support load down and keeps the blog aligned with what the product actually does.
If you need a second opinion, pair this write-up with the references below and with your own staging reproduction. Do not skip the reproduction step just because a model wrote a confident summary.
Turn raw data into the right chart and clear insights
Want to try the product? ChartMind AI
Generated 2026-09-17 · primary sources only · no fabricated traffic metrics