# Portaljs Connect Ckan

Wire a scaffolded PortalJS portal to a CKAN backend over its API.

- Repository: https://github.com/datopian/portaljs (2370 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-28
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add datopian/portaljs --skill portaljs-connect-ckan -g -a claude-code -y`
Codex: `npx skills add datopian/portaljs --skill portaljs-connect-ckan -g -a codex -y`
Cursor: `npx skills add datopian/portaljs --skill portaljs-connect-ckan -g -a cursor -y`
Gemini CLI: `npx skills add datopian/portaljs --skill portaljs-connect-ckan -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add datopian/portaljs`

## Description

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.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 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`) with `package.json`, `pages/`,
  `datasets.json`, `pages/search.tsx`, and `pages/[owner]/[slug].tsx` present.
- 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`](https://github.com/datopian/portaljs/blob/main/.claude/commands/portaljs-connect-ckan.md), the single source of truth. Read and follow it when executing. Summary:

The rest: https://github.com/datopian/portaljs/blob/HEAD/skills/portaljs-connect-ckan/SKILL.md
