portaljs

v0.1.0 by Datopian

Agent skills that build data portals — scaffold a portal, add datasets, charts and maps, connect CKAN, and generate DCAT/Croissant metadata

MIT License
Claude Code Adapters (declared)

Installation

Open Claude Code and run this command:

/plugin install portaljs@claude-code-plugins-plus

Use --global to install for all projects, or --project for current project only.

What It Does

<p align="center"> <img src="assets/portaljs-logo-spin.svg" alt="PortalJS" width="96" height="96" /> <h1 align="center">PortalJS</h1> <p align="center"> <b>The AI-native framework for building data portals.</b> <br /> Describe the portal you want — your agent helps you choose an architecture, scaffolds it, and loads your data. <br /> <br /> <a href="https://www.portaljs.com/docs">Docs</a> · <a href="https://github.com/datopian/portaljs/discussions">Discussions</a> · <a href="https://github.com/datopian/portaljs/issues/new">Report a bug</a> <br /> <br /> <a href="https://www.npmjs.com/package/create-portaljs"><img src="https://img.shields.io/npm/v/create-portaljs?logo=npm&logoColor=white&label=create-portaljs&color=cb3837" alt="npm version" /></a> <a href="https://github.com/datopian/portaljs/stargazers"><img src="https://img.shields.io/github/stars/datopian/portaljs?logo=github&logoColor=white&label=Stars&color=blue" alt="GitHub stars" /></a> <a href="https://discord.gg/krmj5HM6He"><img src="https://img.shields.io/badge/Discord-Join-5865F2?logo=discord&logoColor=white" alt="Join our Discord" /></a> <a href="license"><img src="https://img.shields.io/badge/License-MIT-blue" alt="MIT License" /></a> </p> </p>


Skills (14) plugin-local skills

arcgis-to-portaljs View full skill →

Migrate a whole ArcGIS Hub site into a PortalJS Arc portal end-to-end.

ReadWriteEditBash(ogr2ogr:*)Bash(ogrinfo:*)Bash(tippecanoe:*)Bash(duckdb:*)Bash(git:*)Bash(curl:*)Bash(jq:*)Bash(npx:*)Bash(node:*)Bash(mkdir:*)Bash(cp:*)Bash(wc:*)Bash(command:*)WebFetch
portaljs-add-chart View full skill →

Add a chart (line, bar, area, pie, or scatter) to a dataset's showcase in a PortalJS portal.

ReadWriteEditBash(npm:*)Bash(npx:*)
portaljs-add-dataset View full skill →

Add a dataset (CSV, TSV, JSON, or GeoJSON) to an existing PortalJS portal.

ReadWriteEditBash(npm:*)Bash(npx:*)Bash(git:*)Bash(curl:*)Bash(mkdir:*)Bash(cp:*)WebFetch
portaljs-add-dcat View full skill →

Make a PortalJS portal harvestable by national/EU/US open-data portals — emit standards-compliant DCAT catalog feeds (DCAT 2/3, DCAT-AP, DCAT-US, national profiles) in JSON-LD, Turtle, and RDF/XML at build, with autodiscovery and per-profile conformance checking.

ReadWriteEditBash(npm:*)Bash(npx:*)Bash(node:*)WebFetch
portaljs-add-geo View full skill →

Auto-ingest a geospatial file (GeoJSON, Shapefile, GeoPackage, KML/KMZ, FlatGeobuf, CSV-with-geometry) into a PortalJS portal on the user's own machine, with no server.

ReadWriteEditBash(ogr2ogr:*)Bash(ogrinfo:*)Bash(tippecanoe:*)Bash(duckdb:*)Bash(git:*)Bash(curl:*)Bash(npx:*)Bash(node:*)Bash(mkdir:*)Bash(cp:*)Bash(wc:*)Bash(command:*)WebFetch
portaljs-add-map View full skill →

Render a GeoJSON dataset on an interactive Leaflet map in the Views section of a dataset's showcase.

ReadWriteEditBash(npm:*)Bash(npx:*)WebFetch
portaljs-add-resource View full skill →

Add another file (resource) to an EXISTING dataset in a PortalJS portal — a data dictionary, methodology, or an additional data file.

ReadWriteEditBash(npm:*)Bash(curl:*)Bash(mkdir:*)Bash(cp:*)WebFetch
portaljs-architect View full skill →

Recommend a data-portal architecture (storage, compute, catalog, access, hosting, metadata) from stated needs, then hand off to the build skills.

ReadWriteBash(du:*)Bash(wc:*)Bash(ls:*)Bash(head:*)
portaljs-check-data-quality View full skill →

Audit a local or remote tabular file (CSV/TSV) for common data quality issues — schema, nulls, types, duplicates.

Bash(curl:*)Bash(awk:*)Bash(sort:*)Bash(head:*)Bash(wc:*)
portaljs-connect-ckan View full skill →

Wire a scaffolded PortalJS portal to a CKAN backend over its API.

ReadWriteEditBash(npm:*)Bash(npx:*)WebFetch
portaljs-define-schema View full skill →

Define a dataset's metadata profile — infer a Frictionless Table Schema from its data, add Data Package metadata (license, sources, keywords), and write it into datasets.

ReadWriteEditBash(npx:*)Bash(node:*)Bash(head:*)
portaljs-deploy View full skill →

Deploy a PortalJS portal to PortalJS Arc — Datopian-managed static hosting on Cloudflare.

ReadWriteEditBash(npm:*)Bash(npx:*)Bash(curl:*)
portaljs-migrate View full skill →

Migrate (harvest) datasets between open-data platforms.

ReadWriteEditBash(npm:*)Bash(npx:*)Bash(node:*)Bash(curl:*)Bash(git:*)WebFetch
portaljs-new-portal View full skill →

Scaffold a new PortalJS data portal from a brief.

ReadWriteEditBash(npm:*)Bash(npx:*)Bash(cp:*)Bash(mkdir:*)Bash(git:*)

Use Cases

Reference implementations live in examples/:

Example Backend
portaljs-catalog Canonical template — Home + Catalog + Showcase over a static manifest
portaljs-template Minimal single-page starter
ckan · ckan-ssg CKAN
github-backed-catalog GitHub
dataset-frictionless Frictionless Data Package
fivethirtyeight · openspending · turing Real-world portals

Ready to use portaljs?

View on GitHub