From f821dc0eb486ac117b93bc149e72fc588c40b56a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A2ni=20Marques?= Date: Fri, 10 Jul 2026 17:36:51 +0200 Subject: [PATCH] =?UTF-8?q?feat(tops):=20Taler=20Operations=20design=20pre?= =?UTF-8?q?views=20(ng1=E2=80=93ng3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Static previews on ports 9090–9092: DD 90 branding (Montserrat, #0042B3, logo), FINMA sticky, no taler-ops-www build. ng1 landing, ng2 step/amount sliders + tabs, ng3 classic mirror. Podman nginx, bin/up.sh, Caddy snippet, /CHANGES notes for current site only. --- configs/taler-ops-ng/README.md | 121 +++++ configs/taler-ops-ng/bin/up.sh | 190 +++++++ configs/taler-ops-ng/deploy/CHANGES-ng3.html | 39 ++ configs/taler-ops-ng/deploy/Caddyfile.snippet | 36 ++ configs/taler-ops-ng/deploy/compose.yml | 63 +++ configs/taler-ops-ng/ng1/CHANGES/index.html | 42 ++ .../ng1/assets/montserrat-latin.woff2 | Bin 0 -> 21288 bytes .../ng1/assets/taler-full-white-text.svg | 88 ++++ .../taler-ops-ng/ng1/assets/taler-full.svg | 88 ++++ configs/taler-ops-ng/ng1/index.html | 264 ++++++++++ configs/taler-ops-ng/ng2/CHANGES/index.html | 40 ++ .../ng2/assets/montserrat-latin.woff2 | Bin 0 -> 21288 bytes .../taler-ops-ng/ng2/assets/taler-full.svg | 88 ++++ configs/taler-ops-ng/ng2/index.html | 485 ++++++++++++++++++ configs/taler-ops-ng/ng3/CHANGES/index.html | 39 ++ configs/taler-ops-ng/ng3/README.md | 10 + 16 files changed, 1593 insertions(+) create mode 100644 configs/taler-ops-ng/README.md create mode 100755 configs/taler-ops-ng/bin/up.sh create mode 100644 configs/taler-ops-ng/deploy/CHANGES-ng3.html create mode 100644 configs/taler-ops-ng/deploy/Caddyfile.snippet create mode 100644 configs/taler-ops-ng/deploy/compose.yml create mode 100644 configs/taler-ops-ng/ng1/CHANGES/index.html create mode 100644 configs/taler-ops-ng/ng1/assets/montserrat-latin.woff2 create mode 100644 configs/taler-ops-ng/ng1/assets/taler-full-white-text.svg create mode 100644 configs/taler-ops-ng/ng1/assets/taler-full.svg create mode 100644 configs/taler-ops-ng/ng1/index.html create mode 100644 configs/taler-ops-ng/ng2/CHANGES/index.html create mode 100644 configs/taler-ops-ng/ng2/assets/montserrat-latin.woff2 create mode 100644 configs/taler-ops-ng/ng2/assets/taler-full.svg create mode 100644 configs/taler-ops-ng/ng2/index.html create mode 100644 configs/taler-ops-ng/ng3/CHANGES/index.html create mode 100644 configs/taler-ops-ng/ng3/README.md diff --git a/configs/taler-ops-ng/README.md b/configs/taler-ops-ng/README.md new file mode 100644 index 0000000..dc1d6a9 --- /dev/null +++ b/configs/taler-ops-ng/README.md @@ -0,0 +1,121 @@ +# Taler Operations WWW — design previews (koopa) + +Experimental **static** previews for a redesign of [taler-ops.ch](https://taler-ops.ch/). +Content is inspired by **`taler-ops-www`** (`git.taler.net/taler-ops-www`). + +## Source branches (`taler-ops-www`) + +| Branch | Meaning | +|--------|---------| +| **`stable`** | **Stable website** (classic production-oriented tree) | +| **`master`** | Ongoing development | + +This preview stack **does not build** `taler-ops-www` (Jinja/Parcel). +If the upstream tree is old, incomplete, or fails to build — **we do not build it**. +- **ng1 / ng2**: hand-crafted static HTML in this repo +- **ng3**: optional **HTTP mirror** of live classic site (or a tiny fallback page) + +## Ports (9090+) + +| Host | Variant | Port | Container | +|------|---------|------|-----------| +| `tops.ng1.hacktivism.ch` | Taler DD 90 branding (Montserrat, `#0042B3`) | **9090** | `koopa-tops-ng1` | +| `tops.ng2.hacktivism.ch` | DD 90 + step/amount sliders | **9091** | `koopa-tops-ng2` | +| `tops.ng3.hacktivism.ch` | Classic / stable-era look | **9092** | `koopa-tops-ng3` | + +## FINMA + +ng1 and ng2 keep a **sticky, always-visible** FINMA disclaimer (not supervised by FINMA; escrow not deposit-insured; segregated account). +ng3 uses the classic site wording when mirrored, or the same disclaimer on the fallback page. + +## Deploy on koopa + +Copy this tree to the host, then run the script (rootless podman as `hernani`): + +```bash +# from your laptop (example) +scp -r configs/taler-ops-ng hernani@koopa:~/koopa-tops + +# on koopa +cd ~/koopa-tops +chmod +x bin/up.sh +./bin/up.sh # start :9090 :9091 :9092 +./bin/up.sh status +./bin/up.sh --refresh-classic # re-mirror live taler-ops.ch → ng3 (no build) +./bin/up.sh down +``` + +Smoke without Caddy: + +```bash +curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:9090/ +curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:9091/ +curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:9092/ +``` + +## Caddy (host) + +Snippet: `deploy/Caddyfile.snippet` + +```caddy +# 9090 tops ng1 | 9091 tops ng2 | 9092 tops ng3 + +tops.ng1.hacktivism.ch { + header Alt-Svc "clear" + reverse_proxy 127.0.0.1:9090 { + header_up Host {host} + header_up X-Forwarded-For {remote_host} + header_up X-Forwarded-Proto {scheme} + } +} + +tops.ng2.hacktivism.ch { + header Alt-Svc "clear" + reverse_proxy 127.0.0.1:9091 { + header_up Host {host} + header_up X-Forwarded-For {remote_host} + header_up X-Forwarded-Proto {scheme} + } +} + +tops.ng3.hacktivism.ch { + header Alt-Svc "clear" + reverse_proxy 127.0.0.1:9092 { + header_up Host {host} + header_up X-Forwarded-For {remote_host} + header_up X-Forwarded-Proto {scheme} + } +} +``` + +Also add the three hostnames to the existing HTTP→HTTPS redirect site list, then: + +```bash +sudo caddy validate --config /etc/caddy/Caddyfile +sudo systemctl reload caddy +``` + +DNS: `tops.ng1`, `tops.ng2`, `tops.ng3` under `hacktivism.ch` → koopa (same as other public vhosts). + +## Layout + +``` +configs/taler-ops-ng/ + README.md ← this file + bin/up.sh ← run on koopa + deploy/compose.yml ← podman compose + deploy/Caddyfile.snippet + ng1/index.html ← design preview + ng1/CHANGES/index.html ← /CHANGES + ng2/… · ng3/… ← same; ng3 also mirror/fallback +``` + +## /CHANGES + +Each preview serves a short change log at **`/CHANGES/`** (ng1, ng2, ng3). + +## Design notes + +- **ng1**: GNU Taler branding per [DD 90](https://docs.taler.net/design-documents/090-branding.html) / [DD 66](https://docs.taler.net/design-documents/066-wallet-color-scheme.html) (Montserrat, primary `#0042B3`, official logo). +- **ng2**: same DD 90 tokens as ng1; step carousel + amount range slider + topic tabs. +- **ng3**: classic production look via mirror; no Parcel/Jinja build pipeline. diff --git a/configs/taler-ops-ng/bin/up.sh b/configs/taler-ops-ng/bin/up.sh new file mode 100755 index 0000000..dd0fc0e --- /dev/null +++ b/configs/taler-ops-ng/bin/up.sh @@ -0,0 +1,190 @@ +#!/usr/bin/env bash +# Install / refresh Taler Operations design previews on koopa. +# Ports: 9090 (ng1), 9091 (ng2), 9092 (ng3 classic). +# +# Run ON koopa as hernani (rootless podman): +# ~/koopa-tops/bin/up.sh +# ~/koopa-tops/bin/up.sh --refresh-classic # re-mirror taler-ops.ch into ng3 +# ~/koopa-tops/bin/up.sh --down +# +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +COMPOSE=(podman compose -f deploy/compose.yml) +# older podman-compose fallback +if ! podman compose version >/dev/null 2>&1; then + if command -v podman-compose >/dev/null 2>&1; then + COMPOSE=(podman-compose -f deploy/compose.yml) + fi +fi + +log() { printf '[tops] %s\n' "$*"; } + +ensure_dirs() { + mkdir -p ng1 ng2 ng3 + if [ ! -f ng1/index.html ]; then + log "ERROR: ng1/index.html missing — copy configs/taler-ops-ng from koopa-admin-log first" + exit 1 + fi + if [ ! -f ng2/index.html ]; then + log "ERROR: ng2/index.html missing" + exit 1 + fi + # nginx container user must read bind mounts + chmod -R a+rX ng1 ng2 ng3 2>/dev/null || true +} + +# Classic / stable-era site: HTTP mirror of production only. +# Do NOT build taler-ops-www (Jinja/Parcel) — if upstream is old/broken, we skip builds. +# Branch note: git.taler.net/taler-ops-www **stable** = stable website source; master = dev. +mirror_classic() { + log "mirroring classic site → ng3/ (from https://taler-ops.ch/) — no source build" + log "taler-ops-www: branch 'stable' = stable site; we never run make/parcel here" + local tmp + tmp=$(mktemp -d) + # shellcheck disable=SC2064 + trap "rm -rf '$tmp'" RETURN + + if command -v wget >/dev/null 2>&1; then + wget -q -r -np -nH --cut-dirs=0 -E -p -k \ + --directory-prefix="$tmp" \ + --domains=taler-ops.ch \ + --timeout=20 --tries=2 \ + https://taler-ops.ch/en/index.html \ + https://taler-ops.ch/de/index.html \ + https://taler-ops.ch/fr/index.html \ + 2>/dev/null || true + # flatten: prefer mirrored en as index if present + if [ -d "$tmp" ]; then + rm -rf ng3/* + # wget often creates host dir + if [ -d "$tmp/taler-ops.ch" ]; then + cp -a "$tmp/taler-ops.ch/." ng3/ 2>/dev/null || true + else + cp -a "$tmp/." ng3/ 2>/dev/null || true + fi + fi + fi + + # Fallback / ensure something serves if mirror thin + if [ ! -f ng3/index.html ] && [ ! -f ng3/en/index.html ]; then + log "mirror incomplete — writing ng3 fallback index (points at live + FINMA text)" + cat >ng3/index.html <<'HTML' + + + + + + Taler Operations · classic (ng3) + + + + +

Classic site (ng3)

+

+ This preview is meant to serve the stable / classic Taler Operations website. + Source: taler-ops-www branch stable; production: + https://taler-ops.ch/ +

+

Mirror failed on this host — open production for the full classic UI, or re-run + ./bin/up.sh --refresh-classic with network + wget.

+

→ Open live classic EN

+ + +HTML + elif [ -f ng3/en/index.html ] && [ ! -f ng3/index.html ]; then + # convenience root redirect + cat >ng3/index.html <<'HTML' + + + +Redirect +

English

+HTML + fi + # keep /CHANGES even after mirror wipe + if [ -f deploy/CHANGES-ng3.html ]; then + mkdir -p ng3/CHANGES + cp -f deploy/CHANGES-ng3.html ng3/CHANGES/index.html + elif [ -f ng3/CHANGES/index.html ]; then + : + else + mkdir -p ng3/CHANGES + # minimal fallback if repo copy missing + printf '%s\n' 'CHANGES ng3

CHANGES ng3

Classic mirror. FINMA disclaimer on main site. Branch stable = stable website. Port 9092.

Home

' >ng3/CHANGES/index.html + fi + chmod -R a+rX ng3 2>/dev/null || true + log "ng3 ready ($(du -sh ng3 | awk '{print $1}'))" +} + +cmd_up() { + ensure_dirs + if [ ! -f ng3/index.html ] && [ ! -f ng3/en/index.html ]; then + mirror_classic + fi + log "pulling nginx image…" + podman pull docker.io/library/nginx:1.27-alpine + log "starting containers on :9090 :9091 :9092 …" + "${COMPOSE[@]}" up -d --force-recreate + sleep 1 + cmd_status + cat <<'EOF' + +=== Caddy (on host) === +Add vhosts from deploy/Caddyfile.snippet then: + sudo caddy validate --config /etc/caddy/Caddyfile + sudo systemctl reload caddy # or however you reload + +DNS: tops.ng1/ng2/ng3.hacktivism.ch → this host + +Local smoke (no Caddy): + curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:9090/ + curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:9091/ + curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1:9092/ +EOF +} + +cmd_down() { + log "stopping…" + "${COMPOSE[@]}" down || true +} + +cmd_status() { + podman ps --filter name=koopa-tops --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' || true + for p in 9090 9091 9092; do + code=$(curl -sS -m 3 -o /dev/null -w '%{http_code}' "http://127.0.0.1:${p}/" 2>/dev/null || echo fail) + log "port $p → HTTP $code" + done +} + +cmd_refresh_classic() { + mirror_classic + "${COMPOSE[@]}" up -d --force-recreate tops-ng3 + cmd_status +} + +case "${1:-up}" in + up|start) cmd_up ;; + down|stop) cmd_down ;; + status|ps) cmd_status ;; + --refresh-classic|refresh-classic) cmd_refresh_classic ;; + -h|--help) + sed -n '2,12p' "$0" | sed 's/^# \?//' + ;; + *) + log "unknown arg: $1 (try up|down|status|--refresh-classic)" + exit 2 + ;; +esac diff --git a/configs/taler-ops-ng/deploy/CHANGES-ng3.html b/configs/taler-ops-ng/deploy/CHANGES-ng3.html new file mode 100644 index 0000000..b1c4dbf --- /dev/null +++ b/configs/taler-ops-ng/deploy/CHANGES-ng3.html @@ -0,0 +1,39 @@ + + + + + + Notiz · tops.ng3 + + + + +

