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
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add datopian/portaljs --skill portaljs-architectgit clone --depth 1 https://github.com/datopian/portaljsWrote 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-architect)<a href="https://agentmods.dev/skills/datopian/portaljs/portaljs-architect"><img src="https://agentmods.dev/badge/skills/datopian/portaljs/portaljs-architect/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-architect"><img src="https://agentmods.dev/badge/skills/datopian/portaljs/portaljs-architect.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.00060 | $0.01550 |
| Opus 5 | $0.00030 | $0.00775 |
| Sonnet 5 | $0.00012 | $0.00310 |
| Haiku 4.5 | $0.00006 | $0.00155 |
Grade A, and why
portaljs-architect scanned grade A with 0 findings 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 10d 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.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 108 lines — stays where its author put it; the contents beside it link to each section on GitHub.
PortalJS — Architect
Overview
The advisory entry point for a PortalJS project. Before anything gets scaffolded, this
skill works out what to build: given the kind of portal, the shape of the data, and its
purpose, it fills six architecture slots (storage, catalog, compute, access, hosting,
metadata), resolves two build-time knobs (per-dataset data tier and the portal-wide
DATA_QUERY mode), and hands off to the concrete build skills. It decides; it does not
build. When the brief is thin it interviews in short rounds and never dead-ends — every
question has a sensible default, reachable by replying "use defaults."
Prerequisites
- A rough idea of the portal's purpose and data (exact numbers are not required — the interview supplies defaults for anything missing).
- Optional: local files or a directory of sample data to inspect for size and shape.
- No PortalJS project needs to exist yet; this skill runs before scaffolding.
Instructions
The canonical, full step-by-step workflow lives in
.claude/commands/portaljs-architect.md —
that file is the single source of truth. Follow it when executing this skill:
- Parse
$ARGUMENTSfor anything already specified, then interview for what's missing, one round at a time: (1) what's being built, (2) what the data is, (3) what it's for, (4) constraints. Accept "use defaults" at any point. Inspect named files/directories withdu -shand line counts to ground size guesses. - Derive the recommendation by matching the answers against the decision tables —
Storage/Catalog/Compute by data volume and query needs, Access/Hosting by public
vs. private, Metadata by standards-compliance needs — then resolve the two
build-time knobs: per-dataset data tier (
inline | LFS | external) and the portal-wideDATA_QUERYmode (flat | duckdb). - Echo the architecture brief (stack, reasoning per slot, deviations from default, deferred items) and wait for confirmation ("go") or corrections.
- On confirmation, persist the brief to
./ARCHITECTURE.mdin the working directory. - Hand off to the build skills —
/portaljs-new-portal,/portaljs-add-dataset,/portaljs-connect-ckan,/portaljs-define-schema,/portaljs-deploy— mapped from the brief, and offer to run the first one.
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.
- 10d ago First seen · 108 lines · 60 tokens per session scan A 0d1b37b22199
portaljs-architect is a skill published in the GitHub repository datopian/portaljs (2,350 stars, last pushed 2d ago), licensed MIT. It adds 60 tokens to every session and 1,550 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
data-mesh-expert
Expert-level data mesh architecture, domain-oriented ownership, data products, federated governance, and self-serve platforms. Use when the user mentions architecture, domain driven, data products, governance, or platform, or when the task involves Data Mesh Principles, Domain-Oriented Data Ownership, Data as a…
rag-knowledge
Work with the RAG knowledge base — ingest documents, run semantic search, manage collections, or add a sync source/connector (Google Drive, S3). Use when populating or debugging the knowledge base, tuning retrieval, or adding a new document source. This project uses {{ cookiecutter.vectorstore }} + {{…
senior-data-engineer
World-class data engineering skill for building scalable data pipelines, ETL/ELT systems, real-time streaming, and data infrastructure. Expertise in Python, SQL, Spark, Airflow, dbt, Kafka, Flink, Kinesis, and modern data stack. Includes data modeling, pipeline orchestration, data quality, streaming quality…
architecture-paradigm-pipeline
Applies pipes-and-filters for sequential data transformations. Use when data flows through discrete stages like ETL, streaming analytics, or CI/CD pipelines.
ckan-mcp
MCP server for exploring CKAN-based open data portals (dati.gov.it, data.gov, data.gov.uk, open.canada.ca, demo.ckan.org, and any other CKAN instance). Also covers data.europa.eu via its REST API (not CKAN). Use this skill whenever the user: asks about open data, public datasets, or data portals; mentions a country…
postgres-semantic-search
PostgreSQL-based semantic and hybrid search with pgvector and ParadeDB. Use when implementing vector search, semantic search, hybrid search, or full-text search in PostgreSQL. Covers pgvector indexing, hybrid FTS/BM25 + RRF, ParadeDB, reranking, halfvec, multilingual search, query translation, and domain evals.…