PortalJS is a framework for building data portals that present searchable datasets through a home page, catalog, and dataset showcase. It is for teams that want to choose a data backend, scaffold a Next.js portal, load CSV or JSON data, connect services such as CKAN, and deploy the result. The catalogue entries are agent commands, skills, instructions, and a plugin that guide portal creation and data loading.
Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/datopian/portaljsnpx agentmods add skills/datopian/portaljs/portaljs-check-data-qualityWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/datopian/portaljs/portaljs-check-data-quality)<a href="https://agentmods.dev/skills/datopian/portaljs/portaljs-check-data-quality"><img src="https://agentmods.dev/badge/skills/datopian/portaljs/portaljs-check-data-quality/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/datopian/portaljs/portaljs-check-data-quality"><img src="https://agentmods.dev/badge/skills/datopian/portaljs/portaljs-check-data-quality.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00076 | $0.01457 |
| Opus 5.5 | $0.00030 | $0.00583 |
| Sonnet 5.5 | $0.00015 | $0.00291 |
| Haiku 4.5 | $0.00008 | $0.00146 |
Grade A, and why
portaljs-check-data-quality scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
allowed-tools: Bash(curl:*), Bash(awk:*), Bash(sort:*), Bash(head:*), Bash(wc:*) How it starts
The opening of the file, as written. The whole thing — 125 lines — stays where its author put it; the contents beside it link to each section on GitHub.
PortalJS — Check Data Quality
Overview
Run a read-only quality audit of one CSV or TSV file, local or remote, and return a
structured JSON report. The audit profiles every column — null/blank counts, inferred
value types, numeric ranges, likely year/date fields — and flags duplicate rows,
duplicate values in identifier-like columns, ambiguous overlapping year columns (e.g.
calendar year vs fiscal year), and mixed-type columns. It never edits the source
file, datasets.json, or any other project file; it only reads the target file (a
remote URL is downloaded to a temp file that is deleted before the run ends) and
prints a report. Use it before publishing a dataset with portaljs-add-dataset, or to
diagnose why a showcase renders wrong.
Prerequisites
python3onPATH— the audit logic runs as an embedded Python script; nothing is installed.- One CSV or TSV file, given as a local path or an
http/httpsURL. Only one file per run.
Instructions
The canonical, full step-by-step workflow is
.claude/commands/portaljs-check-data-quality.md —
the single source of truth. Read and follow it when executing. Summary:
- Gather input — the file path or URL to audit. If missing, ask for it; never dead-end.
- Resolve the source: if it's an
http/httpsURL, download it to a temp file first; otherwise use the local path as given. - Validate the extension is
.csvor.tsv. If not, or the file is missing, or the header row is empty, stop and surface the error JSON as-is — do not guess a fix. - Profile every column: null/blank counts, distinct values, sample values, inferred per-value type (boolean/integer/float/date/string), numeric min/max, and year range for columns whose name looks year-like.
- Derive findings from the profiles — duplicate rows, missing-value ratios, invalid
year values, mixed types, suspect negative values, duplicate identifier values, and
ambiguous overlapping year columns — each tagged
critical,warning, orinfo. - Assemble the JSON report (
status, file metadata,findings,recommendations,column_profiles), print it, and clean up the temp file if one was created. - Relay the report to the user as-is; do not modify the source file,
datasets.json, or any other project file based on the findings — that's a separate, explicit step.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 125 lines · 76 tokens per session scan A 857d831e3194
portaljs-check-data-quality is a skill published in the GitHub repository datopian/portaljs (2,369 stars, last pushed today), licensed MIT. It adds 76 tokens to every session and 1,457 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
accounting-software-selection
Scores shortlisted accounting packages against 57 evidence-backed fields, emitted as CSV, SQL, JSON Schema or Notion on request. Use for choosing accounting software.
accounting-audit-system-builder
Routes an accounting or audit request to the right module skill, from software selection through monthly closing, asking only what is missing. Use for books of accounts or audit files.
data-cleaning
Use when a raw table is too dirty to trust — nulls, sentinels, duplicate rows, category sprawl, mixed types, bad dates — and you need a re-runnable clean() plus a schema gate that fails loud. NOT emitting .xlsx (that is spreadsheet-ops), NOT acquiring rows (that is data-scraper), NOT parsing PDF/HTML into rows (that…
catalog-import-export
Import and export your entire product catalog in bulk using your platform's native tools or dedicated apps, with validation and scheduled sync support.
visual-data-dictionary
Build a Data Schematic with its Data Dictionary beside it — an interactive qsv viz smart dashboard driven by an LLM-inferred JSON Schema data dictionary, browsable in-page next to the charts. Use when the user asks for a Data Schematic, a visual data dictionary, a documented dashboard or a dictionary-driven dashboard…
build-dashboard
Build an interactive HTML dashboard — a Data Schematic — with charts, filters, and tables. Use when creating a dashboard, an executive overview with KPI cards, turning query results into a shareable self-contained report, building a team monitoring snapshot, or needing multiple charts with filters in one…