View your stickers
on the map

A self-hosted web application for uploading, viewing, and managing sticker locations worldwide — with automatic GPS extraction from photos.

View on GitHub Helm Install →
Build Release AGPL3 Stars

Features
📍

Interactive Map

Browse all sticker locations on a MapLibre GL 6 world map, with a toggle between street, satellite, and terrain tile layers.

📷

GPS Extraction

Upload a photo and GPS coordinates are automatically read from EXIF metadata — no manual entry needed.

🔐

Role-based Access

Keycloak-backed authentication with four composite client roles — sm-viewer, sm-uploader, sm-editor, sm-admin — each inheriting the one below it.

☸️

Kubernetes Ready

Air-gap friendly Helm v4 chart with no chart dependencies — every template is inlined. Bring your own PostgreSQL/PostGIS and Keycloak.

🗂️

Category Management

Organise stickers into custom categories, each with its own uploaded icon, created and maintained by admins.

🧹

Moderation & Admin Tools

Removal reports with a review queue, archive/unarchive, GeoJSON and CSV export, and background maintenance jobs for thumbnails, image compression, EXIF stripping, and orphan cleanup.

🌐

Multi-language

Runtime i18n with Dutch (default) and English — switch languages without reloading the app.

🛡️

Self-hosted

AGPL-3.0 licensed. Run it on your own infrastructure — your data stays yours.


Helm Chart
Add the Helm repository
# Add repo
helm repo add stickermap https://watskebart.github.io/stickermap
helm repo update
Minimal install (raw DB credentials)
helm install stickermap stickermap/stickermap \
  --namespace stickermap --create-namespace \
  --set ingress.hostname=stickers.example.com \
  --set keycloak.url=https://auth.example.com \
  --set database.existingSecretName= \
  --set database.host=postgres.example.com \
  --set database.password=changeme
Minimal install (existing secret)
helm install stickermap stickermap/stickermap \
  --namespace stickermap --create-namespace \
  --set ingress.hostname=stickers.example.com \
  --set keycloak.url=https://auth.example.com \
  --set database.existingSecretName=my-db-secret
OCI alternative (GHCR)
helm install stickermap \
  oci://ghcr.io/watskebart/stickermap/stickermap-helm/stickermap \
  --namespace stickermap --create-namespace

HTTP→HTTPS redirect is enabled by default via a Traefik Middleware (ingress.httpRedirect=true). Set it to false if you use a different ingress controller.

Full configuration reference and mandatory values: helm/README.md


Technology Stack
Layer Technology
FrontendAngular 22 (zoneless), TypeScript 6.0, MapLibre GL 6.x
BackendPython 3.14, FastAPI, Pydantic
DatabasePostgreSQL with PostGIS (SRID 4326)
AuthenticationKeycloak, JWT RS256
ContainerPodman / Docker, compose
KubernetesHelm v4

Since 1.22.0 the map requires a browser with WebGL2 — MapLibre GL v6 removed the WebGL1 renderer. WebGL2 has been available in every major browser since 2021.