← Start · tops.ng3 · Port 9092

+

Diese Seite

+ +

Inhalt

+ + +

Auslieferung (aktuell)

+ + + diff --git a/configs/taler-ops-ng/deploy/Caddyfile.snippet b/configs/taler-ops-ng/deploy/Caddyfile.snippet new file mode 100644 index 0000000..c3fc268 --- /dev/null +++ b/configs/taler-ops-ng/deploy/Caddyfile.snippet @@ -0,0 +1,36 @@ +# Paste into host Caddyfile (/etc/caddy/Caddyfile) and reload Caddy. +# Ports: 9090 ng1 | 9091 ng2 | 9092 ng3 +# DNS: tops.ng{1,2,3}.hacktivism.ch → koopa (same as other *.hacktivism.ch) + +# --- comment at top of Caddyfile port map --- +# 9090 tops ng1 | 9091 tops ng2 | 9092 tops ng3 + +tops.ng1.hacktivism.ch { + header Alt-Svc "clear" + reverse_proxy 127.0.0.1:9090 { + header_up Host {host} + header_up X-Forwarded-For {remote_host} + header_up X-Forwarded-Proto {scheme} + } +} + +tops.ng2.hacktivism.ch { + header Alt-Svc "clear" + reverse_proxy 127.0.0.1:9091 { + header_up Host {host} + header_up X-Forwarded-For {remote_host} + header_up X-Forwarded-Proto {scheme} + } +} + +tops.ng3.hacktivism.ch { + header Alt-Svc "clear" + reverse_proxy 127.0.0.1:9092 { + header_up Host {host} + header_up X-Forwarded-For {remote_host} + header_up X-Forwarded-Proto {scheme} + } +} + +# Also add these hosts to the existing HTTP→HTTPS redirect block, e.g.: +# http://..., http://tops.ng1.hacktivism.ch, http://tops.ng2.hacktivism.ch, http://tops.ng3.hacktivism.ch { diff --git a/configs/taler-ops-ng/deploy/compose.yml b/configs/taler-ops-ng/deploy/compose.yml new file mode 100644 index 0000000..a1b37f6 --- /dev/null +++ b/configs/taler-ops-ng/deploy/compose.yml @@ -0,0 +1,63 @@ +# Taler Operations design previews — host ports 9090+ +# tops.ng1 → 9090 | tops.ng2 → 9091 | tops.ng3 → 9092 +# +# Usage (on koopa): +# cd ~/koopa-tops && ./bin/up.sh + +services: + tops-ng1: + image: docker.io/library/nginx:1.27-alpine + container_name: koopa-tops-ng1 + restart: unless-stopped + ports: + - "9090:80" + volumes: + - ../ng1:/usr/share/nginx/html:ro + labels: + org.hacktivism.service: tops-ng1 + org.hacktivism.host_port: "9090" + org.hacktivism.site: tops.ng1.hacktivism.ch + org.hacktivism.managed_by: koopa-admin + healthcheck: + test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1/"] + interval: 30s + timeout: 5s + retries: 3 + + tops-ng2: + image: docker.io/library/nginx:1.27-alpine + container_name: koopa-tops-ng2 + restart: unless-stopped + ports: + - "9091:80" + volumes: + - ../ng2:/usr/share/nginx/html:ro + labels: + org.hacktivism.service: tops-ng2 + org.hacktivism.host_port: "9091" + org.hacktivism.site: tops.ng2.hacktivism.ch + org.hacktivism.managed_by: koopa-admin + healthcheck: + test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1/"] + interval: 30s + timeout: 5s + retries: 3 + + tops-ng3: + image: docker.io/library/nginx:1.27-alpine + container_name: koopa-tops-ng3 + restart: unless-stopped + ports: + - "9092:80" + volumes: + - ../ng3:/usr/share/nginx/html:ro + labels: + org.hacktivism.service: tops-ng3 + org.hacktivism.host_port: "9092" + org.hacktivism.site: tops.ng3.hacktivism.ch + org.hacktivism.managed_by: koopa-admin + healthcheck: + test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1/"] + interval: 30s + timeout: 5s + retries: 3 diff --git a/configs/taler-ops-ng/ng1/CHANGES/index.html b/configs/taler-ops-ng/ng1/CHANGES/index.html new file mode 100644 index 0000000..13a73a6 --- /dev/null +++ b/configs/taler-ops-ng/ng1/CHANGES/index.html @@ -0,0 +1,42 @@ + + + + + + Notiz · tops.ng1 + + + + +

