Skip to content

WIP: PortalJS Cloud docs#1503

Open
demenech wants to merge 3 commits into
mainfrom
feat/cloud-docs
Open

WIP: PortalJS Cloud docs#1503
demenech wants to merge 3 commits into
mainfrom
feat/cloud-docs

Conversation

@demenech
Copy link
Copy Markdown
Member

@demenech demenech commented May 26, 2026

Summary by CodeRabbit

  • Documentation
    • Added comprehensive Cloud documentation suite covering account management, datasets, groups, organizations, users, visualizations, harvesters, MCP server integration, and portal setup and navigation.
    • Integrated Cloud Docs into main navigation menu.

Review Change Stack

demenech and others added 3 commits May 26, 2026 19:11
Add a user-facing admin documentation section for PortalJS Cloud at
/cloud/docs, covering getting started, the portal, datasets, visualizations,
groups, organizations, users, account, harvesters, and the MCP server.

Wires a dedicated sidebar (content/assets/cloud-sidebar.json) via the
[...slug] route, adds a "Cloud Docs" navbar link, and stores screenshots
under public/static/img/cloud-docs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Unquoted title/description values containing colons broke the mddb YAML
parse. Wrap all title and description values in double quotes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
MDX parses <email> autolink syntax as a JSX tag, and the `@` broke the
prerender of /cloud/docs/account. Use a standard markdown mailto link.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 26, 2026

⚠️ No Changeset found

Latest commit: 5c8e3d4

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@vercel
Copy link
Copy Markdown

vercel Bot commented May 26, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
www.portaljs.com Ready Ready Preview, Comment May 26, 2026 10:38pm
9 Skipped Deployments
Project Deployment Actions Updated (UTC)
portaljs-alan-turing Ignored Ignored May 26, 2026 10:38pm
portaljs-ckan Ignored Ignored May 26, 2026 10:38pm
portaljs-ckan-ssg Ignored Ignored May 26, 2026 10:38pm
portaljs-fivethirtyeight Ignored Ignored May 26, 2026 10:38pm
portaljs-git-example Ignored Ignored May 26, 2026 10:38pm
portaljs-learn Ignored Ignored May 26, 2026 10:38pm
portaljs-openspending Ignored Ignored May 26, 2026 10:38pm
portaljs-storybook Ignored Ignored May 26, 2026 10:38pm
site-portaljs Ignored Ignored May 26, 2026 10:38pm

Request Review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 26, 2026

📝 Walkthrough

Walkthrough

This PR adds a complete Cloud admin documentation suite covering account, organization, user, dataset, and group management alongside portal setup and integrations documentation. It includes sidebar navigation configuration, route handling, and docstring/reference material spanning onboarding through advanced features like harvesters and MCP server connectivity.

Changes

PortalJS Cloud Admin Documentation

Layer / File(s) Summary
Documentation navigation and routing infrastructure
site/content/assets/cloud-sidebar.json, site/content/config.js, site/pages/[...slug].tsx, site/content/cloud/docs/index.md
Sidebar navigation schema defines four top-level sections (Getting Started, Managing content, Administration, Integrations) with links to documentation pages. Main navigation wiring adds a "Cloud Docs" link. Route handling enables sidebar rendering for paths starting with cloud/docs. Index page provides landing page and table of contents.
Getting started and account management
site/content/cloud/docs/getting-started.md, site/content/cloud/docs/account.md
Getting started guide covers signup, signin, password reset, and a tour of the admin dashboard with sidebar sections and widgets. Account page documents profile editing, plan details, and API key lifecycle (creation, one-time token access, authenticated API usage, and revocation).
Organization and user administration
site/content/cloud/docs/organizations.md, site/content/cloud/docs/users.md
Organizations page defines organization structure, main organization immutability rules, sysadmin privileges, and member management including role-based permissions (Member/Editor/Admin), invitations with pending/active state transitions, bulk deletion with self-deletion prevention, and deletion restrictions. Users page documents permissions matrix, browsing with state indicators, invitation flows for existing vs unregistered emails, field-level editing constraints, and relationship to organization roles.
Data and content management
site/content/cloud/docs/datasets.md, site/content/cloud/docs/groups.md, site/content/cloud/docs/portal.md, site/content/cloud/docs/visualizations.md
Datasets page covers browse/create/edit/delete workflows, resource management, permission matrices, DCAT metadata fields, resource attributes, CSV Table Schema computation/editing, and public/private visibility. Groups page documents group purpose, permission requirements, browse/create/edit/delete workflows, and dataset-to-group assignment. Portal page explains automatic GitHub repo creation, deployment states, repository customization, and public site pages (homepage, search, dataset details, organization/group listings). Visualizations page covers publishing/editing/deleting workflows, public vs private visibility, visualization fields, and BETA Data App Addon provisioning with GitHub repository integration.
Integrations and external data sources
site/content/cloud/docs/harvesters.md, site/content/cloud/docs/mcp-server.md
Harvesters page introduces scheduled dataset syncing, lists supported sources (CKAN, DKAN, Socrata, ArcGIS, OpenDataSoft, DataVerse), provides setup flow with CKAN API configuration, and includes operational recommendations for API key and organization management. MCP Server page explains endpoint discovery, chatbot connection flow with Claude walkthrough, MCP capabilities (dataset/resource listing and reading), private data restrictions, and troubleshooting for connection and visibility issues.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Suggested reviewers

  • anuveyatsu
  • willy1989cv

