Pleiades proxy store: SOCKS5 gateway + Flask storefront + BTCPay checkout
This commit is contained in:
42
templates/base.html
Normal file
42
templates/base.html
Normal file
@@ -0,0 +1,42 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{% block title %}Clean Proxys{% endblock %}</title>
|
||||
<meta name="description" content="Clean residential SOCKS5 & HTTP proxies. Global geo-targeting. No KYC. Bitcoin checkout. Encrypted backend. Agent-ready.">
|
||||
<meta name="robots" content="index,follow">
|
||||
<meta property="og:title" content="Clean Proxys — residential SOCKS5 proxies">
|
||||
<meta property="og:description" content="Clean, fast, geo-targeted residential proxies. No KYC. Pay with Bitcoin. Built for agents and humans alike.">
|
||||
<meta property="og:type" content="website">
|
||||
<link rel="stylesheet" href="/static/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<div class="wrap inner">
|
||||
<a class="logo" href="/">CLEAN<span class="dot">.</span>PROXYS</a>
|
||||
<div class="nav-links">
|
||||
<a href="/">Home</a>
|
||||
<a href="/plans">Plans</a>
|
||||
{% if user %}<a href="/dashboard">Dashboard</a><a href="/logout">Logout</a>
|
||||
{% else %}<a href="/login">Login</a><a class="cta" href="/signup">Sign up</a>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="wrap">
|
||||
{% with msgs = get_flashed_messages(with_categories=true) %}
|
||||
{% for cat, m in msgs %}<div class="flash {{ cat }}">{{ m }}</div>{% endfor %}
|
||||
{% endwith %}
|
||||
{% block body %}{% endblock %}
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<div class="wrap">
|
||||
Clean Proxys — residential SOCKS5 & HTTP proxies. ·
|
||||
<a href="https://buymeacoffee.com/r26xrthzttg" target="_blank" rel="noopener">Support the project ☕</a>
|
||||
· <a href="/llms.txt">llms.txt</a>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
58
templates/dashboard.html
Normal file
58
templates/dashboard.html
Normal file
@@ -0,0 +1,58 @@
|
||||
{% extends "base.html" %}
|
||||
{% block body %}
|
||||
<h2>Dashboard</h2>
|
||||
<div class="stats-row">
|
||||
<div class="card stat"><span class="lbl">Balance</span><span class="val">{{ '%.2f'|format(user.balance_gb) }} GB</span></div>
|
||||
<div class="card stat"><span class="lbl">Used</span><span class="val">{{ '%.3f'|format(used_gb) }} GB</span></div>
|
||||
<div class="card stat"><span class="lbl">Status</span>
|
||||
<span class="val" style="color:{{ 'var(--ok)' if user.active else 'var(--danger)' }}">{{ 'ACTIVE' if user.active else 'INACTIVE' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if not user.active %}
|
||||
<div class="flash warn">Account inactive — <a href="/plans">top up</a> to activate your proxies.</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="dash-grid">
|
||||
<div>
|
||||
<div class="card">
|
||||
<h3>Connection strings</h3>
|
||||
<label>SOCKS5</label>
|
||||
<div class="copy">
|
||||
<input type="text" readonly value="{{ socks }}" onclick="this.select()">
|
||||
<button onclick="copy(this.previousElementSibling)">Copy</button>
|
||||
</div>
|
||||
<label>HTTP (HTTPS tunneling)</label>
|
||||
<div class="copy">
|
||||
<input type="text" readonly value="{{ http }}" onclick="this.select()">
|
||||
<button onclick="copy(this.previousElementSibling)">Copy</button>
|
||||
</div>
|
||||
<p class="muted" style="font-size:12px;margin-bottom:0">Proxy password is unique to you. Use it for proxy auth, not your web password.</p>
|
||||
<form method="post" action="/dashboard/rotate" style="margin-top:14px">
|
||||
<input type="submit" value="Rotate proxy password">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h3>Location & session</h3>
|
||||
<form method="post" action="/dashboard/location">
|
||||
<label>Country (ISO code, e.g. US, GB, JP, DE)</label>
|
||||
<input type="text" name="country" value="{{ user.country }}" placeholder="US">
|
||||
<label>City (optional)</label>
|
||||
<input type="text" name="city" value="{{ user.city }}" placeholder="New York">
|
||||
<label>Region (optional, e.g. europe)</label>
|
||||
<input type="text" name="region" value="{{ user.region }}" placeholder="">
|
||||
<div class="switch" style="margin-top:14px">
|
||||
<input type="checkbox" name="sticky" id="sticky" {% if user.sticky %}checked{% endif %} style="width:auto">
|
||||
<label for="sticky" style="margin:0">Sticky session (hold IP 30 min)</label>
|
||||
</div>
|
||||
<input type="submit" value="Save location">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function copy(el){ el.select(); document.execCommand('copy'); }
|
||||
</script>
|
||||
{% endblock %}
|
||||
41
templates/index.html
Normal file
41
templates/index.html
Normal file
@@ -0,0 +1,41 @@
|
||||
{% extends "base.html" %}
|
||||
{% block body %}
|
||||
<div class="hero">
|
||||
<h1>The <span class="glow">cleanest</span> residential proxies on the web.</h1>
|
||||
<p class="lede">Global geo-targeted SOCKS5 & HTTP proxies with an encrypted backend. No KYC. No email required. Pay with Bitcoin and connect in seconds.</p>
|
||||
<div class="cta-row">
|
||||
<a class="btn btn-primary" href="/signup">Get proxies →</a>
|
||||
<a class="btn btn-ghost" href="/plans">View plans</a>
|
||||
</div>
|
||||
<pre class="code" style="max-width:640px;margin:34px auto 0;text-align:left;">$ curl -x <span class="k">socks5h://user:pass@host:1080</span> https://ipinfo.io/ip
|
||||
# 81.5.104.39 ← your clean, geo-targeted egress</pre>
|
||||
</div>
|
||||
|
||||
<section>
|
||||
<h2>Built <span class="accent">different</span>.</h2>
|
||||
<p class="sub">Everything a serious operator needs, nothing that gets in the way.</p>
|
||||
<div class="grid">
|
||||
<div class="card"><span class="ic">🌍</span><h3>Global geo-targeting</h3><p>Country, city and region targeting across a real residential pool — not a VPN masquerade.</p></div>
|
||||
<div class="card"><span class="ic">🔌</span><h3>SOCKS5 & HTTP</h3><p>Native SOCKS5 and HTTP CONNECT. Drop-in for any tool, bot, or agent.</p></div>
|
||||
<div class="card"><span class="ic">🔐</span><h3>Encrypted backend</h3><p>Your traffic rides an encrypted transport from end to end. Per-user credentials, always.</p></div>
|
||||
<div class="card"><span class="ic">⚡</span><h3>Instant activation</h3><p>Pay with Bitcoin, top up in seconds. No verification queue, no paperwork.</p></div>
|
||||
<div class="card"><span class="ic">🕶️</span><h3>No KYC</h3><p>Just a username and password. That's it.</p></div>
|
||||
<div class="card"><span class="ic">🤖</span><h3>Agent-ready</h3><p>REST API, llms.txt, and a schema agents can parse. Programmatic access is a first-class feature.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Sticky or <span class="accent">rotating</span>.</h2>
|
||||
<p class="sub">Choose a stable session IP or a fresh egress on every request — switch anytime from your dashboard.</p>
|
||||
<div class="grid">
|
||||
<div class="card"><h3>Sticky sessions</h3><p>Hold the same IP for 30 minutes. Ideal for account sessions and stateful tasks.</p></div>
|
||||
<div class="card"><h3>Rotating</h3><p>A new IP on every connection. Ideal for scraping, crawling, and high-volume jobs.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="center">
|
||||
<h2>Ready when you are.</h2>
|
||||
<p class="sub">Sign up, top up, connect. The whole thing takes under a minute.</p>
|
||||
<a class="btn btn-primary" href="/signup">Create an account</a>
|
||||
</section>
|
||||
{% endblock %}
|
||||
14
templates/login.html
Normal file
14
templates/login.html
Normal file
@@ -0,0 +1,14 @@
|
||||
{% extends "base.html" %}
|
||||
{% block body %}
|
||||
<div class="form-card card">
|
||||
<h2>Log in</h2>
|
||||
<form method="post">
|
||||
<label>Username</label>
|
||||
<input type="text" name="username" required autocomplete="username">
|
||||
<label>Password</label>
|
||||
<input type="password" name="password" required autocomplete="current-password">
|
||||
<input type="submit" value="Log in">
|
||||
</form>
|
||||
<p class="muted center" style="margin-top:16px">No account? <a href="/signup">Sign up</a></p>
|
||||
</div>
|
||||
{% endblock %}
|
||||
15
templates/order.html
Normal file
15
templates/order.html
Normal file
@@ -0,0 +1,15 @@
|
||||
{% extends "base.html" %}
|
||||
{% block body %}
|
||||
<div class="form-card card center">
|
||||
<h2>Order placed</h2>
|
||||
<p class="muted">Invoice <span class="mono">{{ order.invoice_id }}</span></p>
|
||||
<p class="muted">Status: <strong>{{ order.status }}</strong></p>
|
||||
{% if order.status != 'paid' %}
|
||||
<p class="muted">Complete payment in the BTCPay checkout, then return here. Your balance credits automatically.</p>
|
||||
<a class="btn btn-primary" href="/dashboard">Check dashboard</a>
|
||||
{% else %}
|
||||
<p style="color:var(--ok)">Paid. Balance credited.</p>
|
||||
<a class="btn btn-primary" href="/dashboard">Go to dashboard</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
29
templates/plans.html
Normal file
29
templates/plans.html
Normal file
@@ -0,0 +1,29 @@
|
||||
{% extends "base.html" %}
|
||||
{% block body %}
|
||||
<div class="hero" style="padding-bottom:20px">
|
||||
<h1>Simple <span class="glow">pricing</span>.</h1>
|
||||
<p class="lede">Pay-per-GB residential proxies. Bitcoin only. No subscriptions, no expiry traps.</p>
|
||||
</div>
|
||||
<div class="grid">
|
||||
{% for p in plans %}
|
||||
<div class="card plan">
|
||||
{% if p.gb >= 100 %}<span class="tag">BEST VALUE</span>{% endif %}
|
||||
<h3>{{ p.name }}</h3>
|
||||
<div class="price">{{ p.price_sats }} <span style="font-size:16px;color:var(--muted)">sats</span></div>
|
||||
<div class="per">{{ p.gb }} GB residential traffic</div>
|
||||
<ul>
|
||||
<li>{{ p.gb }} GB residential traffic</li>
|
||||
<li>All countries & cities</li>
|
||||
<li>SOCKS5 + HTTP</li>
|
||||
<li>Sticky or rotating</li>
|
||||
<li>No KYC</li>
|
||||
</ul>
|
||||
{% if user %}
|
||||
<form method="post" action="/buy/{{ p.id }}"><input type="submit" value="Buy {{ p.gb }} GB"></form>
|
||||
{% else %}
|
||||
<a class="btn btn-ghost" href="/signup">Sign up to buy</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
15
templates/signup.html
Normal file
15
templates/signup.html
Normal file
@@ -0,0 +1,15 @@
|
||||
{% extends "base.html" %}
|
||||
{% block body %}
|
||||
<div class="form-card card">
|
||||
<h2>Create account</h2>
|
||||
<p class="muted" style="margin-top:-4px">No email. No KYC. Just a username and password.</p>
|
||||
<form method="post">
|
||||
<label>Username</label>
|
||||
<input type="text" name="username" required minlength="3" autocomplete="username">
|
||||
<label>Password</label>
|
||||
<input type="password" name="password" required minlength="6" autocomplete="new-password">
|
||||
<input type="submit" value="Create account">
|
||||
</form>
|
||||
<p class="muted center" style="margin-top:16px">Already have one? <a href="/login">Log in</a></p>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user