← Start · tops.ng1 · Port 9090

+

Diese Seite

+ +

Inhalt & Branding

+ + +

Auslieferung (aktuell)

+ + + diff --git a/configs/taler-ops-ng/ng1/assets/montserrat-latin.woff2 b/configs/taler-ops-ng/ng1/assets/montserrat-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5379c126ec2185f881830029e90dea857b1e97da GIT binary patch literal 21288 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 + + + + + + image/svg+xml + + + + + + + + \ No newline at end of file diff --git a/configs/taler-ops-ng/ng1/assets/taler-full.svg b/configs/taler-ops-ng/ng1/assets/taler-full.svg new file mode 100644 index 0000000..fc0d37f --- /dev/null +++ b/configs/taler-ops-ng/ng1/assets/taler-full.svg @@ -0,0 +1,88 @@ + + + + + + + image/svg+xml + + + + + + + + \ No newline at end of file diff --git a/configs/taler-ops-ng/ng1/index.html b/configs/taler-ops-ng/ng1/index.html new file mode 100644 index 0000000..3c8e392 --- /dev/null +++ b/configs/taler-ops-ng/ng1/index.html @@ -0,0 +1,264 @@ + + + + + + Taler Operations AG · digital cash for Switzerland + + + + + + + + + + +
+ + GNU Taler + + +
+ +
+
+ Switzerland · eCHF · privacy +

