customize-portolan-browser
Adapt a portolan-browser checkout into a publisher-branded interface for one existing Portolan catalog.
Skill by portolan-sdi
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/portolan-sdi-customize-portolan-browser
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/customize-portolan-browser
What's inside
- Skill name
customize-portolan-browser- Description
- Adapt a portolan-browser checkout into a publisher-branded interface for one existing Portolan catalog. Inspect the catalog, the browser, and the publisher's site, propose a design, wait for approval, then implement it through browser configuration before site-local code. Use when someone wants a custom, branded, or white-labeled STAC or Portolan browser for a catalog that already exists.
- License
- Apache-2.0
- Instructions
- 212 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (5)
- SKILL.md
- catalog-ui-contract.md · reference/
- proposal.md · reference/
- verification.md · reference/
- verify-template.mjs · reference/
SKILL.md (first lines)
<!-- drift: depends-on: portolan-browser, portolan-spec -->
# Customize a Portolan browser for a publisher
This skill adapts an existing browser to one publisher and one catalog. The result reuses
the publisher's visual language and words. It stays a working Portolan browser.
`cholmes/stlouis-data-browser` follows this shape for the City of St. Louis mirror.
`cholmes/trimet-data-browser` follows it for the TriMet mirror. Both keep their changes in a
small set of files, so `git pull upstream main` causes few conflicts.
## Scope
This skill changes the user interface only.
- The catalog is authoritative. Do not edit catalog metadata, styles, legends, thumbnails,
bounding boxes, source links, converted assets, or data files. Report a catalog defect.
Do not correct it in the browser.
- Prefer configuration. Change site-local components only when the approved design needs
behavior that configuration cannot express.
- Upstream work needs separate approval. Report a generic browser defect. Do not edit the
upstream repository or open an upstream pull request without an explicit request.
- Publication needs separate approval. Do not deploy, publish, push, or open a pull request
unless the user asks.
## Inputs you must have
Ask for any input you do not have. Do not invent a catalog. Do not pick an unrelated browser
version. Do not infer the publisher from weak evidence.
1. **The catalog.** A local path or a URL to `catalog.json`.
2. **The browser.** A `portolan-browser` checkout or repository, at a known commit.
3. **Publisher evidence.** A reference site, screenshots, or both. Prefer the live site.
## Step 1: Inspect the inputs
Read the catalog structure and several representative collections. Read the browser
configuration surface, the theme, the tests, and `AGENTS.md`. Read the publisher's live site
and take its real CSS values.
Extract only evidence that changes the interface:
- typography, colors, spacing, icons, logos, link treatment, and button states;
- the publisher's words for datasets, rows, departments, topics, tags, downloads, and maps;
- the publisher's page hierarchy and the elements it makes prominent;
- catalog dimensions that hold enough values to support navigation;
- differences between collections, such as geometry type, extent, size, styles,
legends, metadata richness, and available assets.
Prefer official CSS, design tokens, and reusable assets. Confirm that you may reuse an asset
before you copy it. Read `reference/catalog-ui-contract.md` for the catalog fields the
browser reads.
## Step 2: Propose the design and stop
Give the user a compact proposal. Wait for approval. Revise the proposal when feedback
changes your reading of the evidence. Do not edit the browser before approval.
`reference/proposal.md` lists the required contents and explains how to keep the
interpretation restrained.
## Step 3: Implement the approved proposal
Work down this ladder. Move to the next layer only when the current one cannot express the
approved requirement.
### Layer 1: the root catalog
The root catalog sets 9 options through a `stac_browser` field, with no rebuild. They are
`apiCatalogPriority`, `cardViewMode`, `crossOriginMedia`, `defaultCollectionSort`,
`defaultItemSort`, `defaultThumbnailSize`, `displayGeoTiffByDefault`, `preferredAssets`, and
`showThumbnailsAsAssets`. Read them. Never write them, because the catalog is immutable here.
### Layer 2: `config.js`
`src/merged-config.js` merges four sources in order. They are `config.js`, the `SB_CONFIG`
file, `SB_*` environment variables, and `window.STAC_BROWSER_CONFIG` from
`public/runtime-config.js`. Command line parameters no longer exist.
The keys a rebrand normally sets are `catalogUrl`, `catalogTitle`, `catalogImage`,
`catalogTitleAfterImage`, `allowExternalAccess`, `allowedDomains`, `enforcedColorMode`,
`supportedLocales`, `pathPrefix`, `historyMode`, `cardViewMode`, `defaultCollectionSort`,
`showKeywordsInCatalogCards`, `preferredAssets`, `socialSharing`, `registryUrl`, and
`footerLinks`. `docs/options.md` documents every key.
A browser that serves one catalog sets `catalogUrl`, and sets `allowExternalAccess` to false.
That choice skips the registry start page.
Develop against a local catalog copy with an environment override:
```bash
npx serve /path/to/catalog --cors -l 8081
SB_catalogUrl=http://localhost:8081/catalog.json pnpm start
```
### Layer 3: words, through the locale files
Terminology is configuration. `src/locales/<code>/custom.json` merges over `texts.json`, so
you override a string without a code change. Rename the STAC nouns there:
```json
{
"stacCollection": "Dataset | Datasets",
"stacItem": "Row | Rows"
}
```
Apply these cautions. The `catalogs`, `items`, and `search` groups hold their own worded
copies of the same nouns, so change those keys too. Repeat every override in each locale
listed in `supportedLocales`. Each `footerLinks` label resolves as an i18n key first, and
falls back to the literal text.
### Layer 4: content slots, through widget hooks
`widgets.config.js` maps a hook id to an array of widget definitions. The browser has 23
hooks. `docs/widgets.md` lists them, and `pnpm run docs:hooks` regenerates that list. The
useful ones for a landing page are `root-start`, `root-before-content`, `footer-start`,
`view-catalog-meta-start`, `view-catalog-catalogs-start`, and `view-catalog-items-end`.From portolan-sdi/portolan-skills, Apache-2.0.
More from portolan-sdi/portolan-skills
- 0.637score
catalog-grader
portolan-sdi
Grade a published Portolan catalog from A+ to F and explain each finding with evidence.
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
enrich-metadata
portolan-sdi
Fill a collection's metadata.yaml from the open data portal record that lists the same data, when the data came from a source with no metadata of its own…
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
portolan-bootstrap
portolan-sdi
Build a complete, well-documented Portolan catalog from a data source.
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
portolan-thumbnails
portolan-sdi
Generate framed, checked thumbnails from Portolan collections using chiitiler (MapLibre GL Native).
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
portolan-cli
portolan-sdi
Use when publishing, managing, or converting cloud-native geospatial data catalogs with the Portolan CLI.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
git-backed-catalog
portolan-sdi
Create, maintain, or contribute to a Portolan catalog whose metadata is stored in a git repository, with CI that validates each change.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
portolan-migrate
portolan-sdi
Bring an existing non-compliant catalog or published dataset into Portolan compliance without rebuilding it.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
reading-portolan
portolan-sdi
Use when exploring, querying, analyzing, or visualizing data from a Portolan catalog (STAC-based cloud-native geospatial data).
SkillAFreshness: A★ 11Claude Code +9 - 0.626score
report-catalog-issue
portolan-sdi
Report a problem with a catalog registered in the Portolan registry by opening a catalog feedback issue against it.
SkillAFreshness: A★ 11Claude Code +9 - 0.626score
sourcecoop
portolan-sdi
Upload geospatial data to Source Cooperative with proper metadata and READMEs using Portolan CLI.
SkillAFreshness: A★ 11Claude Code +9 - 0.621score
register-catalog
portolan-sdi
Submit a Portolan catalog to the registry by following the registry README.
SkillAFreshness: A★ 11Claude Code +9 - 0.618score
bad
portolan-sdi
Fixture skill with one defect per check.
SkillAFreshness: A★ 11Claude Code +9
Signals
- Stars
- 11
- Forks
- 3
- Open issues
- 5
- Last commit (this folder)
- Oct 15, 2026 (13 days ago)
- Last release
- Oct 6, 2026 (22 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/portolan-sdi/portolan-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from portolan-sdi
- 0.637score
portolan-thumbnails
portolan-sdi
Generate framed, checked thumbnails from Portolan collections using chiitiler (MapLibre GL Native).
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
catalog-grader
portolan-sdi
Grade a published Portolan catalog from A+ to F and explain each finding with evidence.
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
portolan-bootstrap
portolan-sdi
Build a complete, well-documented Portolan catalog from a data source.
SkillAFreshness: A★ 11Claude Code +9 - 0.637score
enrich-metadata
portolan-sdi
Fill a collection's metadata.yaml from the open data portal record that lists the same data, when the data came from a source with no metadata of its own…
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
portolan-migrate
portolan-sdi
Bring an existing non-compliant catalog or published dataset into Portolan compliance without rebuilding it.
SkillAFreshness: A★ 11Claude Code +9 - 0.632score
portolan-cli
portolan-sdi
Use when publishing, managing, or converting cloud-native geospatial data catalogs with the Portolan CLI.
SkillAFreshness: A★ 11Claude Code +9
Cite this page
customize-portolan-browser skill. Agent Mart. https://agentmart.dev/skills/portolan-sdi-customize-portolan-browser (last updated 2026-10-24)