Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Recommend a data-portal architecture (storage, compute, catalog, access, hosting, metadata) from stated needs, then hand off to the build skills. The advisory entry point. Use when starting a new data-portal project and the underlying architecture has not yet been decided.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-20 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 52% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -1% | 0% |
The advisory entry point for a PortalJS project. Before anything gets scaffolded, this skill works out what to build: given the kind of portal, the shape of the data, and its purpose, it fills six architecture slots (storage, catalog, compute, access, hosting, metadata), resolves two build-time knobs (per-dataset data tier and the portal-wide DATA_QUERY mode), and hands off to the concrete build skills. It decides; it does not build. When the brief is thin it interviews in short rounds and never dead-ends — every question has a sensible default, reachable by replying "use defaults."
interview supplies defaults for anything missing).
The canonical, full step-by-step workflow lives in .claude/commands/portaljs-architect.md — that file is the single source of truth. Follow it when executing this skill:
$ARGUMENTS for anything already specified, then interview for what'smissing, one round at a time: (1) what's being built, (2) what the data is, (3) what it's for, (4) constraints. Accept "use defaults" at any point. Inspect named files/directories with du -sh and line counts to ground size guesses.
Storage/Catalog/Compute by data volume and query needs, Access/Hosting by public vs. private, Metadata by standards-compliance needs — then resolve the two build-time knobs: per-dataset data tier (inline | LFS | external) and the portal-wide DATA_QUERY mode (flat | duckdb).
deferred items) and wait for confirmation ("go") or corrections.
./ARCHITECTURE.md in the working directory./portaljs-new-portal, /portaljs-add-dataset,/portaljs-connect-ckan, /portaljs-define-schema, /portaljs-deploy — mapped from the brief, and offer to run the first one.
./ARCHITECTURE.md documenting the six slots, the two build-timeknobs, the reasoning, and anything deferred to a later build step.
(e.g. /portaljs-new-portal → /portaljs-add-dataset → /portaljs-deploy).
| Symptom | Cause | Fix | | --- | --- | --- | | Skill keeps asking rounds of questions | Brief was thin or $ARGUMENTS omitted | Answer inline, or reply "use defaults" to accept the opinionated default stack | | Recommendation looks generic | Rounds were skipped without real data details | Give actual size/shape/cadence, or point at files for du -sh inspection | | ARCHITECTURE.md never appears | Confirmation step was skipped | Reply "go" once the echoed brief looks right | | Scaffolded portal has the wrong DATA_QUERY | Flat downgrade wasn't applied | Run the perl -pi -e one-liner from the command file against lib/datasets.ts | | Hand-off names a skill that doesn't exist | Decision maps to a (planned) skill (e.g. /connect-openmetadata) | Treat it as designed-in/built-later; proceed with the closest available skill |
/portaljs-architect We're a national statistics office. ~200 datasets, mostly large
CSVs (some GBs), updated quarterly, all public, and we must publish DCAT-AP for the
EU data portal.Infers a multi-publisher, analytics-grade portal. Recommends Parquet on R2 + DuckLake + DuckDB, static Cloudflare Pages, Frictionless + DCAT-AP metadata, owner namespace, data tier external for the Parquet, DATA_QUERY=duckdb. Writes ARCHITECTURE.md and hands off to /portaljs-new-portal then /portaljs-add-dataset.
/portaljs-architectRuns the full four-round interview since nothing was pre-filled. Accepting defaults at each round lands on the opinionated default stack: repo files or Git-LFS + R2 storage, datasets.json catalog, DuckDB compute, static access on Cloudflare Pages, Frictionless metadata, theme namespace, data tier LFS, DATA_QUERY=duckdb.
/portaljs-architect Internal engineering data catalog, single team, dozens of CSVs,
some of it access-controlled to specific roles.The private-data answer in Round 2 flips Access/Hosting to runtime + backend RBAC on Cloudflare Workers — flagged as the larger, opt-in build — while Storage/Catalog/Compute still follow the volume-based defaults.
.claude/commands/portaljs-architect.mdreferences/reference.mdsite/content/docs/architecture/decision-framework.md/portaljs-new-portal, /portaljs-add-dataset, /portaljs-connect-ckan, /portaljs-define-schema, /portaljs-deployOther measured skills in the registry, with their headline benchmark lift.