Taler — a digital payment system as private as cash

+

+ The Taler Wallet is your digital purse. Withdraw electronic cash from your Swiss bank account, + then pay with QR code or NFC — standard bank transfer times apply. +

+ +
+
+ + + +
+
+

Prerequisites

+
+
    +
  • Swiss bank account with an IBAN starting with CH
  • +
  • Mobile phone number with +41 to receive P2P payments
  • +
+
+
+ +
+

3 steps to get started

+
+
+ 1 +
+

Install the wallet

+

Android, iOS, or browser extension from the official wallet portal.

+ +
+
+
+ 2 +
+

Withdraw digital cash

+

Tap “Withdraw CHF”, enter an amount, confirm the bank transfer. Processing follows Swiss bank transfer times.

+
+
+
+ 3 +
+

Pay

+

Scan a merchant QR code or use NFC — confirm once. Only spend what you withdrew.

+
+
+
+
+ +
+

Merchants & map

+

+ Pay in person where eCHF with Taler is accepted. + Full merchant map and onboarding: + taler-ops.ch map · + become a merchant. +

+
+ +
+

FAQ

+
+ Is this supervised by FINMA? +

No. Taler Operations AG is not supervised by FINMA. Escrow is in a segregated bank account and is not covered by deposit insurance. See the sticky notice above.

