Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ The closest analog is **A Better Route Planner (ABRP)** for EVs — Pumperly doe
- Self-hosted solutions over SaaS
- Privacy-focused (cookieless analytics, minimal data collection)
- Semver versioning for Docker images (never `:latest`)
- GitOps with Portainer for infrastructure
- GitOps for infrastructure (a Gitea repo per server, redeployed by a webhook on push)
- Docker Hub for images (`drumsergio/pumperly`)
- Tailwind CSS for styling
- TypeScript strict mode
Expand Down Expand Up @@ -86,7 +86,7 @@ The closest analog is **A Better Route Planner (ABRP)** for EVs — Pumperly doe
| Photon 1.0.1 | Geocoding / address autocomplete. Runs on `eclipse-temurin:21-jre` with official JAR. Uses OpenSearch backend (NOT old Elasticsearch). Data imported from **per-country JSONL dumps** (31 regions covering 32+ countries, ~132.7M documents). Single-pass concatenated import: all dumps downloaded in parallel, decompressed and concatenated into one file, then imported in a single `java -jar photon.jar import` invocation. |
| Caddy | Reverse proxy (existing on watchtower) |
| Docker | Multi-stage builds, images on Docker Hub |
| Portainer | Container management with GitOps |
| Gitea + deploy webhook | GitOps: a push to a server's repo redeploys the stacks it changed |

### External Data Sources (All Free, No Auth Unless Noted)

Expand Down Expand Up @@ -416,12 +416,12 @@ pumperly/
- Local `docker buildx --platform linux/amd64` is only for emergency hotfixes
- GitHub Actions handles: lint, typecheck, Docker build+push, releases, CodeQL
- Docker Hub secrets (`DOCKERHUB_USERNAME`, `DOCKERHUB_TOKEN`) are configured in GitHub repo settings
- **Deployment flow**: commit → push → **wait for GitHub Actions Docker Publish workflow to finish** → then `docker pull` and redeploy on watchtower. Never pull before the workflow completes
- **Deployment flow**: commit → push → **wait for GitHub Actions Docker Publish workflow to finish** → Renovate moves the image pin in the GitOps repo (usually within 30 minutes of the publish) and the webhook redeploys. Never `docker pull` or run compose by hand on watchtower
- **Never restart Caddy** — always use `caddy reload` (Unraid FUSE causes stale file handles on restart)

### Infrastructure & Backups

- **Portainer stack**: ID 225 ("pumperly"), endpoint 2 on watchtower. Auto-update every 5 minutes from Gitea. Config path: `pumperly/docker-compose.yml`. The Gitea repo (`giteaer/watchtower`) is private — manual redeploy via API may fail with auth errors; auto-update handles it.
- **Stack**: `pumperly/docker-compose.yml` in the private `giteaer/watchtower` Gitea repo, image pinned by tag and digest. A push that changes it makes the deploy webhook on watchtower redeploy the stack. Renovate opens and automerges the pin bump after each release. To ship sooner, set the pin yourself to `drumsergio/pumperly:vX.Y.Z@sha256:<digest>` (digest from `docker buildx imagetools inspect drumsergio/pumperly:vX.Y.Z --format '{{.Manifest.Digest}}'`), commit and push. Changing only the tag deploys nothing new, because Docker resolves the image by digest.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
- **Data volumes** (all under `/mnt/user/appdata/pumperly/`):
- `pgdata/` (~600 MB) — PostGIS database. Quick to rebuild via scrapers.
- `valhalla/` (~60+ GB) — Pre-built routing tiles + source PBF (~25GB, 31 European countries). Self-healing: Valhalla rebuilds tiles from PBF on start if missing. Rebuild takes 3-6 hours.
Expand Down
2 changes: 1 addition & 1 deletion ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ The world's first open-source energy route planner that works for ALL vehicle ty
- [x] MapLibre GL JS + react-map-gl integration
- [x] OpenFreeMap as tile provider (Liberty style)
- [x] Basic responsive layout (map fills viewport)
- [x] Docker Compose for production (PostGIS + app via Portainer GitOps)
- [x] Docker Compose for production (PostGIS + app via GitOps)

### 0.2 — Database + Spain Scraper
- [x] PostGIS schema via Prisma (stations, fuel_prices tables)
Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ You can expect an initial response within 72 hours. Critical vulnerabilities aff
| Geocoding | Photon (OpenSearch) | Internal network only |
| Routing | Valhalla | Internal network only |
| Reverse Proxy | Caddy + Cloudflare | TLS termination, DDoS protection |
| Container Runtime | Docker (Portainer) | Non-root containers, read-only where possible |
| Container Runtime | Docker Compose (GitOps) | Non-root containers, read-only where possible |

### Network Boundaries

Expand Down
Loading