PortalJSAIagents

PortalJS is now AI-native: build a data portal with an agent

2 min read
Anuar Ustayev

Anuar Ustayev

PortalJS is now the AI-native, open-source framework for building data portals. Spin one up with a single command, then work with an AI agent that runs PortalJS skills to assemble the rest β€” and what comes out is plain Next.js code you own. No lock-in, any backend.

Start with one command

npm create portaljs@latest my-portal
cd my-portal

That scaffolds a working portal β€” three surfaces out of the box: a search-first Home, a full-text Catalog, and a per-dataset Showcase.

Then let the agent build

The shift is in how you go from there. Instead of wiring components by hand, you describe intent to an AI agent (e.g. Claude Code) and it runs PortalJS's agentic skills β€” composable commands that do the repetitive assembly and write real, editable code:

SkillWhat it does
/portaljs-add-datasetAdd a CSV, JSON, or GeoJSON dataset β€” copies data in, generates a page, registers it in the catalog.
/portaljs-add-chart / /portaljs-add-mapAdd a chart (recharts) or an interactive Leaflet map to a dataset.
/portaljs-define-schemaInfer a Frictionless Table Schema and surface a typed field table.
/portaljs-connect-ckanWire the portal to a CKAN backend over its API instead of static files.
/portaljs-migrateHarvest a whole catalog from CKAN, Socrata, OpenDataSoft, ArcGIS, or DCAT-US.
/portaljs-deployGo live.

Each one interviews you, then writes ordinary Next.js + Tailwind. Delete PortalJS later and your portal still runs β€” there's no runtime to rip out.

An advisory layer, not just scaffolding

If you're unsure of the stack, start with /portaljs-architect. It turns your needs β€” what your data is, how big it gets, what it's for β€” into a recommended architecture, weighing cost and lock-in explicitly.

The default pushes compute toward DuckDB over Parquet on object storage (Cloudflare R2) instead of a warehouse that bills per scan. A refreshed billion-row job can quietly run ~27k/yronpayβˆ’perβˆ’scanpricing;thesamequeryoverParquetonobjectstorageisΒ 27k/yr on pay-per-scan pricing; the same query over Parquet on object storage is ~0 recurring. Warehouses stay fully supported β€” the agent just makes the trade-off visible before you commit.

Open by default

Frictionless-native authoring, DCAT interop for harvest and export, static-first with an opt-in runtime mode. Open standards in, plain code out.


Try it:

npm create portaljs@latest my-portal

…and ⭐ star us on GitHub. Tell us what you build in our Discord.