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-dataset or migrate a whole catalog with /portaljs-migrate, enrich with /portaljs-add-chart or /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

SkillWhat it does
/portaljs-architectAdvisory — turns your needs (data, scale, governance) into a recommended architecture before you build. Start here if you're unsure of the stack.
/portaljs-new-portalScaffold 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-datasetAdd 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-resourceAttach 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-chartAdd a line, bar, area, pie, or scatter chart to a dataset's showcase.
/portaljs-add-mapRender a GeoJSON dataset on an interactive map and register it on the home page.
/portaljs-define-schemaInfer 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-dcatMake 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-ckanWire the portal to a CKAN backend over its API instead of static files.
/portaljs-check-data-qualityValidate a dataset against its schema and flag quality issues (type mismatches, missing values, constraint violations).
/portaljs-migrateHarvest or migrate a whole catalog into the portal from CKAN, Socrata, OpenDataSoft, ArcGIS, or DCAT-US, over a canonical Frictionless/DCAT model.
/portaljs-deployBuild 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