<%~ include('./partials/head', { title: 'Upgrade' }) %> <%~ include('./partials/nav', { nav: 'settings' }) %> <% const plan = it.account.plan; const coins = it.coins || []; const invoice = it.invoice; const payApi = it.payApi || ''; const totalSpent = it.totalSpent || 0; const hasLifetime = it.hasLifetime || false; const lifetimeBase = 140; const lifetimeDiscount = hasLifetime ? 0 : Math.min(totalSpent, lifetimeBase * 0.75); const lifetimePrice = lifetimeBase - lifetimeDiscount; %>
← Back to settings

Upgrade Plan

<% if (!invoice) { %> <% if (plan !== 'free') { %>
Buying a higher tier? Your current plan pauses and picks back up once the new one expires. If you'd rather combine them, reach out to support.
<% } %>
<% if (hasLifetime) { %>
Owned
Lifetime
$<%= lifetimeBase %>
You already have Lifetime
<% } else { %> <% } %>
<% coins.forEach(function(c, i) { %> > <% }) %>
<% } else { %> <% const inv = invoice; const isPending = inv.status === 'pending' || inv.status === 'underpaid' || inv.status === 'confirming'; const received = parseFloat(inv.amount_received || '0'); const total = parseFloat(inv.amount_crypto); const remaining = Math.max(0, total - received); const expiresAt = new Date(inv.expires_at); const now = new Date(); const remainingSec = Math.max(0, Math.floor((expiresAt.getTime() - now.getTime()) / 1000)); const mins = Math.floor(remainingSec / 60); const secs = remainingSec % 60; const pct = Math.min(100, Math.round((received / total) * 100)); const invPlanLabel = it.planLabels[inv.plan] || inv.plan; %> <% if (isPending) { %> <% } %>
<%= invPlanLabel %> <% if (inv.months) { %><%= inv.months %>mo<% } %>
$<%= Number(inv.amount_usd).toFixed(2) %>
<% if (inv.status === 'pending' || inv.status === 'underpaid') { %>
QR Code
Send exactly
<%= received > 0 && remaining > 0 ? remaining.toFixed(8) : inv.amount_crypto %> <%= inv.coin_ticker %>
Open in wallet <% if (received > 0 && remaining > 0) { %>
<%= received.toFixed(8) %> received <%= remaining.toFixed(8) %> left
<% } %>
Address
<%= inv.address %>
<%= inv.status === 'underpaid' ? 'Underpaid, send the rest' : 'Waiting for payment' %>
<%= mins %>:<%= String(secs).padStart(2, '0') %>
<% } else if (inv.status === 'confirming') { %>

Payment received

Waiting for network confirmation

<% if (inv.address) { %> View on explorer → <% } %>
<% } else if (inv.status === 'paid') { %>

Payment confirmed

Your <%= invPlanLabel %> plan is now active.

<% if (inv.address) { %> View on explorer → <% } %>
<% } else if (inv.status === 'expired') { %>

Invoice expired

This payment window has closed.

Try again
<% } %>

You can close this page. Payments are detected automatically.

<% } %>
<%~ include('./partials/foot') %>