bank landing: nginx :9013 + English intro (stats placeholders)

This commit is contained in:
Hernâni Marques 2026-07-09 10:44:08 +02:00
parent 58ddcfe723
commit a3334dbcf8
No known key found for this signature in database
4 changed files with 273 additions and 0 deletions

View file

@ -0,0 +1,6 @@
# Snippet: CORS so exchange/merchant landings can fetch stats.json
# Include inside bank landing server { } or merge into bank-landing site.
# location for stats only:
# include /etc/nginx/snippets/goa-stats-cors.conf; (if placed as snippet)
# Applied as extra location on :9013 bank-landing:

View file

@ -0,0 +1,55 @@
# Bank landing — :9013 (behind Caddy :443 — never put 9013 in redirects)
server {
listen 9013;
listen [::]:9013;
server_name bank.hacktivism.ch _;
root /var/www/bank-landing;
index index.html;
# Critical behind reverse_proxy: no :9013 in Location headers
absolute_redirect off;
port_in_redirect off;
location = / {
return 302 /intro/;
}
location = /intro {
return 302 /intro/;
}
# Terms (same dark palette as merchant/exchange terms pages)
location = /terms {
alias /var/www/bank-landing/terms.html;
default_type text/html;
add_header Cache-Control "no-store" always;
}
location = /terms/ {
return 302 /terms;
}
location = /privacy {
alias /var/www/bank-landing/privacy.html;
default_type text/html;
add_header Cache-Control "no-store" always;
}
location = /privacy/ {
return 302 /privacy;
}
location /intro/ {
alias /var/www/bank-landing/;
}
location = /intro/stats.json {
alias /var/www/bank-landing/stats.json;
default_type application/json;
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Methods "GET, OPTIONS" always;
add_header Cache-Control "no-store" always;
}
location = /stats.json {
alias /var/www/bank-landing/stats.json;
default_type application/json;
add_header Access-Control-Allow-Origin * always;
add_header Cache-Control "no-store" always;
}
location / {
try_files $uri $uri/ =404;
}
}

View file

@ -0,0 +1,137 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Privacy · GOA Bank · Swiss FADP</title>
<style>
:root { color-scheme: dark light; }
body {
font-family: system-ui, -apple-system, sans-serif;
max-width: 42rem; margin: 2rem auto; padding: 0 1.1rem 3rem;
line-height: 1.5; color: #e8e6e3; background: #1a1520;
}
h1 { font-size: 1.35rem; font-weight: 800; margin: 0 0 1rem; color: #f5f0ea; }
h2 { font-size: 1.05rem; margin: 1.5rem 0 0.5rem; color: #e8c878; }
p, li, td, th { font-size: 0.95rem; }
ul { padding-left: 1.2rem; }
code, a { color: #5eead4; }
a { text-decoration: none; }
a:hover { text-decoration: underline; }
.badge {
display: inline-block; font-size: 0.72rem; font-weight: 700;
letter-spacing: 0.06em; text-transform: uppercase;
color: #c4b5fd; border: 1px solid rgba(196,181,253,0.35);
border-radius: 999px; padding: 0.2rem 0.65rem; margin-bottom: 0.85rem;
}
.note {
border-radius: 12px; padding: 0.75rem 0.9rem; margin: 0.85rem 0 1rem;
border: 1px solid rgba(255,255,255,0.1); background: rgba(0,0,0,0.25);
font-size: 0.9rem; color: #c8c4bf;
}
table { width: 100%; border-collapse: collapse; margin: 0.6rem 0 1rem; font-size: 0.88rem; }
th, td { border: 1px solid rgba(255,255,255,0.12); padding: 0.45rem 0.55rem; text-align: left; vertical-align: top; }
th { background: rgba(0,0,0,0.35); color: #e8c878; font-weight: 700; }
.muted { color: #a39e98; font-size: 0.88rem; }
footer { margin-top: 2rem; font-size: 0.85rem; color: #a39e98; }
</style>
</head>
<body>
<div class="badge">bank.hacktivism.ch · privacy · CH</div>
<h1>Privacy notice · GOA Exploration Bank</h1>
<p class="note">
This notice describes personal data processing for the self-hosted bank at
<code>bank.hacktivism.ch</code> under the Swiss Federal Act on Data Protection
(<strong>FADP / revDSG</strong>, in force since 1&nbsp;Sep&nbsp;2023). It is an
explorational service, not a licensed Swiss bank.
</p>
<h2>1. Controller</h2>
<p>Operators of the hacktivism.ch GNU Taler stack (GOA exploration deployment).
Contact via the operational channels published for this host. No separate DPO
is appointed for this experimental service.</p>
<h2>2. Categories of data retained</h2>
<table>
<thead><tr><th>Data</th><th>Examples</th><th>Typical retention</th></tr></thead>
<tbody>
<tr>
<td>Account identifiers</td>
<td>Username, account serial, registration timestamp</td>
<td>For account lifetime + up to 12 months after deletion or archive wipe</td>
</tr>
<tr>
<td>Authentication secrets</td>
<td>Password hashes / tokens (not plaintext passwords)</td>
<td>While account exists; tokens until expiry or revoke</td>
</tr>
<tr>
<td>Ledger / transactions</td>
<td>Credits, debits, amounts (GOA), subjects, counterparty account names, timestamps</td>
<td>Operational retention for the service lifetime; may be wiped on stack reset</td>
</tr>
<tr>
<td>Balances &amp; limits</td>
<td>Account balance, debt limit, conversion flags</td>
<td>While account exists</td>
</tr>
<tr>
<td>Withdrawal operations</td>
<td>Withdrawal IDs, amounts, status (pending/selected/confirmed), reserve pub when known</td>
<td>Until completed/aborted + short operational logs (daysweeks)</td>
</tr>
<tr>
<td>Technical logs</td>
<td>HTTP access logs (IP, User-Agent, path, status), application logs</td>
<td>Typically days to a few weeks (rotation); not used for marketing</td>
</tr>
<tr>
<td>Landing / demo artefacts</td>
<td>Public <code>stats.json</code> aggregates, demo withdraw URI state</td>
<td>Stats overwritten continuously; demo URI until used or rotated</td>
</tr>
</tbody>
</table>
<p><strong>Not retained as payment content:</strong> wallet coin private keys (never sent to the bank).
Full browser history or device contacts are not collected by this bank service.</p>
<h2>3. Purposes</h2>
<ul>
<li>Operating bank accounts and GOA transfers for exploration of GNU Taler</li>
<li>Authenticating users and preventing abuse</li>
<li>Enabling withdrawals to the GOA exchange</li>
<li>Security, debugging, and capacity monitoring</li>
</ul>
<h2>4. Legal basis (Swiss FADP)</h2>
<p>Processing is necessary to provide the service requested by the user (account / withdraw)
and for overriding private interests of secure operation of an experimental public stack
(Art.&nbsp;6 and 31 FADP principles: lawfulness, proportionality, purpose limitation).</p>
<h2>5. Recipients &amp; transfers</h2>
<ul>
<li><strong>GOA exchange</strong> (<code>exchange.hacktivism.ch</code>): reserve/wire-related data required by the protocol</li>
<li><strong>Infrastructure operators</strong> of this host (hosting, backups) under operational control</li>
<li>No sale of personal data. No intentional transfer outside Switzerland/EEA for this service;
infrastructure may use standard CDN/DNS resolvers</li>
</ul>
<h2>6. Your rights (FADP)</h2>
<p>Subject to legal limits: right to information/access, rectification, deletion, and to object
to processing. Contact the operators. You may lodge a complaint with the Swiss Federal Data
Protection and Information Commissioner (<strong>FDPIC / EDÖB</strong>).</p>
<h2>7. Security</h2>
<p>TLS in transit; access control on bank API; experimental service — no certified ISMS.
Do not store sensitive personal data in transaction subjects.</p>
<h2>Related</h2>
<ul>
<li><a href="https://bank.hacktivism.ch/terms">Bank terms</a></li>
<li><a href="https://exchange.hacktivism.ch/privacy">Exchange privacy</a></li>
<li><a href="https://taler.hacktivism.ch/privacy">Merchant privacy</a></li>
<li><a href="https://bank.hacktivism.ch/intro/">Bank intro</a></li>
</ul>
<footer class="muted">bank-pp-swiss-v0 · Swiss FADP (revDSG)</footer>
</body>
</html>

View file

@ -0,0 +1,75 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>No Formal Terms · GOA Bank</title>
<style>
:root { color-scheme: dark light; }
body {
font-family: system-ui, -apple-system, sans-serif;
max-width: 40rem; margin: 2rem auto; padding: 0 1.1rem 3rem;
line-height: 1.5; color: #e8e6e3; background: #1a1520;
}
h1 { font-size: 1.35rem; font-weight: 800; margin: 0 0 1rem; color: #f5f0ea; }
h2 { font-size: 1.05rem; margin: 1.4rem 0 0.5rem; color: #e8c878; }
p, li { font-size: 0.98rem; }
ul { padding-left: 1.2rem; }
code, a { color: #5eead4; }
a { text-decoration: none; }
a:hover { text-decoration: underline; }
.badge {
display: inline-block; font-size: 0.72rem; font-weight: 700;
letter-spacing: 0.06em; text-transform: uppercase;
color: #c4b5fd; border: 1px solid rgba(196,181,253,0.35);
border-radius: 999px; padding: 0.2rem 0.65rem; margin-bottom: 0.85rem;
}
.cur {
border-radius: 12px; padding: 0.75rem 0.9rem; margin: 0.85rem 0 1rem;
border: 1px solid rgba(255,255,255,0.1); background: rgba(0,0,0,0.25);
}
.cur strong { display: block; font-size: 1.05rem; margin-bottom: 0.25rem; color: #5eead4; }
.muted { color: #a39e98; font-size: 0.88rem; }
footer { margin-top: 2rem; font-size: 0.85rem; color: #a39e98; }
</style>
</head>
<body>
<div class="badge">bank.hacktivism.ch · GOA</div>
<h1>No Formal Terms · GOA Exploration Bank</h1>
<p>This is a <strong>self-hosted GNU Taler regional bank</strong> at
<code>bank.hacktivism.ch</code> (hacktivism.ch) for the explorational currency
<strong>GOA</strong>.</p>
<p><strong>No formal terms of service</strong> apply beyond this short notice.</p>
<div class="cur">
<strong>GOA · explorational</strong>
Not legal tender. No guaranteed real-world value, redemption, or convertibility.
Accounts and demo withdraws are for exploration of the GNU Taler stack only.
</div>
<h2>By using this bank you acknowledge</h2>
<ul>
<li>GOA is for exploration and testing only.</li>
<li>There is no guaranteed availability, support, or uptime.</li>
<li>Operators may reset accounts, balances, or configuration without notice.</li>
<li>Registration data and wire-style transfers may identify account holders to operators.</li>
<li>Software is provided as-is, without warranty.</li>
</ul>
<p>If you do not agree, do not use this bank.</p>
<h2>Related</h2>
<ul>
<li><a href="https://bank.hacktivism.ch/intro/">Bank intro</a></li>
<li><a href="https://exchange.hacktivism.ch/terms">Exchange terms (GOA)</a></li>
<li><a href="https://taler.hacktivism.ch/terms">Merchant terms</a></li>
<li><a href="https://bank.hacktivism.ch/privacy">Bank privacy</a></li>
<li><a href="https://bank.hacktivism.ch/webui/">Bank UI</a></li>
</ul>
<h2>Privacy</h2>
<p class="muted">Processing under Swiss FADP (revDSG). What data is retained
(accounts, ledger, logs, …) is listed on
<a href="https://bank.hacktivism.ch/privacy">/privacy</a>.</p>
<footer class="muted">bank.hacktivism.ch · landing terms</footer>
</body>
</html>