Skip to content

Portals and experiences

A portal is a published map with its own URL. You pick the layers, arrange them, choose how the page is laid out, and publish. Visitors need nothing installed.

The four experiences

Choosing an experience changes the shape of the page, not just its colours. Each has its own guide; this page covers what they share — building, layout, access and templates.

Map-first, with a layer list beside it. The default, and the right choice when the map itself is the point.

  • Full-screen map
  • Layer list you can dock left or right, or float over the map
  • Folders, legend, basemap switcher, About panel

See Web maps.

Scrollytelling. The page is a narrative of sections; each one is pinned to a map position and a set of visible layers, and the map animates as the reader scrolls.

  • Write each section in the editor
  • Capture the map camera for a section as you go
  • The layer list starts collapsed, so the story leads

See Story maps.

A browsing surface, for when you have more datasets than a single map should show at once. The dataset list is the page and the map sits beside it.

  • Search across names, descriptions and keywords
  • Filter by folder, type and licence
  • Each result shows what it is, and how to get it
  • Click a dataset to add it to the map, or zoom to its extent

See Catalogs.

A grid of widgets that cross-filter each other, where the map is one widget among charts, numbers, lists and controls. For the questions a reader asks of the data rather than of the geography.

  • Indicators, gauges, charts, tables, a column profile, a scatter
  • Selectors and a search box that narrow everything at once
  • Clicking a chart or drawing on the map re-asks every other question on the page
  • Widgets can be pinned to the map, or docked into its control cluster

See Dashboards.

Building a portal

  1. Portals ▸ New portal. Give it a title.
  2. Add layers. + Add picks them one at a time; Add all brings in everything you can see.
  3. Organise them. Drag layers into folders, reorder them, set colours and opacity. The top of the list draws on top of the map.
  4. Set the opening view. Position the map how you want visitors to find it — including the 3D globe if you switch to it — then pin it as the start view.
  5. Write the About page (optional). A rich-text editor with images; paste screenshots straight in. It becomes a documentation page linked from the portal.
  6. Publish.

Re-publishing

A published portal is a static bundle, so changes only appear once you publish again. The button reads Re-publish after the first time.

Bringing in somebody else's service

Not every layer has to be yours. My Data ▸ Connect external source registers a service you do not host — it is a reference, never a copy, so nothing is downloaded and the portal shows whatever the provider is serving that day.

Kind What it is
XYZ A {z}/{x}/{y} tile template — the usual basemap form
WMS Rendered map images, one GetMap per tile
WMTS Tiled map images, one GetTile per tile
WFS Vector features, fetched as GeoJSON
OGC API - Features A collection's items — paste the landing page, the collection or the items URL
Vector tiles A third-party .pbf tile set, or its TileJSON
PMTiles A remote archive, read a tile at a time — the whole file is never downloaded

Everything that can be checked is checked when you add it: a WFS and an OGC API collection are fetched, a TileJSON is read, a PMTiles header is parsed. That is where a wrong layer name or an unreachable host shows up — and it is also where the pieces you did not type come from, like the name of the layer inside a tile set, its zoom range and its extent.

Why some of them go through your instance

A browser fetching a raster tile is doing something every tile server expects. Fetching GeoJSON, a vector tile, or a byte range of a PMTiles archive is a cross-origin request, and a provider who has not set Access-Control-Allow-Origin breaks it silently — an empty layer and a console error your visitors will never see. So those are fetched through GeoDeploy and served same-origin. It costs a little bandwidth; it buys a source that works for every visitor rather than for the ones whose provider happens to be permissive.

An http:// address on an https:// instance

A browser will not load http:// tiles into an https:// page. It blocks them and says so only in the visitor's console, so the source registers, the layer appears in the list, and the map stays empty with nothing to explain it. (QGIS is a desktop application and has no such rule, which is why an address can work there and not here.)

So an http address is resolved when you add it. GeoDeploy fetches one real tile over https — at the same address, and at the address it redirects to if that is only a different host — and stores whichever one actually answers. A chain that ends on http does not count: some providers redirect every request to an insecure address, and that is blocked exactly as the original was. If nothing secure answers, the source is refused with the reason rather than stored as a layer that can never draw.

This applies only when your instance is itself served over https. On a plain-http install — a LAN deployment, a machine behind a VPN — an http tile is exactly right and nothing blocks it.