+
+
+ How is this like a regular wallet? +

You can only spend money you previously withdrew. No credit; the exchange does not learn what you bought.

+
+
+ Where is production? +

Live service: taler-ops.ch.

+
+
+
+ + + + diff --git a/configs/taler-ops-ng/ng2/CHANGES/index.html b/configs/taler-ops-ng/ng2/CHANGES/index.html new file mode 100644 index 0000000..a2db094 --- /dev/null +++ b/configs/taler-ops-ng/ng2/CHANGES/index.html @@ -0,0 +1,40 @@ + + + + + + Notiz · tops.ng2 + + + + +

← Start · tops.ng2 · Port 9091

+

Diese Seite

+ +

Inhalt & UI

+
    +
  • Landing Taler Operations: 3-Schritte-Slider, Betrags-Slider, Themen-Tabs, FAQ
  • +
  • Branding wie ng1 nach + DD 90 + / DD 66 + — Montserrat, Primary #0042B3, Logo, Frame #F1F1F4
  • +
  • FINMA-Hinweis sticky und dauerhaft sichtbar
  • +
+ +

Auslieferung (aktuell)

+
    +
  • Static-HTML (kein Build von taler-ops-www)
  • +
  • nginx:1.27-alpine, rootless Podman · bin/up.sh + deploy/compose.yml
  • +
  • Caddy: reverse_proxy127.0.0.1:9091
  • +