🐰 Cloud docs bloom where portals grow,
Sidebars stack with links in row,
Orgs and datasets find their way,
Harvesters harvest data by day,
From accounts to APIs, the guides all glow!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'WIP: PortalJS Cloud docs' is vague and generic, using 'WIP' prefix and 'docs' without describing the specific nature or primary change of the documentation addition. Replace with a more specific title that describes the main change, such as 'Add PortalJS Cloud admin documentation' or 'Add comprehensive Cloud portal documentation'.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/cloud-docs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
site/content/cloud/docs/harvesters.md (1)

47-47: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add newline at end of file.

Markdown files should end with a newline character per POSIX convention.

📝 Proposed fix
 - Assign harvested datasets to a dedicated [Organization](/cloud/docs/organizations) (for example, "External sources") to keep them separated from datasets authored directly in the portal.
+
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/content/cloud/docs/harvesters.md` at line 47, The file harvesters.md is
missing a trailing newline; add a single newline character at the end of the
file so the file ends with a newline per POSIX convention (save the file with a
final line break).
site/content/cloud/docs/mcp-server.md (1)

69-69: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add newline at end of file.

Markdown files should end with a newline character per POSIX convention.

📝 Proposed fix
 - **Chatbot sees no datasets** — make sure at least one dataset is marked **Public**. See [Datasets → Visibility](/cloud/docs/datasets#visibility-public-vs-private).
+
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/content/cloud/docs/mcp-server.md` at line 69, Add a trailing newline
character to the end of the Markdown file mcp-server.md so the file ends with a
single blank line (POSIX convention); open the file, place the cursor at the end
of the last line and insert a newline, then save the file.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@site/content/cloud/docs/account.md`:
- Around line 67-69: Update the fenced code block that currently contains the
URL "https://api.cloud.portaljs.com/@<your-org>/api/3/docs" to include a
language identifier (e.g., change the opening backticks from ``` to ```text or
```plain) so the block has a language specifier for proper syntax highlighting
and to satisfy markdownlint MD040.