Attribution is not optional. The provider's credit is the condition of using their service, and it is carried onto the map with the layer. Fill it in.

WCS is not here, and cannot be

A WCS is not a display service: GetCoverage returns a coverage — a GeoTIFF, a NetCDF — not map images or tiles, so there is nothing a web map can draw from it without first rendering it. Almost every WCS server publishes the same data over WMS; add it that way to show it, or download the coverage and upload it as a raster layer to analyse it.

Layout options

Beyond the experience, each portal exposes a few placement choices:

Option What it does
Layer list side Left or right
Layer list mode Docked beside the map, or floating over it
Start collapsed Opens with the list closed
Controls corner Which corner the map controls cluster in
Map side and width Catalog only — which side the map takes, and how much
Datasets listed Catalog only — this portal's layers, or every public layer on the instance

Who can see it

Set per portal, independently of workspace permissions:

Access Who gets in
Public Anyone with the link
Password Anyone with the link and the password
Organization Any signed-in member of your workspace
Owner The creator and administrators

Anything other than Public is enforced on the server before the page is served, not in the browser.

Map tools visitors get

Every published portal includes a basemap switcher, a 2D/3D globe toggle, zoom, home (returns to the pinned start view), zoom-to-all-layers, previous/next extent, and a draw-a-box download.

Download by area

Visitors can draw a box and download just that area, choosing a format per layer. The clip runs on the server and is prepared in the background, so a large selection does not block the page.

On phones

Published portals adapt: the layer list becomes a drawer that starts closed so the map is visible, map controls stay reachable, and a catalog portal stacks vertically — filters on top, results below them, map beneath.

Templates

A template is a starting point you pick when you create a portal. It can carry three separate things, and it is worth knowing which is which, because you can change any of them afterwards without touching the others.

A template may set What that means Change it later?
Look Palette, typography, header treatment, basemap Yes — per-portal branding overrides it
Experience Which of the four archetypes the portal starts as Yes — switch experience at any time
Starting content A story map's sections, or a dashboard's widgets and their wiring Yes — everything is editable afterwards

How a template and an experience relate

They are not the same choice, and a template does not lock one in.

  • The experience (web map, story map, catalog, dashboard) decides the shape of the page.
  • A template may say which experience it was designed for, and most declare only one — a story template applied to a catalog would style a layout nobody designed for it.
  • Switching experience keeps your layers, your styling and your branding. What changes is the arrangement around them.

What a template's content does when you apply it

A template ships with no layer ids — it cannot have any, because your layers did not exist when it was written. When you choose one, its content is bound to your portal's layers: the first suitable layer, the first field of the right type, successive rasters for successive raster widgets.

Every one of those guesses is editable. You correct a guess rather than fill in a blank.

Two rules keep this predictable:

  • A template's content seeds an empty portal only. It never silently overwrites work.
  • To deliberately start over, use Reload template — a button you have to press.

Branding

Per-portal branding (accent colour, font, logo, light/dark) is set in the editor and overrides the template, whichever experience you are in.

Fonts for labels

A web map draws text from glyph sets, not from the fonts on the reader's computer — so a portal can only label in faces the instance itself carries. GeoDeploy ships Noto Sans in Regular, Bold and Italic, which covers Latin, Greek, Cyrillic and Vietnamese.

That is a drop-in directory, not a fixed list. To add a face — a serif, a monospace, your organisation's own — generate its glyphs from a TTF and copy them in:

docker run --rm -v "$PWD":/w -w /w node:20-bookworm bash -lc   'npm i --no-audit --no-fund fontnik && node scripts/build_glyphs.js NotoSerif-Regular.ttf "templates/shared/fonts/Noto Serif Regular"'

No rebuild and no restart: the next map that asks for it gets it, GET /api/fonts starts listing it, and the QGIS plugin offers it the next time it connects. A face is about 780 KB.

What happens to a font the instance does not have. Nothing breaks and nothing goes blank. The label is drawn in the nearest face that is installed — a serif stays a serif, a monospace stays a monospace, and bold and italic are preserved — and the plugin says which substitution it made. The published style names the requested face and the fallback, so if you install the real one later, portals already published start using it without being republished.

QGIS is unaffected. It draws with the fonts on your own machine, and a label pushed from QGIS keeps its original typeface and gets it back unchanged. The substitution only ever applies to what the web portal draws.