Install any skill in seconds. Free to start, no credit card required.
Get Started Free →datopian/portaljs-connect-ckan
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.
Passed 14 of 21 test cases with the skill, and 9 of 21 without it.
and 5 more in the full report
7 fixed8 passed either way6 still failing1 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 7 test cases the skill fixed. Same model, same prompt, with and without the skill.
When checking the organization filter 'finance-dept', the CKAN server returns success: false. What should happen next?
| Checked | Without skill | With skill |
|---|---|---|
| Fetches valid organization names using the organization_list API action | Missed | Passed |
| Prompts the user to choose from the valid organizations instead of crashing | Missed | Passed |
The instructions your model reads when the skill loads.
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.
portaljs-new-portal) with package.json, pages/,
datasets.json, pages/search.tsx, and pages/[owner]/[slug].tsx present.https://demo.dev.datopian.com.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:
$ARGUMENTS — CKAN base URL (required), org filter (optional), group
filter (optional), portal directory (default .). If the URL is missing, interview the
user; never dead-end with a missing-input error.portaljs-catalog portal; if not, suggest
portaljs-new-portal instead of failing silently.package_search?rows=1, and validate each org
filter via organization_show; on failure, explain and re-prompt rather than dead-ending.lib/ckan.ts — a self-contained server-side fetch client wrapping
package_search and package_show, with DMS, ORG_FILTER, GROUP_FILTER, and
MAX_DATASETS as editable constants.pages/search.tsx to list datasets from package_search, linking each to
/@namespace/slug via datasetHref; leave pages/index.tsx untouched.test cases passed, vs 9 / 21 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.