Skills reference
PortalJS ships a set of agentic skills — Claude Code commands like
/portaljs-new-portal and /portaljs-add-dataset that do the repetitive assembly of a data
portal. You describe intent; the skill writes the code.
What makes them skills
- First-class. Skills live in the repo alongside the template, are documented, and are tested end to end. They are not hidden helpers — they are the product's primary path.
- Composable. Each skill does one job and hands off to the next: plan with
/portaljs-architect, scaffold with/portaljs-new-portal, load data with/portaljs-add-datasetor migrate a whole catalog with/portaljs-migrate, enrich with/portaljs-add-chartor/portaljs-add-map, describe it with/portaljs-define-schema, swap the data source with/portaljs-connect-ckan, and go live with/portaljs-deploy. - Plain, editable output. Every skill writes ordinary Next.js, Tailwind, and React code into your project — no magic runtime interpreting a config at request time, nothing feature-gated behind a hosted product. You can clone, fork, and hand-edit everything they produce. This is what AI-native, not AI-only means.
The skills
| Skill | What it does |
|---|---|
/portaljs-architect | Advisory — turns your needs (data, scale, governance) into a recommended architecture before you build. Start here if you're unsure of the stack. |
/portaljs-new-portal | Scaffold a new portal (Home + Catalog + Showcase) from a brief — copies the template, substitutes your project name and description, installs deps, verifies the build. |
/portaljs-add-dataset | Add a CSV, TSV, JSON, or GeoJSON dataset — registers it in the catalog and renders its showcase automatically; large local files are pushed to Cloudflare R2 via Git LFS for you. |
/portaljs-add-resource | Attach another file (data dictionary, methodology, extra data) to an existing dataset — it becomes multi-resource and the showcase renders a section per file. |
/portaljs-add-chart | Add a line, bar, area, pie, or scatter chart to a dataset's showcase. |
/portaljs-add-map | Render a GeoJSON dataset on an interactive map and register it on the home page. |
/portaljs-define-schema | Infer a Frictionless Table Schema from a dataset's data, add license/source/keyword metadata, and surface a typed field table on its showcase. |
/portaljs-add-dcat | Make the portal harvestable — emit standards-compliant DCAT feeds (DCAT 2/3, DCAT-AP, DCAT-US, national profiles) in JSON-LD, Turtle, and RDF/XML so national/EU/US open-data portals can harvest its datasets. |
/portaljs-connect-ckan | Wire the portal to a CKAN backend over its API instead of static files. |
/portaljs-check-data-quality | Validate a dataset against its schema and flag quality issues (type mismatches, missing values, constraint violations). |
/portaljs-migrate | Harvest or migrate a whole catalog into the portal from CKAN, Socrata, OpenDataSoft, ArcGIS, or DCAT-US, over a canonical Frictionless/DCAT model. |
/portaljs-deploy | Build a static export and publish it to PortalJS Arc — Datopian-managed hosting on Cloudflare — with a live <slug>.arc.portaljs.com URL. |
Author your own
Skills are designed to be extended. Anyone can write a new one — see the skill authoring guide.
The roadmap extends this model across the whole data-portal lifecycle — ingest and migrate catalogs, wrangle and transform data, describe it with metadata, and publish — as a growing library of agentic skills. See the PortalJS vision for the upcoming skill families.
Where to go next
- Quickstart — install the skills and run them end to end.
- Core concepts — the ideas behind the skills.