본문으로 건너뛰기
cccskills
무료GitHub에 공개

portaljs-new-portal

Scaffold a new PortalJS data portal from a brief. Copies the canonical template from examples/portaljs-catalog and substitutes project tokens. Use when starting a brand-new data portal project from scratch.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

실행 점수 미검증

설치 방법 보기

포함된 파일(2)

  • SKILL.md6.4 KB
  • references/reference.md3.9 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

PortalJS — New Portal

Overview

Scaffold a production-ready PortalJS data portal from a brief. The skill is interactive: if the brief is thin it interviews the user in three short rounds (mapped to the template's three surfaces — Home, Catalog, Showcase), echoes a brief back for confirmation, then copies examples/portaljs-catalog (locally or via a remote tiged fetch), substitutes placeholder tokens, sets the namespace mode and the UI language, seeds any datasets named in the interview, installs dependencies, and verifies the scaffold with a type check.

Prerequisites

  • Node.js >=22 and npm available on PATH.
  • Network access, unless a current local checkout of the portaljs repo is available (the resolver defaults to a remote fetch of the template).
  • A destination directory name that does not already contain files (or user consent to overwrite one that does).

Instructions

The canonical, full step-by-step workflow is .claude/commands/portaljs-new-portal.md — the single source of truth. Read and follow it when executing. Summary:

  1. Interview the user in up to three rounds — Home/basics (incl. the UI language, default English), Catalog & discovery (datasets, namespace mode theme vs owner), Showcase/views — skipping any round already answered by the input brief. Accept "use defaults" at any point.
  2. Confirm a short brief (name, slug, description, language, namespace, datasets, views) before building.
  3. Resolve the template source: prefer a remote tiged fetch of examples/portaljs-catalog at main (or PORTALJS_TEMPLATE_REF); use a local checkout only when it is current (has pages/[owner]/[slug].tsx) and the destination is outside that repo.
  4. Materialize the template into ./PROJECT_SLUG, asking first if the destination already exists and is non-empty.
  5. Substitute __PROJECT_NAME__, __PROJECT_SLUG__, __DESCRIPTION__ tokens across all files with perl -pi, escaping /, \, and & in the values.
  6. Set NAMESPACE_TYPE ('theme' or 'owner') in lib/datasets.ts per the interview.
  7. Set the UI language (skip for English): translate locales/en.json into locales/<code>.json (every key, {placeholders} verbatim, the plural forms the language uses, _intl BCP 47 tag such as it-IT), register it in lib/i18n.ts, set DEFAULT_LOCALE in next.config.js, and run npm run i18n:check.
  8. Seed datasets captured in Round 2 (via /portaljs-add-dataset or by hand), or clear datasets.json to [] if none were named.
  9. Run npm install inside the scaffolded portal.
  10. Verify with npm run i18n:check and npx tsc --noEmit (never next build here — it would corrupt a running dev server's .next/ directory).
  11. Report the scaffolded routes, namespace mode, language, and next steps.

Output

  • Created: a new directory ./PROJECT_SLUG/ containing the full examples/portaljs-catalog template with tokens substituted.
  • Modified: lib/datasets.ts (NAMESPACE_TYPE); datasets.json (seeded datasets or cleared to []); for a non-English portal, locales/<code>.json (created), lib/i18n.ts (registered) and next.config.js (DEFAULT_LOCALE).
  • Verified: npm run i18n:check and npx tsc --noEmit pass inside the scaffolded portal.
  • Result: a runnable portal at ./PROJECT_SLUG with Home (/), Catalog (/search), and Showcase (/@<namespace>/<slug>) surfaces wired up.

Error Handling

SymptomCauseFix
DIR_EXISTS./PROJECT_SLUG already exists and is non-emptyAsk the user for a different name or consent to remove it; then proceed.
Remote fetch failsBad PORTALJS_TEMPLATE_REF, network outage, or tiged unavailableTell the user plainly and ask to retry, use a different ref, or check network.
Stale local scaffold (pages/datasets/[slug].tsx)Old local clone missing pages/[owner]/[slug].tsxResolver already falls back to remote in this case — do not force local mode.
npm install failsNode <22 or no networkReport the error and ask the user to check Node version and connectivity.
tsc --noEmit failsToken substitution or manifest errorPrint the log and fix before reporting success — never report success with a failing type check.

Examples

Example 1 — Full brief up front

/portaljs-new-portal Auckland Open Data Portal — datasets published by several council
departments (multiple publishers). Start with ./data/parks.csv and ./data/budget.csv.

Infers name + description, picks NAMESPACE_TYPE = 'owner', asks for namespace values (e.g. parks-dept, finance), confirms the brief, scaffolds the template, and seeds both datasets at /@parks-dept/parks and /@finance/budget.

Example 2 — No arguments, full interview

/portaljs-new-portal

Runs all three interview rounds from scratch, accepting "use defaults" for any round, then confirms the brief before scaffolding.

Example 3 — Single-publisher portal with no datasets yet

/portaljs-new-portal Reference Data Hub — a single-team reference catalog, no data yet.

Picks NAMESPACE_TYPE = 'theme' with namespace reference, clears datasets.json to [], and reports /portaljs-add-dataset as the next step.

Resources

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Migrate a whole ArcGIS Hub site into a PortalJS Arc portal end-to-end. Harvests the Hub /data.json (DCAT-US) inventory, exports every FeatureService layer through the ArcGIS REST query API with resultOffset paging, converts each to the serverless dual tier (PMTiles render + GeoParquet query) with tabular items to Parquet, pushes everything to Cloudflare R2 via Git LFS, appends dual-tier datasets.json entries, and writes a source-vs-derived parity report. Use to move a City or sector ArcGIS Hub open-data portal onto PortalJS with no server-side compute.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

datopian/portaljs2.4천2026년 10월 21일 업데이트

Add a chart (line, bar, area, pie, or scatter) to a dataset's showcase in a PortalJS portal. Installs recharts, writes a reusable Chart component, and renders it in the showcase Views section. Use when visualizing a dataset already registered in datasets.json.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

datopian/portaljs2.4천2026년 10월 21일 업데이트

Add a dataset (CSV, TSV, JSON, or GeoJSON) to an existing PortalJS portal. Appends an entry to datasets.json so the catalog and showcase render it automatically; routes the data by source (local file vs remote URL) — R2 via Git LFS by default, remote URLs by passthrough. Use when registering a new dataset in a scaffolded portal.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

datopian/portaljs2.4천2026년 10월 21일 업데이트

Make a PortalJS portal harvestable by national/EU/US open-data portals — emit standards-compliant DCAT catalog feeds (DCAT 2/3, DCAT-AP, DCAT-US, national profiles) in JSON-LD, Turtle, and RDF/XML at build, with autodiscovery and per-profile conformance checking. Use when a portal needs to be harvested by data.europa.eu, data.gov, or a national open-data catalog.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

datopian/portaljs2.4천2026년 10월 21일 업데이트

Auto-ingest a geospatial file (GeoJSON, Shapefile, GeoPackage, KML/KMZ, FlatGeobuf, CSV-with-geometry) into a PortalJS portal on the user's own machine, with no server. Normalizes CRS to EPSG:4326, derives a PMTiles render tier and a GeoParquet query tier, pushes all three artifacts to Cloudflare R2 via Git LFS, and appends one dual-tier datasets.json entry the showcase auto-renders. Use when the source is a vector geo format that needs a map or spatial-query view.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

datopian/portaljs2.4천2026년 10월 21일 업데이트

Render a GeoJSON dataset on an interactive Leaflet map in the Views section of a dataset's showcase. Installs react-leaflet and a Map component, then renders the map for the chosen dataset. Use when a dataset's data is geographic and a map view is needed alongside the showcase's default metadata and download.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

datopian/portaljs2.4천2026년 10월 21일 업데이트

datopian의 스킬 모두 보기

이 스킬의 문제 신고