In `@site/content/cloud/docs/groups.md`:
- Line 68: The docs currently use three different slug/Name constraints
(groups.md Name forbids spaces and `.`, `+`, `&`; datasets.md Name forbids
spaces and `.`; visualizations.md allows lowercase, numbers, underscores,
dashes), which is inconsistent; choose and apply one consistent validation rule
for Name/slug across all entity docs (or explicitly document per-entity
exceptions), then update the Name lines in groups.md, datasets.md, and
visualizations.md to the unified wording (or add a brief justification next to
each Name entry explaining the specific exception), and ensure the phrasing
clearly lists allowed characters (e.g., "lowercase letters, numbers, dashes
only" or "URL-safe: no spaces or `.`, `+`, `&`") so users see the same
constraint everywhere.

In `@site/content/cloud/docs/mcp-server.md`:
- Around line 17-19: The fenced code block containing the example URL should
include a language identifier for proper highlighting; update the block
delimiter from ``` to ```text (or ```bash) so the snippet showing
"https://mcp.portaljs.com/@<your-org-name>/sse" is written as a text code block
and tooling will render it correctly.

In `@site/content/cloud/docs/users.md`:
- Line 22: The two sentences "Sysadmins themselves are not shown in the list"
and "sysadmins see every user in the portal" conflict; update the Users doc to
explicitly state whether sysadmins can view other sysadmins in the Users list
and clarify where sysadmin management occurs. Replace or augment the sentence at
line 22 with a rephrase such as "Sysadmins are not shown on the Users page;
sysadmins can view all non-sysadmin users in the portal, and management of
sysadmin accounts is handled via the main organization's Members tab." Also add
a brief note that sysadmin account changes should be made in the Members tab
rather than the Users page to avoid confusion.

---

Outside diff comments:
In `@site/content/cloud/docs/harvesters.md`:
- Line 47: The file harvesters.md is missing a trailing newline; add a single
newline character at the end of the file so the file ends with a newline per
POSIX convention (save the file with a final line break).

In `@site/content/cloud/docs/mcp-server.md`:
- Line 69: Add a trailing newline character to the end of the Markdown file
mcp-server.md so the file ends with a single blank line (POSIX convention); open
the file, place the cursor at the end of the last line and insert a newline,
then save the file.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 01030afc-6087-49b5-ba22-dc9359066b9d

📥 Commits

Reviewing files that changed from the base of the PR and between 1a2bdae and 5c8e3d4.

📒 Files selected for processing (15)
  • site/content/assets/cloud-sidebar.json
  • site/content/cloud/docs/account.md
  • site/content/cloud/docs/datasets.md
  • site/content/cloud/docs/getting-started.md
  • site/content/cloud/docs/groups.md
  • site/content/cloud/docs/harvesters.md
  • site/content/cloud/docs/index.md
  • site/content/cloud/docs/mcp-server.md
  • site/content/cloud/docs/organizations.md
  • site/content/cloud/docs/portal.md
  • site/content/cloud/docs/users.md
  • site/content/cloud/docs/visualizations.md
  • site/content/config.js
  • site/pages/[...slug].tsx
  • site/public/static/img/cloud-docs/.gitkeep

Comment on lines +67 to +69
```
https://api.cloud.portaljs.com/@<your-org>/api/3/docs
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add language specifier to the code fence.

The code block should include a language identifier for proper syntax highlighting and to satisfy Markdown linting rules.

📝 Proposed fix
-```
+```text
 https://api.cloud.portaljs.com/@<your-org>/api/3/docs
</details>

As per coding guidelines, fenced code blocks should have a language specified (markdownlint MD040).

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 67-67: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/content/cloud/docs/account.md` around lines 67 - 69, Update the fenced
code block that currently contains the URL
"https://api.cloud.portaljs.com/@<your-org>/api/3/docs" to include a language
identifier (e.g., change the opening backticks from ``` to ```text or ```plain)
so the block has a language specifier for proper syntax highlighting and to
satisfy markdownlint MD040.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| **Title** | string | yes | Human-readable name shown across the portal. |
| **Name** | string (slug) | yes | URL-safe identifier. Cannot contain spaces or the characters `.`, `+`, `&`. Use lowercase letters, numbers, and dashes. |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Inconsistent slug validation rules across entity types.

The Name field constraint for groups forbids spaces, ., +, and &, but the dataset Name field (datasets.md line 146) only forbids spaces and .. Visualizations.md (line 68) specifies yet another rule: "lowercase letters, numbers, underscores, and dashes only."

These inconsistencies will confuse users. Consider either:

  • Unifying the validation rules across all entity types, or
  • Clearly documenting why different entities have different constraints
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/content/cloud/docs/groups.md` at line 68, The docs currently use three
different slug/Name constraints (groups.md Name forbids spaces and `.`, `+`,
`&`; datasets.md Name forbids spaces and `.`; visualizations.md allows
lowercase, numbers, underscores, dashes), which is inconsistent; choose and
apply one consistent validation rule for Name/slug across all entity docs (or
explicitly document per-entity exceptions), then update the Name lines in
groups.md, datasets.md, and visualizations.md to the unified wording (or add a
brief justification next to each Name entry explaining the specific exception),
and ensure the phrasing clearly lists allowed characters (e.g., "lowercase
letters, numbers, dashes only" or "URL-safe: no spaces or `.`, `+`, `&`") so
users see the same constraint everywhere.

Comment on lines +17 to +19
```
https://mcp.portaljs.com/@<your-org-name>/sse
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add language identifier to code block.

The code block should specify a language for proper syntax highlighting and tooling support. For a URL example, use text or bash.

📝 Proposed fix
-   ```
+   ```text
    https://mcp.portaljs.com/@<your-org-name>/sse
    ```
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
```
https://mcp.portaljs.com/@<your-org-name>/sse
```
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 17-17: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/content/cloud/docs/mcp-server.md` around lines 17 - 19, The fenced code
block containing the example URL should include a language identifier for proper
highlighting; update the block delimiter from ``` to ```text (or ```bash) so the
snippet showing "https://mcp.portaljs.com/@<your-org-name>/sse" is written as a
text code block and tooling will render it correctly.

| Edit your own profile | Any user (see [Account](/cloud/docs/account)) |
| Delete users | Sysadmin |

Sysadmins themselves are not shown in the list.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Clarify sysadmin visibility to avoid confusion.

Line 22 states "Sysadmins themselves are not shown in the list," but line 35 says "sysadmins see every user in the portal." This could be read as contradictory—does "every user" include other sysadmins or not?

Consider rephrasing to explicitly state whether sysadmins can see other sysadmins in the Users list, or add a brief note explaining that sysadmin management happens via the main organization's Members tab rather than the Users page.

📝 Suggested clarification
-Sysadmins themselves are not shown in the list.
+Sysadmins are not shown in the Users list. To manage sysadmin membership, use the main organization's Members tab (see [Organizations → Managing sysadmins](/cloud/docs/organizations#managing-sysadmins)).
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Sysadmins themselves are not shown in the list.
Sysadmins are not shown in the Users list. To manage sysadmin membership, use the main organization's Members tab (see [Organizations → Managing sysadmins](/cloud/docs/organizations#managing-sysadmins)).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@site/content/cloud/docs/users.md` at line 22, The two sentences "Sysadmins
themselves are not shown in the list" and "sysadmins see every user in the
portal" conflict; update the Users doc to explicitly state whether sysadmins can
view other sysadmins in the Users list and clarify where sysadmin management
occurs. Replace or augment the sentence at line 22 with a rephrase such as
"Sysadmins are not shown on the Users page; sysadmins can view all non-sysadmin
users in the portal, and management of sysadmin accounts is handled via the main
organization's Members tab." Also add a brief note that sysadmin account changes
should be made in the Members tab rather than the Users page to avoid confusion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant