lthn.io/app/Website
Claude 360b6ce112
feat: structured data (JSON-LD) on name detail and pricing pages
Product schema on name pages with brand, offers, URL. BreadcrumbList
on pricing page. Triggers Google rich results and schema.org monitoring
alerts for brand sunrise names. Rate limit headers already provided
by api middleware group (X-RateLimit-Limit/Remaining).

Commit #103.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 13:04:57 +01:00
..
Api feat: migrate all API routes to ApiRoutesRegistering 2026-04-04 12:51:53 +01:00
Docs feat: Octane domain middleware + fix catch-all route conflicts 2026-04-04 11:31:19 +01:00
Explorer feat: Octane domain middleware + fix catch-all route conflicts 2026-04-04 11:31:19 +01:00
Lethean feat: structured data (JSON-LD) on name detail and pricing pages 2026-04-04 13:04:57 +01:00
Names fix: Octane compatibility — unconditional route registration 2026-04-04 11:03:03 +01:00
Pool fix: Octane compatibility — unconditional route registration 2026-04-04 11:03:03 +01:00
Trade fix: Octane compatibility — unconditional route registration 2026-04-04 11:03:03 +01:00
Boot.php feat: lthn.io API serving live chain data 2026-04-03 17:17:42 +01:00
CLAUDE.md feat: lthn.io API serving live chain data 2026-04-03 17:17:42 +01:00
DomainResolver.php feat: lthn.io API serving live chain data 2026-04-03 17:17:42 +01:00
README.md feat: lthn.io API serving live chain data 2026-04-03 17:17:42 +01:00

Website Module

Marketing websites outside the Mod structure.

Structure

app/Website/
├── Boot.php              # ServiceProvider (registers DomainResolver + websites)
├── DomainResolver.php    # Domain → website mapping
├── README.md
└── HostUk/               # host.uk.com / host.test
    ├── Boot.php          # Website ServiceProvider
    ├── Routes/web.php    # All marketing routes (/, /login, /pricing, etc.)
    ├── View/
    │   ├── Blade/        # Blade templates
    │   └── Modal/        # Livewire components
    ├── Mail/             # Mailable classes
    ├── Lang/en_GB/       # Translations (pages.php)
    └── Tests/Feature/    # Feature tests

Domain Resolution

The DomainResolver maps incoming domains to website directories:

$resolver = app(DomainResolver::class);

$resolver->resolve('host.uk.com');     // → 'HostUk'
$resolver->resolve('www.host.uk.com'); // → 'HostUk'
$resolver->resolve('host.test');       // → 'HostUk'

$resolver->isWebsite('host.uk.com');   // → true
$resolver->isWebsite('random.com');    // → false

Namespaces

  • Classes: Website\Host\...
  • Views: hostuk:: (e.g., hostuk::home)
  • Translations: pages:: (backward compatible)
  • Livewire: pages.* (backward compatible)

Adding a New Website

  1. Add pattern to DomainResolver::$websites:

    '/^newsite\.(com|test)$/' => 'NewSite',
    
  2. Create directory structure:

    app/Website/NewSite/
    ├── Boot.php
    ├── Routes/web.php
    ├── View/
    └── Lang/en_GB/
    
  3. Register in Website\Boot::register():

    $this->app->register(NewSite\Boot::class);
    

Routes

All marketing website routes are defined in HostUk/Routes/web.php:

  • Landing pages (/, /pricing, /about, /contact)
  • Service pages (/services/*)
  • Authentication (/login, /register, /forgot-password)
  • Legal pages (/terms, /privacy, /faq)
  • Developer docs (/developers/*)
  • AI pages (/ai/*)
  • Audience pages (/for/*)

Migration from Mod/Pages

This module was migrated from Mod/Pages/ to separate marketing content from business modules. The Livewire component names (pages.*) and translation namespace (pages::) were kept for backward compatibility.