The Geospatial Studio UI provides "no code" access to the power of geospatial AI as a web-based interface to the Geospatial Studio. The UI connects to a deployed instance of the Geospatial Studio backend, providing users access to dataset onboarding and management, model fine-tuning and deployment and running inference at scale.
For details on deploying the UI (usually done alongside the studio backend), see here.
Instructions for getting started with the UI, as well as end-to-end walkthroughs can be found in the π studio docs π
To start developing, you only need the following installed:
- Podman/Rancher/Docker
npmjq
Then, clone this repo and in the repo root directory:
- Run
cp deploy/instances/dev-template.env deploy/instances/dev.env - Configure the environment variables as documented in
deploy/instances/dev.env - NB: Do not commit
deploy/instances/dev.envfile to GitHub - Run
./copy-libs.shto copy core third party libraries from node modules into thelibsfolder. (Cesium is already present inlibas it contains custom styling changes that would be overwritten by copying from node modules). - Run
npm run buildto build a dev environment docker image on the local machine - Run
npm run startto run the dev image using the dev environment. This mounts the/appsource code directory into the previously-built image so that you can make code changes and refresh the browser to see the changes. - Open your browser to
http://localhost:9090to see the app
Note that you don't need to re-run the npm run build step in future, unless there are changes in the /deploy folder (e.g. haproxy config changes).
This project uses Carbon Web Components. The documentation for the various bx- tags can be found here:
https://web-components.carbondesignsystem.com/
SVGs for the Carbon Icons can be found here:
https://carbondesignsystem.com/guidelines/icons/library/
In addition, "Carbon for IBM" defines higher-level UI features that can be used as part of IBM product development, which is documented here (but not yet included in this project):
https://www.ibm.com/standards/carbon/web-components/
This project seperates custom Web Components into Page Files and Component Files.
- Page Files (
app/js/pages/) are the root files for each page in the studio . - Component files (
app/js/components/) are then imported into these page files.
The components folder contains a set of sub folders that each correspond to a specific page in the studio. For example, the data-set-factory folder contains the components used in app/js/pages/dataset-factory-page.js. Some pages and component folders contain files which are still a work in progress and not yet featured in the studio. These folders/files have been marked π§ Work in progress π§ below.
Files shared across multiple pages live directly in app/js/components without an additional directoryβfor example, app/js/components/dataset-settings-form.js.
app/
βββ js/
βββ components
β βββ app-backend.js
β βββ app-progressbar.js
β βββ breadcrumb-button.js
β βββ data-catalog/
β βββ dataset/
β βββ dataset-settings-form.js
β βββ delete-modal.js
β βββ error-handler.js
β βββ feedback/
β βββ fine-tuning-create/
β βββ home-page/
β βββ inference/
β βββ login-widget.js
β βββ model/
β βββ model-catalog/
β βββ refresh-timer.js
β βββ user-profile.js
βββ icons.js
βββ index.js
βββ pages
β βββ data-catalog-page.js
β βββ dataset-page.js
β βββ feedback-page.js
β βββ fine-tuning-create-page.js
β βββ home-page.js
β βββ inference-page.js
β βββ model-catalog-page.js
β βββ model-page.js
β βββ not-found-page.js
βββ router.js
βββ utils.js
βββ webcomponent.js
This project uses a custom Web Components Library. All pages and components extend the base class defined in app/js/webcomponent.js.
Each JavaScript file typically follows this structure:
import asWebComponent from "app/js/webcomponent.js"; /* Must be imported for every webcomponents file */
const template = (obj) => /* HTML */ `
<style>
/* Component styles here */
</style>
<div>/* Component HTML here */</div>
`;
window.customElements.define(
"my-component" /* Custom component name */,
class extends asWebComponent(HTMLElement) {
init() {}
render() {
this.setDOM(template(this));
}
/* Component methods here */
}
);Third party libraries are stored in app/js/libs. To keep track of dependency versions and vulnerabilities, the libraries can be installed via npm
and then copied from node_modules to the correct location using copy-libs.sh script. You should copy only the compiled/minified files that you need, usually in the dist folder.
This project uses Cesium for the main inference page map. Some of the Cesium styles have been changed to allow for better visual intergration into the studio.
Note: Running
copy-libs.shwill overwriteapp/js/libs/cesium/Widgets/widgets.css. To preserve custom styles, do not commit changes to this file.

