Skip to main content

Pre-built web UI for GISPulse — ships the SPA so `gispulse portal` can serve it same-origin on localhost.

Project description

GISPulse Portal

Open-source web UI for the GISPulse geospatial engine.

License: AGPL v3

What's here

React + Vite + TailwindCSS portal — the public, AGPL-licensed companion to the gispulse Python engine. Provides:

  • Map workspace — MapLibre + DeckGL, layer tree, basemap switcher, style editor
  • Workflows workspace — visual node editor (React Flow) for building rule pipelines
  • Datasets / Catalog / Schema workspaces — browse, query, upload, inspect
  • Marketplace — browse capability plugins (read-only)
  • Local login — single-user authentication via API key

What's NOT here (lives in private gispulse-portal-pro)

  • Admin / RBAC pages (Users, ApiKeys, Audit, Schedules, Settings, Usage, Queue)
  • SSO OIDC callback page
  • Billing pages (Pricing, Subscription)
  • AdminGuard component, AdminLayout, admin API client + store

These are extended at app composition time when gispulse-portal-pro is installed alongside this package.

Install paths

This repo dual-publishes. Pick the install path that fits your workflow:

Install What you get Typical user
pip install gispulse CLI + runtime ESB + API only (no UI) servers, CI/CD, headless, power users
pip install gispulse-portal Same as above plus the bundled SPA, served same-origin users who want the local workbench
Hosted SPA on GH Pages Marketing site + Try-it demo against demo.gispulse.dev backend drive-by visitors

The PyPI wheel ships the pre-built SPA inside the Python package and exposes it via:

from gispulse_portal import PORTAL_DIST_PATH
# -> Path to the bundled SPA, ready to mount with FastAPI StaticFiles

The gispulse portal CLI command (in the gispulse package) detects gispulse_portal and mounts it at /portal automatically. If the package is not installed, it prints a helpful install hint instead of failing.

Frontend dev

pnpm install
pnpm dev      # → http://localhost:5173
pnpm build    # → ./dist
pnpm test

By default the portal expects the engine at http://localhost:8000. Override with VITE_API_BASE_URL env var.

# Run the engine separately
pip install gispulse[postgis,api,raster,network]
uvicorn gispulse.adapters.http.app:create_app --factory --port 8000

Build & publish (maintainers)

This repo dual-publishes on every v*.*.* tag:

  1. GH Pages SPAdeploy.yml runs on every main push, builds via pnpm build, and force-pushes the result to the deploy branch (served by GitHub Pages).
  2. PyPI wheelrelease.yml runs on tag push:
    • pnpm install && pnpm build (produces ./dist)
    • copies ./distgispulse_portal/dist/ (so it gets included as package_data)
    • python -m build --outdir python-dist (produces wheel + sdist)
    • smoke-tests the wheel in a clean venv
    • publishes to PyPI via trusted publisher (OIDC) — no token in repo

Local wheel build

pnpm install
pnpm build
rm -rf gispulse_portal/dist
cp -r dist gispulse_portal/dist
python -m build --outdir python-dist
ls -la python-dist/
# gispulse_portal-1.5.1-py3-none-any.whl
# gispulse_portal-1.5.1.tar.gz

Local install smoke test

python -m venv /tmp/smoke && /tmp/smoke/bin/pip install --upgrade pip
/tmp/smoke/bin/pip install python-dist/gispulse_portal-*.whl
/tmp/smoke/bin/python -c "
from gispulse_portal import PORTAL_DIST_PATH
print(PORTAL_DIST_PATH)
assert PORTAL_DIST_PATH.is_dir()
assert (PORTAL_DIST_PATH / 'index.html').is_file()
print('ok')
"

Version policy

The git tag is the single source of truth. The release workflow asserts that the tag, pyproject.toml, and gispulse_portal/__init__.py __version__ all match before publishing — a mismatch fails the build.

License

AGPL-3.0-or-later. Network use = source disclosure obligation. See LICENSE.

For self-hosted or SaaS deployment with proprietary modifications, contact ImagoData about the commercial dual-license at contact@imagodata.com.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gispulse_portal-2.0.0.tar.gz (918.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gispulse_portal-2.0.0-py3-none-any.whl (931.6 kB view details)

Uploaded Python 3

File details

Details for the file gispulse_portal-2.0.0.tar.gz.

File metadata

  • Download URL: gispulse_portal-2.0.0.tar.gz
  • Upload date:
  • Size: 918.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gispulse_portal-2.0.0.tar.gz
Algorithm Hash digest
SHA256 5399fc138ed06046be4b3f5e9e946e3d69c4451929440e13292e2216f917d073
MD5 ac4b67255346962a12a9bbe14d3d4e43
BLAKE2b-256 77e62c434cfd3566c42485d1f10b53c74a64097a2fde0686352efbe940807363

See more details on using hashes here.

Provenance

The following attestation bundles were made for gispulse_portal-2.0.0.tar.gz:

Publisher: release.yml on imagodata/gispulse-portal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gispulse_portal-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: gispulse_portal-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 931.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gispulse_portal-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0bb2ec4327fd0227ef6220339fc55d251c0c4b5051ec81b082f730c15254bc73
MD5 95537fe9b453cc1ef49b86b2b1b10ca1
BLAKE2b-256 bfb0a5d682787a29a085194d2f27bcbab795c4b3740e189045ea8001001fa860

See more details on using hashes here.

Provenance

The following attestation bundles were made for gispulse_portal-2.0.0-py3-none-any.whl:

Publisher: release.yml on imagodata/gispulse-portal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page