- /names/register: search → see result → one-click register
- Live API check via JavaScript (no page reload)
- Green "Register now" button links directly to Blesta checkout
- Reserved names link to /sunrise, taken names link to detail page
- Requirements and features shown alongside search
- Autofocus on input, Enter key support
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Bundle package: saves 85% vs buying separately ($64.87 → $9.99)
- New order form: /order/bundles
- Pricing page shows bundle with strikethrough original price
- 6 Blesta order forms total: domains, ssl, dns, proxy, bundles
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Proxy Services: Residential $49.99/mo, Mobile $99.99/mo, SEO $29.99/mo
- 5 Blesta order forms: domains, ssl, dns, proxy (+ old form 2)
- Affiliate program enabled: 10% commission
- All service pages link to correct order forms with group_ids
- .lthn internal SSL section on /services/ssl with trust model
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SSL page: lthn.ca Certificate Authority section with trust model
- Valid/revoked/no cert visual trust indicators
- Proxy service pages link to proxy order form
- Foundation for lthn.ca ACME integration
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Real-time block notifications at bottom of explorer
- Green dot pulses on new blocks
- Shows block height, connection status, name/tx counts
- Polls /v1/explorer/info every 10 seconds
- Auto-scrolling feed, max 50 entries
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- /api page with all 22 endpoints: Names, Proxy, Gateway, Explorer
- "Try" links on public GET endpoints for live testing
- Auth docs, widget embed code
- GET=green badge, POST=amber badge
- lthn.ca = Certificate Authority (not Canada)
- Nav API link now goes to /api page
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- /pricing — all products in one view: names, SSL, DNS, proxy
- Names: free registration + sunrise claims
- SSL: 6 tiers from DV $4.99 to EV $69.99
- DNS: 3 tiers from free to enterprise $14.99/mo
- Proxy: 3 models from $1/1K requests to $5/GB mobile
- "All payments via BTC" CTA
- Added to nav between Services and Network
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SSL Certificates order form with 4 packages: DV ($4.99), Wildcard ($39.99), IP SSL ($18), Code Signing ($59.99)
- DNS Hosting order form with 3 packages: Starter (free), Pro ($4.99/mo), Enterprise ($14.99/mo)
- Package groups created: SSL Certificates, DNS Hosting
- Order links on lthn.io pages point to correct Blesta forms
- Packages use None module as placeholder until GoGetSSL/ClouDNS creds added
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- GET /v1/names/sunrise/verify/{name} — generate verification token
- GET /v1/names/sunrise/check/{name} — check TXT record across .com/.org/.net/.io/.co.uk
- Token: _lthn-verify.brand.com TXT "lthn-verify={hash}"
- Same process as Handshake TLD claims
- Sunrise page shows both auto (DNS) and manual (email) verification paths
- Automatic claim when DNS record matches
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Organization schema on all pages (Lethean CIC, contact, offers)
- Per-name WebPage schema with Thing identifier (triggers Google Trends)
- Services ItemList schema with 3 Service offerings + pricing
- Sunrise WebPage schema with ItemList of reserved names
- OpenGraph + Twitter Card meta tags
- Canonical URLs
- Per-page meta descriptions via @yield
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- /sunrise page listing all 115 reserved names
- How to Claim: 4-step process with accepted proof types
- Stats: reserved count, active status, end date TBD
- All names as clickable tag cloud linking to detail pages
- Linked from reserved name detail pages
- "Request a reservation" CTA for unlisted brands
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Reserved names show Sunrise Period card with claim CTA
- Claim links to developers@lethean.io with pre-filled subject
- "Proof of brand ownership required" disclosure
- Available names page: feature list + prominent register button
- Fixed HNS → ITNS sidechain label
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Paired gateways show "Live — X% load" with region and connections
- Unpaired chain-only gateways show "Registered" in grey
- GatewayRegistry data merged with chain aliases on services page
- Customers see which gateways are actually responsive
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- /widget.js — drop-in search widget for partner sites
- Dark/light theme via data-theme attribute
- Checks availability, shows reserved/taken/available with register link
- CORS enabled on v1/* for cross-origin widget API calls
- XSS-safe: uses DOM methods, no innerHTML
Embed: <div id="lthn-search"></div><script src="https://lthn.io/widget.js"></script>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- connect endpoint checks GatewayRegistry first for paired nodes
- Returns real WireGuard/proxy endpoints, region, load from live data
- Falls back to chain alias discovery when no paired gateways available
- Response includes source: 'paired' or 'chain' for transparency
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- POST /v1/proxy/connect — get gateway node for service type (mobile/residential/seo)
- GET /v1/proxy/usage — usage tracking per API key (bytes, GB, requests)
- GET /v1/proxy/nodes — list available nodes by capability
- GET /v1/proxy/status — network availability + service pricing
- NodeSelector: round-robin selection from chain aliases by capability
- UsageMeter: per-key tracking of bytes and requests
- Three billing models: mobile ($5/GB), residential ($2.50/GB), SEO (per-request)
- Auth required for connect/usage, public for status/nodes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- /services page scanning chain for gateways, services, exit nodes
- Gateway cards with capability badges (VPN, DNS, PROXY, EXIT)
- Services table with capabilities and status
- CTA: "Run Your Own Gateway" with registration link
- Added to nav menu
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Name detail: owner with @LetheanRegistry/@LetheanTestnet labels
- Type badges: Reserved (amber), Gateway/Service/User (green)
- Capabilities shown as individual badges (vpn, dns, proxy, etc)
- HNS sidechain reference shown when present
- Directory: type column with badges, details column with capabilities
- API lookup link on detail pages
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Explorer index shows last 15 blocks with height, type, time, diff, hash
- All heights and hashes link to block detail page
- Block detail: prev hash links to previous block, reward shown
- Stats cards link to block/aliases pages
- Previous/Next navigation with block numbers
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Bearer token auth middleware on POST /register and /records
- Throttle: 10 registrations/min, 20 DNS updates/min
- Token configurable via API_TOKEN env var (disabled when empty)
- Daemon alias validation: a-z 0-9 . - up to 255 chars
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- DNS update locks name for 5 min (until block confirms)
- Second edit gets clear "update pending" error (409)
- Lock released when ticket confirmed against chain
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- dns= entries now separated by | instead of ,
- Commas in TXT values (e.g. SPF records) no longer break parsing
- IPv6 addresses verified safe with splitColon(entry, 3)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- DaemonRpc: try/catch with stale cache (1h TTL) when daemon is down
- WalletRpc: try/catch with clear error message
- Health endpoint: status=offline/degraded/critical/low_funds/healthy
- Reports wallet_online, daemon_online, stale flags
- Reduced daemon timeout from 10s to 5s, wallet from 30s to 15s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Cache-based lock on name during registration (10 min TTL)
- Availability check shows reserved: true when locked
- Second registration attempt gets clear error message
- Lock released on permanent failure, auto-expires after 10 min
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- POST /v1/names/records/{name} returns ticket ID for tracking
- GET /v1/names/ticket/{id} checks status (queued/pending/confirmed)
- Queue gracefully handles busy chain (202 Accepted)
- Ticket auto-checks confirmation against chain alias
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- GET /v1/names/records/{name} reads from LNS sidechain (/resolve)
- POST /v1/names/records/{name} writes via update_alias on chain
- Records encoded in alias comment: dns=TYPE:HOST:VALUE,...
- LNS_URL config for sidechain endpoint
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- POST /v1/names/register endpoint with wallet RPC integration
- WalletRpc service for alias registration via daemon wallet
- Blade views for homepage, explorer, names directory, network status
- Explorer and Names modules with view namespaces and web controllers
- Pool endpoint graceful offline handling
- Explorer block detail, aliases, search views
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
getAliasByName now returns null when daemon responds with status
NOT_FOUND or empty address. /v1/names/available/{name} correctly
reports available=true for unregistered names.
Co-Authored-By: Charon <charon@lethean.io>