Legal pages (Terms, Privacy, Disclaimer) + always-present footer

- New /terms, /privacy, /disclaimer pages in the site style with real content
  tailored to an on-chain ad+referral platform (no income guarantee, crypto
  risk, rehearsal note, privacy of email/wallet/profile, acceptable use).
- renderNav now appends a persistent footer with legal + site links on every
  public page; member-area sidebar gets a Legal link group.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-09-07 09:38:08 -05:00
parent 1934225d84
commit 0c803c07cb
12 changed files with 136 additions and 6 deletions
+11
View File
@@ -45,6 +45,17 @@ window.IAP = (function () {
const a = nav.querySelector('[data-p="' + active + '"]');
if (a) a.className = 'active';
refreshNavWallet();
renderFooter();
}
function renderFooter() {
if (document.getElementById('iapFooter')) return;
const f = document.createElement('footer'); f.id = 'iapFooter';
f.style.cssText = 'border-top:1px solid var(--line);margin-top:48px;padding:26px 22px;text-align:center;color:var(--muted);font-size:13px';
f.innerHTML = '<div>© ' + new Date().getFullYear() + ' InstantAdPay</div>'
+ '<div style="margin-top:8px;display:flex;gap:16px;justify-content:center;flex-wrap:wrap">'
+ '<a href="/">How it works</a><a href="/ledger">Live ledger</a><a href="/contract">The contract</a>'
+ '<a href="/terms">Terms</a><a href="/privacy">Privacy</a><a href="/disclaimer">Disclaimer</a></div>';
document.body.appendChild(f);
}
async function refreshNavWallet() {
try {
+2
View File
@@ -0,0 +1,2 @@
// legal/static content pages: render the shared nav + footer
(async function () { try { await IAP.renderNav(''); } catch (e) {} })();
+1 -1
View File
@@ -141,7 +141,7 @@
<div class="small">Advertising services with a performance referral program. Not an investment product; no income guarantees. Crypto transactions are irreversible. Never spend what you cannot afford.</div>
</footer>
</div>
<script src="/assets/common.js?v=20260908a"></script>
<script src="/assets/common.js?v=20260908c"></script>
<script src="/assets/contract.js?v=20260906m"></script>
<script src="/assets/chat.js?v=20260906m"></script>
</body>
+32
View File
@@ -0,0 +1,32 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Disclaimer | InstantAdPay</title>
<link rel="icon" type="image/png" href="/logo-icon.png">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260908a">
</head>
<body>
<div id="nav"></div>
<section><div class="wrap" style="max-width:820px">
<div class="sectionhead" style="text-align:left"><h2>Risk &amp; Earnings Disclaimer</h2><p class="muted small">Last updated: September 2026</p></div>
<div class="card">
<h3>No income guarantee</h3>
<p class="muted small">InstantAdPay is an advertising service with a referral program. It is not an investment, a security, or a passive-income scheme. We do not promise, project, or guarantee any earnings. Any figures shown in examples or sample creatives are illustrations only, not typical or expected results. Most participants should expect to earn little or nothing unless real advertising is purchased in their line.</p>
<h3>Not financial or legal advice</h3>
<p class="muted small">Nothing on the Platform is investment, financial, tax, or legal advice. Do your own research and consult a professional before spending money.</p>
<h3>Crypto risk</h3>
<p class="muted small">Purchases settle on a public blockchain using a volatile network token. On-chain transactions are final and irreversible: there are no refunds, chargebacks, or reversals. You are responsible for your wallet, your keys, network fees, and the tax treatment of your activity.</p>
<h3>Rehearsal / testnet</h3>
<p class="muted small">During any rehearsal or testnet phase, the Platform runs on test tokens with no monetary value. Balances, purchases, and payouts during that phase are for testing only and do not carry over to a live launch.</p>
<h3>Advertising</h3>
<p class="muted small">Ads are member-created and auto-approved for speed. InstantAdPay does not endorse and is not responsible for advertised products, sites, or claims. Use your judgment, and report anything broken or inappropriate.</p>
<h3>Your responsibility</h3>
<p class="muted small">You decide whether, and how much, to spend. Never spend more than you can afford to lose.</p>
</div>
</div></section>
<script src="/assets/common.js?v=20260908c"></script>
<script src="/assets/legal.js?v=20260908a"></script>
</body>
</html>
+1 -1
View File
@@ -438,7 +438,7 @@
</div>
</section>
<script src="/assets/common.js?v=20260908a"></script>
<script src="/assets/common.js?v=20260908c"></script>
<script src="/assets/wallet.js?v=20260907q"></script>
<script src="/assets/home.js?v=20260906m"></script>
<script src="/assets/chat.js?v=20260906m"></script>
+1 -1
View File
@@ -37,7 +37,7 @@
<div>InstantAdPay · <a href="/">how it works</a> · <a id="contractLink" href="#" target="_blank" rel="noopener">contract source ↗</a></div>
</footer>
</div>
<script src="/assets/common.js?v=20260908a"></script>
<script src="/assets/common.js?v=20260908c"></script>
<script src="/assets/ledger.js?v=20260906m"></script>
<script src="/assets/chat.js?v=20260906m"></script>
</body>
+7 -1
View File
@@ -142,6 +142,12 @@
<a href="/ledger">Live ledger</a>
<a href="/contract">The contract</a>
</div>
<div class="bo-links">
<span class="bo-cap">Legal</span>
<a href="/terms" target="_blank" rel="noopener">Terms</a>
<a href="/privacy" target="_blank" rel="noopener">Privacy</a>
<a href="/disclaimer" target="_blank" rel="noopener">Disclaimer</a>
</div>
<div class="bo-foot">
<span id="navWallet" class="small muted">…</span>
<a href="#" id="logoutLink" class="small">Log out</a>
@@ -679,7 +685,7 @@
</div>
</div>
</div>
<script src="/assets/common.js?v=20260908a"></script>
<script src="/assets/common.js?v=20260908c"></script>
<script src="/assets/wallet.js?v=20260907q"></script>
<script src="/assets/my.js?v=20260908b"></script>
<script src="/assets/chat.js?v=20260907l"></script>
+34
View File
@@ -0,0 +1,34 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Privacy Policy | InstantAdPay</title>
<link rel="icon" type="image/png" href="/logo-icon.png">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260908a">
</head>
<body>
<div id="nav"></div>
<section><div class="wrap" style="max-width:820px">
<div class="sectionhead" style="text-align:left"><h2>Privacy Policy</h2><p class="muted small">Last updated: September 2026</p></div>
<div class="card">
<h3>What we collect</h3>
<p class="muted small">A minimal set: the email you sign up with, a username and any profile details you choose to add (avatar, bio, social links), and, only if you link one, your public wallet address. Campaign content you create and reports you submit are stored to run the service. We also read on-chain activity that is already public on the blockchain.</p>
<h3>What we do not collect</h3>
<p class="muted small">We never take custody of your funds or private keys, and we do not sell your personal data.</p>
<h3>How we use it</h3>
<p class="muted small">To run your account, deliver and measure ads, attribute referrals, send service and notification emails (payouts, messages, onboarding), and keep the Platform secure. You can set your email and chat notification preferences in your dashboard.</p>
<h3>Cookies</h3>
<p class="muted small">We use a session cookie to keep you signed in and a referral cookie to credit the sponsor whose link you arrived through. That is it. No third-party ad-tracking cookies.</p>
<h3>Sharing</h3>
<p class="muted small">Your username, public profile, and public wall are visible to others by design, and on-chain transactions are public by nature. We share data with infrastructure providers (hosting, email delivery) only as needed to operate the service, and when required by law.</p>
<h3>Your choices</h3>
<p class="muted small">You can edit your profile, adjust notification and chat settings, and request account deletion by contacting us. Note that on-chain records cannot be deleted by anyone.</p>
<h3>Security</h3>
<p class="muted small">We use reasonable safeguards, but no system is perfectly secure. Protect your email and your wallet.</p>
</div>
</div></section>
<script src="/assets/common.js?v=20260908c"></script>
<script src="/assets/legal.js?v=20260908a"></script>
</body>
</html>
+42
View 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>Terms of Service | InstantAdPay</title>
<link rel="icon" type="image/png" href="/logo-icon.png">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260908a">
</head>
<body>
<div id="nav"></div>
<section><div class="wrap" style="max-width:820px">
<div class="sectionhead" style="text-align:left"><h2>Terms of Service</h2><p class="muted small">Last updated: September 2026</p></div>
<div class="card">
<p class="muted small">Please read these Terms carefully. By creating an account or using InstantAdPay ("the Platform"), you agree to them. If you do not agree, do not use the Platform.</p>
<h3>1. What InstantAdPay is</h3>
<p class="muted small">InstantAdPay is an advertising platform with a referral program. Members buy advertising packages that mint on-chain ad credits and are delivered as banner, text, video, solo, featured, and verified-visit placements. Payments between members are split by an immutable smart contract and settle directly to members' own wallets. InstantAdPay is not a bank, an investment product, a security, or a money-transmission service.</p>
<h3>2. Eligibility</h3>
<p class="muted small">You must be at least 18 and legally able to enter contracts where you live. You are responsible for complying with the laws of your jurisdiction, including any that restrict crypto activity. You may not use the Platform where doing so is unlawful.</p>
<h3>3. Accounts</h3>
<p class="muted small">You join free with an email. Keep your access secure; you are responsible for activity under your account. Your wallet is your own. We never hold, custody, or control your funds or private keys.</p>
<h3>4. Purchases and the smart contract</h3>
<p class="muted small">Package purchases execute on the blockchain. On-chain transactions are final and irreversible. Prices are shown in USD and settled in the network token at the live rate at the moment of purchase. The contract splits each purchase and pays members' wallets in the same transaction; InstantAdPay never touches the money. You are responsible for network fees.</p>
<h3>5. Referrals and qualification</h3>
<p class="muted small">Referral earnings depend on real purchases in your line and on the qualification rules published on the site and enforced by the contract. Nobody earns unless real advertising is bought. We do not promise or guarantee any income.</p>
<h3>6. Advertising rules</h3>
<p class="muted small">Ads you submit must be lawful and must not be deceptive, adult, hateful, malicious, or infringing. Ads are auto-approved for speed; we may remove or pause any ad or campaign at any time, and members can report ads for review. You are solely responsible for the ads you run and the sites they point to.</p>
<h3>7. Acceptable use</h3>
<p class="muted small">No fraud, bots, fake traffic, self-dealing to farm rewards, attempts to manipulate the contract, or abuse of other members. We may suspend or terminate accounts that break these rules.</p>
<h3>8. No warranty</h3>
<p class="muted small">The Platform is provided "as is," without warranties of any kind. Blockchains, wallets, oracles, and third-party sites can fail or behave unexpectedly. We do not guarantee uptime, delivery volumes, or results.</p>
<h3>9. Limitation of liability</h3>
<p class="muted small">To the fullest extent permitted by law, InstantAdPay and its operators are not liable for indirect, incidental, or consequential damages, or for losses arising from crypto volatility, irreversible transactions, third-party sites, or your own decisions.</p>
<h3>10. Changes and termination</h3>
<p class="muted small">We may update these Terms and the Platform, and continued use means you accept the changes. We may discontinue features. The immutable contract's rules cannot be changed by anyone, including us.</p>
<p class="muted small" style="margin-top:18px">See also the <a href="/disclaimer">Disclaimer</a> and <a href="/privacy">Privacy Policy</a>.</p>
</div>
</div></section>
<script src="/assets/common.js?v=20260908c"></script>
<script src="/assets/legal.js?v=20260908a"></script>
</body>
</html>
+1 -1
View File
@@ -34,7 +34,7 @@
<p><a href="/ledger">← Back to the live ledger</a> · <a href="/contract">Read the contract review</a></p>
</div>
</section>
<script src="/assets/common.js?v=20260908a"></script>
<script src="/assets/common.js?v=20260908c"></script>
<script src="/assets/tx.js?v=20260906m"></script>
</body>
</html>
+1 -1
View File
@@ -39,7 +39,7 @@
</div>
</div>
</section>
<script src="/assets/common.js?v=20260908a"></script>
<script src="/assets/common.js?v=20260908c"></script>
<script src="/assets/wall.js?v=20260907s"></script>
</body>
</html>
+3
View File
@@ -1240,6 +1240,9 @@ const server = http.createServer(async (req, res) => {
if (p === '/') return sendFile(res, path.join(PUBLIC_DIR, 'index.html'));
if (p === '/ledger') return sendFile(res, path.join(PUBLIC_DIR, 'ledger.html'));
if (p === '/contract') return sendFile(res, path.join(PUBLIC_DIR, 'contract.html'));
if (p === '/terms') return sendFile(res, path.join(PUBLIC_DIR, 'terms.html'));
if (p === '/privacy') return sendFile(res, path.join(PUBLIC_DIR, 'privacy.html'));
if (p === '/disclaimer') return sendFile(res, path.join(PUBLIC_DIR, 'disclaimer.html'));
if (p === '/my') return sendFile(res, path.join(PUBLIC_DIR, 'my.html'));
if (p === '/shorts') return sendFile(res, path.join(PUBLIC_DIR, 'shorts.html'));
if (/^\/view\/[a-f0-9]{32}$/.test(p)) return sendFile(res, path.join(PUBLIC_DIR, 'view.html'));