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-1.5.1.tar.gz (911.2 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-1.5.1-py3-none-any.whl (922.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for gispulse_portal-1.5.1.tar.gz
Algorithm Hash digest
SHA256 8a7193d5bd591b4fd3dfa56ef6f3e5abf6ecad7d639331be08b65b8a56032b1f
MD5 ccc9134c16195eabc3659ddaca8cb7c4
BLAKE2b-256 a9b2b6179e31626248cbbb9deb0d3d869905686e8ee73ab263e9b74d5900be4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for gispulse_portal-1.5.1.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-1.5.1-py3-none-any.whl.

File metadata

  • Download URL: gispulse_portal-1.5.1-py3-none-any.whl
  • Upload date:
  • Size: 922.5 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-1.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8343de5662f6da31ce6770035f01cef4ade12446d8c3440d942fc6ce1acdbcfd
MD5 2d07135347dda84191730c9486386b9a
BLAKE2b-256 338d504de982af4151def9ad375da3b56cf7ad623be736b55fca54cbee416056

See more details on using hashes here.

Provenance

The following attestation bundles were made for gispulse_portal-1.5.1-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