portaljs
Agent skills that build data portals — scaffold a portal, add datasets, charts and maps, connect CKAN, and generate DCAT/Croissant metadata
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
Migrate a whole ArcGIS Hub site into a PortalJS Arc portal end-to-end.
Add a chart (line, bar, area, pie, or scatter) to a dataset's showcase in a PortalJS portal.
Add a dataset (CSV, TSV, JSON, or GeoJSON) to an existing PortalJS portal.
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.
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.
Render a GeoJSON dataset on an interactive Leaflet map in the Views section of a dataset's showcase.
Add another file (resource) to an EXISTING dataset in a PortalJS portal — a data dictionary, methodology, or an additional data file.
Recommend a data-portal architecture (storage, compute, catalog, access, hosting, metadata) from stated needs, then hand off to the build skills.
Audit a local or remote tabular file (CSV/TSV) for common data quality issues — schema, nulls, types, duplicates.
Wire a scaffolded PortalJS portal to a CKAN backend over its API.
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.
Deploy a PortalJS portal to PortalJS Arc — Datopian-managed static hosting on Cloudflare.
Migrate (harvest) datasets between open-data platforms.
Scaffold a new PortalJS data portal from a brief.
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 |