PortalJS Arc
PortalJS Arc is managed hosting for PortalJS portals, run by Datopian on Cloudflare. You
build a portal, run /portaljs-deploy, and it goes live at
https://<slug>.arc.portaljs.com — no servers, no infrastructure to set up.
One command
/portaljs-deploy → builds a static export of your portal → uploads it to PortalJS Arc ✓ Live at https://my-portal.arc.portaljs.com
How it works
A PortalJS portal static-exports to plain HTML/CSS/JS (the catalog template, /portaljs-add-dataset,
/portaljs-migrate, and /portaljs-connect-ckan all pre-render with getStaticPaths). /portaljs-deploy builds that
export and uploads it to Arc, which serves it from object storage behind Cloudflare's edge.
The deploy is idempotent — the slug is your portal's permanent address, and re-deploying
replaces the site in place.
Auth
Auth is on demand — /portaljs-deploy handles it, there's no separate login step. The first deploy on
a new machine opens your browser for a one-click GitHub authorization (a device-authorization
flow), then saves the token to ~/.portaljs/credentials and reuses it on later deploys. For CI,
set PORTALJS_TOKEN instead (mint a token at arc.portaljs.com). The
token is never committed to your repo. See the /portaljs-deploy skill for the
exact flow.
Scope today
- Static only. Arc hosts static exports. A portal that relies on
getServerSideProps(SSR) isn't on Arc yet. *.arc.portaljs.comURLs. Custom domains aren't available in this version.
Self-hosting instead
Arc is optional. Because a portal is a standard static Next.js export, you can host it
yourself anywhere — run npm run build and upload the out/ directory to Vercel, your own
Cloudflare, Netlify, S3, or any static host. /portaljs-deploy simply automates the Arc path.
Where to go next
/portaljs-deploy— publish your portal.- Backends — connect a live data backend before deploying.