Portaljs Connect Ckan
Wire a scaffolded PortalJS portal to a CKAN backend over its API.
Install
npx skills add datopian/portaljs --skill portaljs-connect-ckan -g -a claude-code -y- Repository
- datopian/portaljs2.4k
- Category
- Engineering
- Updated
- 7d ago
- License
- MIT
- Context cost
- Lightabout 1,362 tokens
- Runs scripts
- No, instructions only
What it does
Wire a scaffolded PortalJS portal to a CKAN backend over its API. Generates a tiny server-side fetch client (no runtime dependency) and feeds the /search catalog and /@namespace/slug showcases from CKAN instead of datasets.json. Use when connecting an existing portal to a live CKAN instance instead of a static manifest.
PortalJS, Connect CKAN
Overview
Connect an existing portaljs-catalog portal to a live CKAN backend for the "decoupled /
any backend" path. The portal stops reading the static datasets.json manifest (and files
in /public/data/) and instead feeds its two data surfaces, the /search catalog and
the /@namespace/slug showcases, straight from a CKAN instance's REST API
(package_search / package_show) through a generated fetch client. Output is plain,
editable Next.js code with no runtime dependency, never @portaljs/ckan, whose bundle
wires React UI components to React 18 internals and crashes at import under the template's
React 19. Pages fetch CKAN server-side in getStaticProps/getStaticPaths, so the catalog
is pre-rendered at build time and the site can still be statically deployed. Run this right
after portaljs-new-portal to swap a freshly scaffolded portal's sample data over to CKAN.
Prerequisites
- A scaffolded PortalJS portal (see
portaljs-new-portal) withpackage.json,pages/,datasets.json,pages/search.tsx, andpages/[owner]/[slug].tsxpresent. - A CKAN base URL that is publicly reachable, e.g.
https://demo.dev.datopian.com. - Node 18+ and npm available in the portal directory (no new packages are installed).
Instructions
The canonical, full step-by-step workflow is
.claude/commands/portaljs-connect-ckan.md, the single source of truth. Read and follow it when executing. Summary:
