Rebrand HydraProxy tier -> Mobile (stop leaking upstream supplier)

Customer-facing site no longer names the upstream broker. Rename:
- nav + page: HydraProxy -> Mobile, /hydraproxy -> /mobile
- hydraproxy.html -> mobile.html, all 'brokered/HydraProxy' copy reworded to
  owned 'Clean Proxys' language
- dashboard: 'HydraProxy orders (broker-fulfilled)' -> 'Mobile orders'
- admin panel keeps upstream names (internal only, drjones needs them)
This commit is contained in:
drjones
2026-09-20 21:56:48 -07:00
parent e18bdb1b41
commit 87736f51d6
5 changed files with 38 additions and 38 deletions

10
app.py
View File

@@ -549,11 +549,11 @@ def poll_provisioning():
return ok, failed
# ---------- HydraProxy provider (management-only, manual broker fulfillment) ----------
# ---------- Mobile proxy tier (4G carrier / static mobile — manually fulfilled) ----------
HYDRA_PRODUCTS = CFG.get("hydraproxy", {}).get("products", {})
@app.route("/hydraproxy")
@app.route("/mobile")
def hydraproxy_page():
account = None
err = None
@@ -561,7 +561,7 @@ def hydraproxy_page():
account = hydraproxy.get_account_info()
except Exception as e:
err = str(e)
return render_template("hydraproxy.html", products=HYDRA_PRODUCTS,
return render_template("mobile.html", products=HYDRA_PRODUCTS,
account=account, err=err, user=current_user())
@@ -576,7 +576,7 @@ def api_hydraproxy_info():
return jsonify({"error": str(e)}), 502
@app.route("/hydraproxy/order", methods=["POST"])
@app.route("/mobile/order", methods=["POST"])
@login_required
def hydraproxy_order():
u = current_user()
@@ -596,7 +596,7 @@ def hydraproxy_order():
d.commit()
d.close()
db.add_transaction(u["id"], -price, "hydraproxy", product)
flash("Order placed — our broker fulfills it shortly and delivers your proxy to the dashboard.", "ok")
flash("Order placed — your proxy is provisioned shortly and delivered to the dashboard.", "ok")
return redirect(url_for("dashboard"))

View File

@@ -39,7 +39,7 @@
<a href="/">Home</a>
<a href="/plans">Residential</a>
<a href="/dedicated">Dedicated IPs</a>
<a href="/hydraproxy">HydraProxy</a>
<a href="/mobile">Mobile</a>
<a href="/sms">SMS</a>
{% if user %}<a href="/dashboard">Dashboard</a><a href="/wallet">Wallet</a><a href="/quality">Quality</a><a href="/logout">Logout</a>
{% else %}<a href="/login">Login</a><a class="cta" href="/signup">Get proxies</a>{% endif %}

View File

@@ -96,7 +96,7 @@
{% if hydra %}
<div class="card" style="margin-top:18px">
<h3>HydraProxy orders <span class="muted" style="font-size:12px">(broker-fulfilled)</span></h3>
<h3>Mobile orders <span class="muted" style="font-size:12px">(provisioning)</span></h3>
{% for h in hydra %}
<div style="border:1px solid var(--border);border-radius:8px;padding:12px;margin:10px 0">
<div style="display:flex;justify-content:space-between">
@@ -110,7 +110,7 @@
<button onclick="copy(this.previousElementSibling)">Copy</button>
</div>
{% elif h.status == 'pending_fulfillment' %}
<p class="muted" style="font-size:12px;margin:6px 0 0">Broker is fulfilling your order — your proxy appears here when ready.</p>
<p class="muted" style="font-size:12px;margin:6px 0 0">Your proxy is being provisioned — it appears here when ready.</p>
{% endif %}
</div>
{% endfor %}

View File

@@ -1,30 +0,0 @@
{% extends "base.html" %}
{% block title %}HydraProxy — Clean Proxys{% endblock %}
{% block body %}
<div class="hero" style="padding:64px 0 28px">
<h1 style="font-size:36px">Hydra<span class="grad">Proxy</span> tier.</h1>
<p class="lede">Residential, 4G mobile, and static-mobile IPs — brokered and delivered by Clean Proxys. You pay us, we place the order with HydraProxy, you connect.</p>
</div>
{% if err %}
<div class="flash warn">HydraProxy link is offline right now: {{ err }}<br><span class="muted">(Usually means the broker IP isn't whitelisted at HydraProxy yet — the catalog below still shows what's offered.)</span></div>
{% else %}
<div class="statsbar">
<div class="s"><div class="n grad">${{ account.balance_usd if account else '—' }}</div><div class="l">HydraProxy balance</div></div>
<div class="s"><div class="n grad">{{ account.username if account else '—' }}</div><div class="l">Account</div></div>
</div>
{% endif %}
<div class="grid">
{% for key, p in products.items() %}
<div class="card plan">
<h3>{{ p.name }}</h3>
<p>{{ p.desc }}</p>
<div class="price">{{ p.price_sats }} <span style="font-size:16px;color:var(--muted)">sats / {{ p.unit }}</span></div>
<p class="muted" style="font-size:13px;margin-top:8px">Brokered — we place the order with HydraProxy after payment and hand you the live proxy.</p>
</div>
{% endfor %}
</div>
<p class="muted" style="margin-top:26px">These are broker-fulfilled (order placed manually with HydraProxy). For instant self-serve, see <a href="/plans">residential plans</a> and <a href="/dedicated">dedicated IPs</a>.</p>
{% endblock %}

30
templates/mobile.html Normal file
View File

@@ -0,0 +1,30 @@
{% extends "base.html" %}
{% block title %}Mobile — Clean Proxys{% endblock %}
{% block body %}
<div class="hero" style="padding:64px 0 28px">
<h1 style="font-size:36px">Mobile <span class="grad">proxies</span>.</h1>
<p class="lede">4G carrier, static mobile, and premium residential IPs — sourced and delivered by Clean Proxys. You pay, we provision, you connect.</p>
</div>
{% if err %}
<div class="flash warn">Mobile catalog is temporarily unavailable: {{ err }}<br><span class="muted">(The catalog below still shows what's offered.)</span></div>
{% else %}
<div class="statsbar">
<div class="s"><div class="n grad">${{ account.balance_usd if account else '—' }}</div><div class="l">Account balance</div></div>
<div class="s"><div class="n grad">{{ account.username if account else '—' }}</div><div class="l">Account</div></div>
</div>
{% endif %}
<div class="grid">
{% for key, p in products.items() %}
<div class="card plan">
<h3>{{ p.name }}</h3>
<p>{{ p.desc }}</p>
<div class="price">{{ p.price_sats }} <span style="font-size:16px;color:var(--muted)">sats / {{ p.unit }}</span></div>
<p class="muted" style="font-size:13px;margin-top:8px">Delivered by Clean Proxys — your live proxy is provisioned after payment.</p>
</div>
{% endfor %}
</div>
<p class="muted" style="margin-top:26px">These are fulfilled on request. For instant self-serve, see <a href="/plans">residential plans</a> and <a href="/dedicated">dedicated IPs</a>.</p>
{% endblock %}