+ + diff --git a/configs/taler-ops-ng/ng2/assets/montserrat-latin.woff2 b/configs/taler-ops-ng/ng2/assets/montserrat-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5379c126ec2185f881830029e90dea857b1e97da GIT binary patch literal 21288 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 + + + + + + image/svg+xml + + + + + + + + \ No newline at end of file diff --git a/configs/taler-ops-ng/ng2/index.html b/configs/taler-ops-ng/ng2/index.html new file mode 100644 index 0000000..5086b80 --- /dev/null +++ b/configs/taler-ops-ng/ng2/index.html @@ -0,0 +1,485 @@ + + + + + + Taler Operations AG · digital cash for Switzerland + + + + + + + + + + + + +
+
+

Digital cash as private as cash

+

+ Withdraw eCHF into the Taler wallet from your Swiss bank account, then pay with QR or NFC. +

+ Get the wallet + Slide through steps +
+
+ +
+
+

3 steps

+
+
+ How it works + 1 / 3 +
+
+
+
+ 1 +

Install the wallet

+

Android, iOS, or browser extension from the official wallet portal.

+ +
+
+ 2 +

Withdraw digital cash

+

Tap “Withdraw CHF”, enter an amount, confirm the bank transfer. Processing follows Swiss bank transfer times.

+
+
+ 3 +

