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.
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:
- GH Pages SPA —
deploy.ymlruns on everymainpush, builds viapnpm build, and force-pushes the result to thedeploybranch (served by GitHub Pages). - PyPI wheel —
release.ymlruns on tag push:pnpm install && pnpm build(produces./dist)- copies
./dist→gispulse_portal/dist/(so it gets included aspackage_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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a7193d5bd591b4fd3dfa56ef6f3e5abf6ecad7d639331be08b65b8a56032b1f
|
|
| MD5 |
ccc9134c16195eabc3659ddaca8cb7c4
|
|
| BLAKE2b-256 |
a9b2b6179e31626248cbbb9deb0d3d869905686e8ee73ab263e9b74d5900be4c
|
Provenance
The following attestation bundles were made for gispulse_portal-1.5.1.tar.gz:
Publisher:
release.yml on imagodata/gispulse-portal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gispulse_portal-1.5.1.tar.gz -
Subject digest:
8a7193d5bd591b4fd3dfa56ef6f3e5abf6ecad7d639331be08b65b8a56032b1f - Sigstore transparency entry: 1409635260
- Sigstore integration time:
-
Permalink:
imagodata/gispulse-portal@d3d7d9685b5556dec37d7ba82cf8a4bb16b4cdbb -
Branch / Tag:
refs/tags/v1.5.1 - Owner: https://github.com/imagodata
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d3d7d9685b5556dec37d7ba82cf8a4bb16b4cdbb -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8343de5662f6da31ce6770035f01cef4ade12446d8c3440d942fc6ce1acdbcfd
|
|
| MD5 |
2d07135347dda84191730c9486386b9a
|
|
| BLAKE2b-256 |
338d504de982af4151def9ad375da3b56cf7ad623be736b55fca54cbee416056
|
Provenance
The following attestation bundles were made for gispulse_portal-1.5.1-py3-none-any.whl:
Publisher:
release.yml on imagodata/gispulse-portal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gispulse_portal-1.5.1-py3-none-any.whl -
Subject digest:
8343de5662f6da31ce6770035f01cef4ade12446d8c3440d942fc6ce1acdbcfd - Sigstore transparency entry: 1409635267
- Sigstore integration time:
-
Permalink:
imagodata/gispulse-portal@d3d7d9685b5556dec37d7ba82cf8a4bb16b4cdbb -
Branch / Tag:
refs/tags/v1.5.1 - Owner: https://github.com/imagodata
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d3d7d9685b5556dec37d7ba82cf8a4bb16b4cdbb -
Trigger Event:
push
-
Statement type: