Agent skill

Portaljs Deploy

by datopian in datopian/portaljs

Deploy a PortalJS portal to PortalJS Arc — Datopian-managed static hosting on Cloudflare.

MITAuto-check passedDevOps & Cloud

Install Portaljs Deploy

skills CLI
$ npx skills add datopian/portaljs --skill portaljs-deploy -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install datopian/portaljs portaljs-deploy --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/datopian/portaljs.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/portaljs-deploy .claude/skills/portaljs-deploy && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
portaljs-deploy
GitHub stars
2.4k
Token cost
~1.4k tokens
SKILL.md length
582 words
Files
2 (incl. references)
Skills in repo
14
Repo updated
First seen
Licence
MIT

At a glance

Deploy a PortalJS portal to PortalJS Arc — Datopian-managed static hosting on Cloudflare.

  • Works in 6 steps: Gather input — portal directory (default… → Resolve the Arc token: read… → Ensure next.config.js sets output:… → …
  • A portal is ready to publish
  • SKILL.md covers Overview, Prerequisites, Instructions and Output, plus 3 more sections
  • Calls npm and git; reaches slug.arc.portaljs.com; needs PORTALJS_TOKEN

What it does

Portaljs Deploy is an agent skill from datopian/portaljs. Deploy a PortalJS portal to PortalJS Arc — Datopian-managed static hosting on Cloudflare. Builds a static export, uploads it, and returns a live SLUG.arc.portaljs.com URL. One command, one target. Use when a portal is ready to publish or redeploy to a live URL.

Its SKILL.md is about 1.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/reference.md`). Compatibility notes: Claude Code with PortalJS portals (Next.js 14, React 18, Node 18+). Runs from any project via the plugin, a personal ~/.claude/commands install, or a portaljs…

It sits in DevOps & Cloud, covering Deployment. It works with Cloudflare, npm, Next.js and Git. The repository describes itself as: 🌀 AI-native framework for building data portals. Scaffold a full portal from a brief and load datasets in minutes with agentic skills — any backend (CKAN, GitHub, Frictionless). The licence is MIT.

When your agent uses it

  • A portal is ready to publish
  • Redeploy to a live URL

Example prompts

  • “/portaljs-deploy”

Requirements

  • A credential in PORTALJS_TOKEN
  • Compatibility (from SKILL.md): Claude Code with PortalJS portals (Next.js 14, React 18, Node 18+). Runs from any project via the plugin, a personal ~/.claude/commands install, or a portaljs clone.
  • Pre-approved tools (allowed-tools): Read, Write, Edit, Bash(npm:*), Bash(npx:*), Bash(curl:*)

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Gather input — portal directory (default .) and slug (default from package.json
  2. Resolve the Arc token: read PORTALJS_TOKEN, else ~/.portaljs/credentials; if
  3. Ensure next.config.js sets output: 'export' and images: { unoptimized: true },
  4. Verify the export carries no dataset bytes — run npm run check-export (or
  5. Tar the out/ directory and POST it to $PORTALJS_ARC_API/v1/deploy?slug=
  6. Report the live URL, file count, upload size, and R2-vs-inline dataset counts.

What it can do on your machine

Read from SKILL.md and the folder at commit d5c096a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Bash(npm:*)
    • Bash(npx:*)
    • Bash(curl:*)

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • slug.arc.portaljs.com

    Also links to:

    • arc.portaljs.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • PORTALJS_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Claude Code with PortalJS portals (Next.js 14, React 18, Node 18+). Runs from any project via the plugin, a personal ~/.claude/commands install, or a portaljs clone.

    From compatibility in the SKILL.md frontmatter.

Context cost

Portaljs Deploy loads about 1.4k tokens when it runs, and up to ~2.4k if it reads all its reference files. Until then it costs about 69 tokens; SKILL.md has 582 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~69
When it runs · the whole SKILL.md, loaded when a task matches
~1.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~2.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from datopian/portaljs at commit d5c096a, republished under its MIT licence (© datopian). 582 words, ~1,354 tokens.

Download SKILL.mdSave it as .claude/skills/portaljs-deploy/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
portaljs-deploy
description
Deploy a PortalJS portal to PortalJS Arc — Datopian-managed static hosting on Cloudflare. Builds a static export, uploads it, and returns a live SLUG.arc.portaljs.com URL. One command, one target. Use when a portal is ready to publish or redeploy to a live URL.
allowed-tools
Read, Write, Edit, Bash(npm:*), Bash(npx:*), Bash(curl:*)
compatibility
Claude Code with PortalJS portals (Next.js 14, React 18, Node 18+). Runs from any project via the plugin, a personal ~/.claude/commands install, or a portaljs clone.
version
1.0.0
author
Datopian <hello@datopian.com>
license
MIT
tags
portaljs, data-portal, deploy, hosting, cloudflare, static

PortalJS — Deploy

Overview

Publish an existing PortalJS portal to PortalJS Arc — Datopian's managed static hosting on Cloudflare. Build a static export, upload it to the Arc API, and print a live https://SLUG.arc.portaljs.com URL. Re-running redeploys the same portal (idempotent on the slug). This is a single-target skill — it deploys to Arc only. For self-hosting, run npm run build and upload out/ to any static host; no skill required for that path. Arc serves static exports only — SSR is not hosted on Arc yet.

Prerequisites

  • A PortalJS portal directory with a package.json that lists next as a dependency.
  • Node 18+ and npm on PATH (the Arc device-login flow uses Node's global fetch).
  • curl and tar available for packaging and upload.
  • A PortalJS Arc token — read from PORTALJS_TOKEN, or ~/.portaljs/credentials ({"token":"…"}). If neither exists, the skill signs in on demand via a device-code flow; no manual token copying required.
  • If the portal stores large data in Git LFS/R2, do not run git lfs pull before deploying — large datasets are served from Cloudflare R2 via absolute URLs in datasets.json, not copied into the export.

Instructions

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

  1. Gather input — portal directory (default .) and slug (default from package.json name or directory name, slugified). Confirm the directory is a Next.js project; reject reserved slugs (www, api, admin, staging, arc).
  2. Resolve the Arc token: read PORTALJS_TOKEN, else ~/.portaljs/credentials; if missing, run the device-authorization sign-in flow and save the returned token.
  3. Ensure next.config.js sets output: 'export' and images: { unoptimized: true }, then run npm run build; stop if the build fails.
  4. Verify the export carries no dataset bytes — run npm run check-export (or scripts/check-export.mjs) to catch Git LFS pointer leaks and oversized data files.
  5. Tar the out/ directory and POST it to $PORTALJS_ARC_API/v1/deploy?slug=<slug> with the bearer token; handle 200/401/409/400/413 responses distinctly.
  6. Report the live URL, file count, upload size, and R2-vs-inline dataset counts.
Show full SKILL.md (254 more words)Show less

Output

  • Modified (if needed): next.config.js — adds output: 'export' and images: { unoptimized: true } when absent, preserving the rest of the config.
  • Created (on first sign-in): ~/.portaljs/credentials (mode 0600).
  • Verified: npm run build exits 0, out/index.html exists, the export-hygiene check passes.
  • Result: the portal is live at https://SLUG.arc.portaljs.com; re-running updates the same slug in place.

Error Handling

SymptomCauseFix
NOT_A_PORTAL errorNo next dependency found in PORTAL_DIR/package.jsonRun from a valid portal directory, or pass the correct path.
Slug rejectedDerived slug is reserved (www, api, …) or not a valid DNS labelPass an explicit --slug <name>.
Build fails (non-zero exit)App/config error surfaced in npm run buildPrint the log, fix the error, never deploy a failing build.
check-export failsGit LFS pointer leaked into out/, or a data file exceeds the size budgetReference large data by absolute R2 URL via portaljs-add-dataset; don't git lfs pull before building.
401 on uploadToken invalid, expired, or revokedRe-run the device sign-in flow once, retry the upload; stop if it 401s again.
409 on uploadSlug already taken by another accountChoose a different --slug.
400 / 413 on uploadMalformed slug or export too largeRead the JSON error field and address the specific cause.

Examples

Example 1 — Deploy the current directory with the default slug
/portaljs-deploy
Example 2 — Deploy with an explicit slug
/portaljs-deploy --slug my-open-data
Example 3 — Non-interactive deploy from CI with a token env var
bash
export PORTALJS_TOKEN=arc_live_xxxxxxxx
/portaljs-deploy ./portals/city-budget --slug city-budget

Resources

© datopian, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in skills/portaljs-deploy of datopian/portaljs.

  • SKILL.md
  • references/reference.md

Open the folder on GitHubat commit d5c096a

Compare with similar skills

Portaljs Deploy next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Portaljs Deploy compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Portaljs Deploy this skilldatopian/portaljs2.4k—~1.4kAutomated safety check: PassMIT
Deploy Agentsundial-org/awesome-openclaw-skills663—~1.6kAutomated safety check: PassNone
Nextjs On Cloudflarecloudflare/skills3k2 repos~678Automated safety check: PassApache-2.0
Prepare Cloudflare Production DeploymentLubomirGeorgiev/cloudflare-workers-nextjs-saas-template786—~5.9kAutomated safety check: NotesMIT
Convex Self Hostingwaynesutton/markdown-site628—~1.4kAutomated safety check: PassMIT
Homerail Install Opsxiaotianfotos/homerail991—~2kAutomated safety check: PassMIT

Similar skills

  • Deploy Agent

    sundial-org/awesome-openclaw-skills

    Multi-step deployment agent for full-stack apps. An agent skill from sundial-org/awesome-openclaw-skills.

    663 GitHub stars~1.6k tokensUpdated 7 mo ago
    DevOps & CloudAuto-check passed
  • Nextjs On Cloudflare

    cloudflare/skills

    Official

    Build, migrate, and deploy Next.js apps on Cloudflare Workers with vinext.

    3k GitHub starsUsed in 2 repos~678 tokens
    DevOps & CloudAuto-check passed
  • Prepare Cloudflare Production Deployment

    LubomirGeorgiev/cloudflare-workers-nextjs-saas-template

    Source-of-truth runbook for preparing this Vinext Cloudflare Workers SaaS template for production deployment.

    786 GitHub stars~5.9k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • Convex Self Hosting

    waynesutton/markdown-site

    Integrate Convex static self hosting into existing apps using the latest upstream instructions from get-convex/self-hosting every time.

    628 GitHub stars~1.4k tokensUpdated 4 mo ago
    DevOps & CloudAuto-check passed
  • Homerail Install Ops

    xiaotianfotos/homerail

    Install, configure, start, verify, update, and troubleshoot a local-source HomeRail deployment for AI-agent use.

    991 GitHub stars~2k tokensUpdated 12 days ago
    DevOps & CloudAuto-check passed
  • Deploy To Temps

    gotempsh/temps

    Deploy applications to the Temps platform with automatic framework detection, Dockerfile generation, and container orchestration.

    822 GitHub stars~1.3k tokensUpdated today
    DevOps & CloudAuto-check: notes

More from datopian/portaljs

All 14 skills in this repo
  • Arcgis To Portaljs

    datopian/portaljs

    Migrate a whole ArcGIS Hub site into a PortalJS Arc portal end-to-end.

    2.4k GitHub stars~2k tokensUpdated 1 mo ago
    Auto-check passed
  • Portaljs Add Chart

    datopian/portaljs

    Add a chart (line, bar, area, pie, or scatter) to a dataset's showcase in a PortalJS portal.

    2.4k GitHub stars~1.1k tokensUpdated 1 mo ago
    Auto-check passed
  • Portaljs Add Dataset

    datopian/portaljs

    Add a dataset (CSV, TSV, JSON, or GeoJSON) to an existing PortalJS portal.

    2.4k GitHub stars~1.6k tokensUpdated 1 mo ago
    Auto-check passed
  • Portaljs Add Dcat

    datopian/portaljs

    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…

    2.4k GitHub stars~1.8k tokensUpdated 1 mo ago
    Auto-check passed
  • Portaljs Add Geo

    datopian/portaljs

    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.

    2.4k GitHub stars~1.7k tokensUpdated 1 mo ago
    Auto-check passed
  • Portaljs Add Map

    datopian/portaljs

    Render a GeoJSON dataset on an interactive Leaflet map in the Views section of a dataset's showcase.

    2.4k GitHub stars~1.3k tokensUpdated 1 mo ago
    Auto-check passed

Categories

Questions about Portaljs Deploy

What does Portaljs Deploy do?

Deploy a PortalJS portal to PortalJS Arc — Datopian-managed static hosting on Cloudflare. Portaljs Deploy is an agent skill from datopian/portaljs. Deploy a PortalJS portal to PortalJS Arc — Datopian-managed static hosting on Cloudflare.

When should I use Portaljs Deploy?

Portaljs Deploy fits situations like: A portal is ready to publish; redeploy to a live URL.

How do I install Portaljs Deploy in Claude Code?

Run `npx skills add datopian/portaljs --skill portaljs-deploy -a claude-code`. Or copy the skill folder (skills/portaljs-deploy in datopian/portaljs) into .claude/skills/portaljs-deploy in your project. Claude Code loads it when a task matches its description.

How do I install Portaljs Deploy in Codex?

Run `npx skills add datopian/portaljs --skill portaljs-deploy -a codex`. Or copy the skill folder (skills/portaljs-deploy in datopian/portaljs) into .agents/skills/portaljs-deploy in your project. Codex loads it when a task matches its description.

Can I use Portaljs Deploy in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add datopian/portaljs --skill portaljs-deploy -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/portaljs-deploy, .gemini/skills/portaljs-deploy, .github/skills/portaljs-deploy and .opencode/skills/portaljs-deploy in your project.

What does Portaljs Deploy need to run?

Going by SKILL.md and its folder, Portaljs Deploy needs the command-line tools its instructions call (npm and git) and credentials named PORTALJS_TOKEN. Our summary lists: A credential in PORTALJS_TOKEN. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash(npm:*), Bash(npx:*), Bash(curl:*). Compatibility (from SKILL.md): Claude Code with PortalJS portals (Next.js 14, React 18, Node 18+). Runs from any project via the plugin, a personal ~/.claude/commands install, or a portaljs clone..

Does Portaljs Deploy access the network?

SKILL.md names 2 domains. In commands or code: slug.arc.portaljs.com; the agent is likely to contact it when it follows the instructions. As links in the text: arc.portaljs.com. This is read from the text; nothing was executed.

Is Portaljs Deploy safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Portaljs Deploy use?

Portaljs Deploy is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Portaljs Deploy use?

About 1.4k tokens (SKILL.md is roughly 5.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.1k tokens, read only when the agent opens those files.

What are the alternatives to Portaljs Deploy?

Skills that share tags, products or a category with Portaljs Deploy: Deploy Agent (sundial-org/awesome-openclaw-skills, 663 stars), Nextjs On Cloudflare (cloudflare/skills, 3k stars), Prepare Cloudflare Production Deployment (LubomirGeorgiev/cloudflare-workers-nextjs-saas-template, 786 stars) and Convex Self Hosting (waynesutton/markdown-site, 628 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Portaljs Deploy?

datopian (a GitHub organization) maintains it in datopian/portaljs, which has 2,357 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on September 7, 2026.

Source: datopian/portaljs on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.