Pay

+

Scan a merchant QR code or use NFC — confirm once. Only spend what you withdrew.

+
+
+
+
+ +
+ +
+
+
+ +
+

Withdraw amount

+
+
+ Example only — not a live withdrawal +
50 CHF
+
+ + +
+ Slide to pick a sample amount. In the real wallet you confirm a bank transfer for that sum; processing follows normal Swiss transfer times. +
+
+ +
+
    +
  • Swiss bank account with an IBAN starting with CH
  • +
  • Mobile phone number with +41 to receive P2P payments
  • +
+
+
+ +
+

More

+
+ + + +
+
+

For users

+

Withdraw eCHF, keep private purchases, pay in person where Taler is accepted.

+ User guide +
+ + +
+ +
+

FAQ

+
+ Is this supervised by FINMA? +

No. Taler Operations AG is not supervised by FINMA. Escrow is in a segregated bank account and is not covered by deposit insurance. See the sticky notice above.

+
+
+ How is this like a regular wallet? +

You can only spend money you previously withdrew. No credit; the exchange does not learn what you bought.

+
+
+ Where is production? +

Live service: taler-ops.ch.

+
+
+
+ + + + + + diff --git a/configs/taler-ops-ng/ng3/CHANGES/index.html b/configs/taler-ops-ng/ng3/CHANGES/index.html new file mode 100644 index 0000000..b1c4dbf --- /dev/null +++ b/configs/taler-ops-ng/ng3/CHANGES/index.html @@ -0,0 +1,39 @@ + + + + + + Notiz · tops.ng3 + + + + +

← Start · tops.ng3 · Port 9092

+

Diese Seite

+ +

Inhalt

+
    +
  • Klassische Taler-Operations-Website (Spiegel von taler-ops.ch oder Fallback-HTML)
  • +
  • Kein Build von taler-ops-www — nur HTTP-Mirror / Fallback
  • +
+ +

Auslieferung (aktuell)

+
    +
  • nginx:1.27-alpine, rootless Podman · bin/up.sh (+ optional --refresh-classic)
  • +
  • Caddy: reverse_proxy127.0.0.1:9092
  • +
+ + diff --git a/configs/taler-ops-ng/ng3/README.md b/configs/taler-ops-ng/ng3/README.md new file mode 100644 index 0000000..c1bbbe2 --- /dev/null +++ b/configs/taler-ops-ng/ng3/README.md @@ -0,0 +1,10 @@ +# ng3 — classic / stable-era site + +- **Intent:** serve the **old/classic** Taler Operations website. +- **Source of truth:** `taler-ops-www` branch **`stable`** (stable website). + `master` is development — not used for this preview. +- **On koopa:** `bin/up.sh` fills this directory via **wget mirror** of + `https://taler-ops.ch/` (no Jinja/Parcel build). +- If the mirror fails, `up.sh` writes a small fallback page with FINMA text. + +Do not commit large mirror dumps into git unless intentional.