Commit graph

103 commits

Author SHA1 Message Date
Claude
9b4b6d5264
feat: instant name registration page with live availability check
- /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>
2026-04-04 08:15:46 +01:00
Claude
0220be23a4
fix: medium code review findings
- NodeSelector: array_values inside cache closure (fix key gaps)
- GatewayRegistry: prune expired entries from live_list on access
- Removed orphaned lethean::names view (replaced by names::index)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:10:58 +01:00
Claude
a5f28d5f6f
security: fix critical + high code review findings
CRITICAL:
- DaemonRpc: only cache successful responses as stale fallback (not errors)
- Records endpoint: replaced file_get_contents with Http::timeout(3)

HIGH:
- WalletRpc: removed exception message from API response (IP leak)
- Ticket/session IDs: replaced MD5(predictable) with random_bytes (CSPRNG)
- Race condition lock: Cache::add() atomic instead of has()+put()

MEDIUM:
- Block caching: getBlockByHeight cached 1hr (blocks are immutable)
- Sunrise meta description: fixed Blade variable syntax

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 08:08:18 +01:00
Claude
5e631f5a68
feat: Web3 Starter Bundle — name + DNS Pro + DV SSL for $9.99/yr
- 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>
2026-04-04 08:04:22 +01:00
Claude
d96821f795
fix: pricing page shows monthly proxy plans with overage rates 2026-04-04 08:02:56 +01:00
Claude
bb6c7693e2
feat: proxy order form + affiliate program + all product links wired
- 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>
2026-04-04 08:01:34 +01:00
Claude
a336a35139
feat: .lthn internal SSL section + proxy order links + trust model
- 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>
2026-04-04 07:59:37 +01:00
Claude
2264b7c151
fix(explorer): live feed moved to top, capped at 8 lines 2026-04-04 07:55:53 +01:00
Claude
425d54f251
feat: improved footer with quick links — Pricing, API, Sunrise, Order, Source, Contact 2026-04-04 07:54:34 +01:00
Claude
cfd977aaaf
feat(explorer): live chain feed with 10s polling
- 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>
2026-04-04 07:44:40 +01:00
Claude
21975b8ffe
fix: API docs at /docs (not /api — route conflict with Laravel) 2026-04-04 07:26:21 +01:00
Claude
03a9b55bf8
feat: interactive API reference page + domain corrections
- /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>
2026-04-04 07:25:56 +01:00
Claude
8deebc8384
feat: "Why Lethean" page replacing sparse about page
- CIC governance explained (UK law, 8-pac voting, enforceable)
- Blockchain-native vs database comparison table
- 6 feature cards: CIC, blockchain, BTC, open source, wholesale, decentralised
- Lethean vs Traditional Registrars comparison table
- CTA to pricing page

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:05:43 +01:00
Claude
1c294455cd
feat: pricing page with full product comparison
- /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>
2026-04-04 06:59:08 +01:00
Claude
d293d2f221
feat(blesta): SSL + DNS order forms and packages
- 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>
2026-04-04 06:56:46 +01:00
Claude
d17fe54cf1
feat: full registrar product suite — SSL, DNS hosting, updated homepage
- /services/ssl — GoGetSSL wholesale: DV, Wildcard, IP SSL, OV, EV, Code Signing
- /services/dns-hosting — ClouDNS tiers: Starter (free), Pro ($4.99), Enterprise ($14.99)
- Services landing includes SSL + DNS cards alongside proxy categories
- Homepage: "Names. DNS. SSL. Proxy." hero with full product grid
- Six product cards: .lthn Names, DNS Hosting, SSL Certs, Proxy, Explorer, Discovery
- All linked to order.lthn.ai for purchase

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 06:49:41 +01:00
Claude
ed300e200e
feat(sunrise): verify then pay claim flow + ownership tiers
- Verify response includes claim_process (4 steps: verify → check → pay → transfer)
- Ownership tiers: free (registry key, limited DNS) vs paid (your key, full control)
- Check response includes purchase_url when verified
- Payment via Blesta/BTCPay completes the claim

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 06:34:26 +01:00
Claude
cf24879c9c
fix: remove letterhead as accepted proof (forgeable) 2026-04-04 06:29:20 +01:00
Claude
054b2e6161
feat(sunrise): DNS TXT verification for brand claims (HNS-style)
- 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>
2026-04-04 06:28:58 +01:00
Claude
fee14f9bbb
fix: sunrise banner links to /sunrise page, enquire button for mailto 2026-04-04 06:20:00 +01:00
Claude
a549e026db
fix: homepage CTA links to /names/register not broken API path 2026-04-04 06:16:29 +01:00
Claude
3814182273
fix(seo): fix Blade @context parsing in schema.org markup
- Layout schema wrapped in @verbatim to prevent Blade parsing @context/@type
- Removed per-page schema sections (Blade variables inside @verbatim don't work)
- Org-level schema + OpenGraph + meta descriptions all rendering correctly
- All pages back to 200

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 06:12:09 +01:00
Claude
6a2709fd7e
feat(seo): schema.org rich markup + OpenGraph + meta descriptions
- 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>
2026-04-04 06:06:43 +01:00
Claude
fa771a9422
feat(sunrise): dedicated sunrise period page
- /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>
2026-04-04 05:53:57 +01:00
Claude
b28cd85a26
feat(names): sunrise period claim flow + improved available page
- 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>
2026-04-04 05:45:54 +01:00
Claude
20083139a3
feat(services): live gateway status from pairing registry
- 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>
2026-04-04 05:38:03 +01:00
Claude
94f0b454b2
feat(proxy): billing endpoint for Blesta metered invoicing
- GET /v1/proxy/billing/{apiKey} — usage + charges per tier
- Mobile: $5/GB, Residential: $2.50/GB, SEO: $1/1K requests
- Period, usage bytes/GB/requests, per-tier cost breakdown
- Blesta cron queries this to generate overage invoices

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 05:25:40 +01:00
Claude
8a09c28ce5
feat(widget): embeddable .lthn name search widget + CORS
- /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>
2026-04-04 05:16:13 +01:00
Claude
01561b5ecc
fix(names): non-registry wallet = Community Member, not Premium 2026-04-04 05:11:58 +01:00
Claude
af00c60763
feat(names): premium vs registry-managed ownership tiers
- Names with registrar wallet address = "Registry Managed" (green)
- Names with customer wallet address = "Premium — Self-Custody" (amber)
- Shown on name detail pages and directory

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 05:09:39 +01:00
Claude
7c38f1a836
feat(proxy): prefer live paired gateways over chain discovery
- 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>
2026-04-04 04:56:46 +01:00
Claude
35944327d3
feat(gateway): pairing protocol for LetheanGateway nodes
- POST /v1/gateway/pair — register with capabilities, region, endpoints
- POST /v1/gateway/heartbeat — report alive + load + bytes (60s interval)
- GET /v1/gateway/live — real-time paired gateway list
- POST /v1/gateway/dispatch — least-loaded gateway selection
- GatewayRegistry: TTL liveness, load-based selection
- Foundation for LetheanGateway binary using core/api + go-ratelimit

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 04:43:49 +01:00
Claude
a7fa7ca087
feat(proxy): api.lthn.io proxy gateway module
- 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>
2026-04-04 04:33:13 +01:00
Claude
101beaf924
feat(services): product landing + category pages for proxy/SEO niches
- /services — top-level landing with Residential Proxy, Mobile Proxy, SEO Traffic
- /services/residential-proxy — market research, ad verification, pricing workflows
- /services/mobile-proxy — social media, account creation, app testing
- /services/seo-traffic — SERP monitoring, rank tracking, local SEO, competitor analysis
- /services/network — detailed network discovery (existing page relocated)
- Common workflows with step-by-step guides
- Gateway nodes listed on each category page

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 04:20:24 +01:00
Claude
65687c3da6
feat(services): network services discovery page
- /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>
2026-04-04 04:12:06 +01:00
Claude
9675c0fe81
feat(names): rich name detail pages + type badges in directory
- 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>
2026-04-04 03:56:37 +01:00
Claude
333ce446de
feat(explorer): recent blocks list with clickable links
- 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>
2026-04-04 03:49:22 +01:00
Claude
994fa0733f
feat(names): API auth + rate limiting on write endpoints
- 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>
2026-04-04 03:44:53 +01:00
Claude
c166471d19
feat(names): per-name edit lock prevents concurrent DNS overwrites
- 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>
2026-04-04 03:19:01 +01:00
Claude
fc97af878f
fix(names): use pipe separator in dns= format, prevent comma-in-value bug
- 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>
2026-04-04 03:17:09 +01:00
Claude
1f29000c11
feat(chain): circuit breaker with stale cache fallback
- 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>
2026-04-04 03:06:23 +01:00
Claude
0c5f35c47f
feat(names): reservation lock prevents race conditions
- 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>
2026-04-04 02:55:57 +01:00
Claude
afc955c7b9
feat(names): wallet health endpoint + pre-flight balance check
- GET /v1/names/health — registrar balance, registrations remaining, chain status
- Returns 503 when critically low (< 2 registrations)
- Pre-flight balance check in register endpoint rejects early if wallet empty
- Thresholds: low_funds < 10, critical < 2

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 02:52:34 +01:00
Claude
e351b9deaa
feat(names): background retry for queued DNS tickets
- artisan names:retry-dns command retries queued tickets
- Checks pending tx confirmation against chain
- Tracks ticket IDs in cache for iteration
- Registered via ConsoleBooting event

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 02:41:29 +01:00
Claude
03a45a51d4
feat(names): DNS change queue with ticket tracking
- 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>
2026-04-04 02:06:38 +01:00
Claude
c46a163bbb
feat(names): DNS records backed by LNS sidechain
- 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>
2026-04-04 00:53:49 +01:00
Claude
0899881138
feat(lthn.io): name registration API, Blade views, wallet RPC
- 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>
2026-04-03 23:04:27 +01:00
Claude
d8d6143a05
fix: name availability check — handle NOT_FOUND status from daemon
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>
2026-04-03 17:30:49 +01:00
Claude
41a90cbff8
feat: lthn.io API serving live chain data
Fixed: basePath self→static binding, namespace detection, event wiring,
SQLite cache, file cache driver. All Mod Boot classes converted to
$listens pattern for lifecycle event discovery.

Working endpoints:
- /v1/explorer/info — live chain height, difficulty, aliases
- /v1/explorer/stats — formatted chain statistics
- /v1/names/directory — alias directory grouped by type
- /v1/names/available/{name} — name availability check
- /v1/names/lookup/{name} — name details

Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 17:17:42 +01:00
Claude
5cf876aa21
fix: add .gitignore — exclude vendor, .env, storage
Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 16:35:07 +01:00