diff --git a/Justfile b/Justfile index 32186d8ce..3f729133c 100644 --- a/Justfile +++ b/Justfile @@ -332,7 +332,7 @@ ui-dev api="http://127.0.0.1:3131" port="5173": MESH_UI_API_ORIGIN="{{ api }}" VITE_API_URL="{{ api }}" pnpm run dev -- --host 0.0.0.0 --port {{ port }} # Run the UI dev server proxying to the public meshllm.cloud API -ui-dev-public: (ui-dev "https://meshllm.cloud") +ui-dev-public: (ui-dev "https://public.meshllm.cloud") # Build the public website into docs/ for static hosting. website-build: @@ -422,7 +422,7 @@ test-all: echo "No server on port 3131 — starting UI dev server with public mesh..." # Start dev server in background, capture PID tree for cleanup - MESH_UI_API_ORIGIN="https://meshllm.cloud" VITE_API_URL="https://meshllm.cloud" bash -c 'cd "{{ ui_dir }}" && pnpm exec vite --host 0.0.0.0 --port 5173' & + MESH_UI_API_ORIGIN="https://public.meshllm.cloud" VITE_API_URL="https://public.meshllm.cloud" bash -c 'cd "{{ ui_dir }}" && pnpm exec vite --host 0.0.0.0 --port 5173' & DEV_PID=$! # Wait for dev server to be ready (up to 30s) diff --git a/crates/mesh-llm-ui/src/constants/default-system-prompt.md b/crates/mesh-llm-ui/src/constants/default-system-prompt.md index 865c0bf47..4759cdc09 100644 --- a/crates/mesh-llm-ui/src/constants/default-system-prompt.md +++ b/crates/mesh-llm-ui/src/constants/default-system-prompt.md @@ -38,7 +38,7 @@ In plain terms: MeshLLM exists because powerful open models should not require e ## Who made it -The public origin statement on docs.meshllm.cloud is signed by **Mic N**. Public GitHub contributor data for `Mesh-LLM/mesh-llm` identifies these top three human contributors: +The public origin statement on meshllm.cloud is signed by **Mic N**. Public GitHub contributor data for `Mesh-LLM/mesh-llm` identifies these top three human contributors: 1. **Michael Neale** (`michaelneale`) 2. **James Dumay** (`i386`) diff --git a/crates/mesh-llm-ui/src/features/app-shell/components/AppHeader.tsx b/crates/mesh-llm-ui/src/features/app-shell/components/AppHeader.tsx index 17b995296..d9708fc70 100644 --- a/crates/mesh-llm-ui/src/features/app-shell/components/AppHeader.tsx +++ b/crates/mesh-llm-ui/src/features/app-shell/components/AppHeader.tsx @@ -19,7 +19,7 @@ import { cn } from '@/lib/utils' import { env } from '@/lib/env' import type { TopSection } from '@/features/app-shell/lib/routes' -const DOCS_URL = 'https://docs.meshllm.cloud' +const DOCS_URL = 'https://meshllm.cloud' type ThemeMode = 'auto' | 'light' | 'dark' diff --git a/crates/mesh-llm-ui/src/features/app-tabs/data.ts b/crates/mesh-llm-ui/src/features/app-tabs/data.ts index 4f86c8501..b8e3c47ce 100644 --- a/crates/mesh-llm-ui/src/features/app-tabs/data.ts +++ b/crates/mesh-llm-ui/src/features/app-tabs/data.ts @@ -2060,7 +2060,7 @@ export const DASHBOARD_HARNESS: DashboardHarnessData = { description: 'Build personal AI from open models. Pool machines across your home, office, or friends — no cloud needed.', actions: [ - { label: 'Learn more', href: 'https://docs.meshllm.cloud/', tone: 'link' }, + { label: 'Learn more', href: 'https://meshllm.cloud/', tone: 'link' }, { label: 'GitHub', href: 'https://github.com/Mesh-LLM/mesh-llm', tone: 'secondary' } ] }, @@ -2071,7 +2071,7 @@ export const DASHBOARD_HARNESS: DashboardHarnessData = { meshNodeSeeds: MESH_NODES, meshId: 'dashboard-mesh', connect: { - installHref: 'https://docs.meshllm.cloud/#install', + installHref: 'https://meshllm.cloud/#install', apiStatus: 'configured target', runCommand: 'mesh-llm --auto --join ', description: 'contribute compute to the mesh' @@ -2097,11 +2097,11 @@ export const DASHBOARD_HARNESS: DashboardHarnessData = { export const SHELL_HARNESS: ShellHarnessData = { productName: 'mesh-llm', brand: { primary: 'mesh', accent: 'llm' }, - footerLinks: [{ label: 'Docs', href: 'https://docs.meshllm.cloud/' }], + footerLinks: [{ label: 'Docs', href: 'https://meshllm.cloud/' }], footerTrailingLink: { label: 'GitHub', href: 'https://github.com/Mesh-LLM/mesh-llm' }, topNavApiAccessLinks: [ - { href: 'https://docs.meshllm.cloud/', label: 'Docs' }, - { href: 'https://docs.meshllm.cloud/#install', label: 'Install' } + { href: 'https://meshllm.cloud/', label: 'Docs' }, + { href: 'https://meshllm.cloud/#install', label: 'Install' } ], topNavJoinCommands: [ { @@ -2119,9 +2119,9 @@ export const SHELL_HARNESS: ShellHarnessData = { { label: 'Client-only join command', value: 'mesh-llm client --join ', prefix: '$' } ], topNavJoinLinks: [ - { href: 'https://docs.meshllm.cloud/', label: 'Setup' }, - { href: 'https://docs.meshllm.cloud/#install', label: 'Install' }, - { href: 'https://docs.meshllm.cloud/#blackboard', label: 'Blackboard' } + { href: 'https://meshllm.cloud/', label: 'Setup' }, + { href: 'https://meshllm.cloud/#install', label: 'Install' }, + { href: 'https://meshllm.cloud/#blackboard', label: 'Blackboard' } ] } diff --git a/crates/mesh-llm-ui/src/features/chat/components/ChatPage.tsx b/crates/mesh-llm-ui/src/features/chat/components/ChatPage.tsx index e99a50a91..f9c4266fa 100644 --- a/crates/mesh-llm-ui/src/features/chat/components/ChatPage.tsx +++ b/crates/mesh-llm-ui/src/features/chat/components/ChatPage.tsx @@ -34,7 +34,7 @@ import { ChatComposer } from '@/features/chat/components/composer/ChatComposer' import { ChatBubble } from '@/features/chat/components/messages/ChatBubble' import { ConversationList } from '@/features/chat/components/sidebar/ConversationList' -const DOCS_URL = 'https://docs.meshllm.cloud' +const DOCS_URL = 'https://meshllm.cloud' function visionBadge(model?: MeshModel | null) { if (!model) return null diff --git a/crates/mesh-llm-ui/src/features/configuration/pages/ConfigurationPage.test.tsx b/crates/mesh-llm-ui/src/features/configuration/pages/ConfigurationPage.test.tsx index 678c4e801..5f1db74d0 100644 --- a/crates/mesh-llm-ui/src/features/configuration/pages/ConfigurationPage.test.tsx +++ b/crates/mesh-llm-ui/src/features/configuration/pages/ConfigurationPage.test.tsx @@ -357,7 +357,7 @@ describe('ConfigurationPage', () => { screen.getByText('No owner-control identity on this node, run both commands to unlock saving.') ).toBeInTheDocument() expect(screen.getByText('missing owner identity')).toBeInTheDocument() - expect(screen.getByRole('link', { name: /docs/i })).toHaveAttribute('href', 'https://docs.meshllm.cloud/') + expect(screen.getByRole('link', { name: /docs/i })).toHaveAttribute('href', 'https://meshllm.cloud/') expect(screen.queryByRole('button', { name: /copy both/i })).not.toBeInTheDocument() expect(screen.getAllByText('mesh-llm')).toHaveLength(2) expect(screen.getByText('auth')).toBeInTheDocument() diff --git a/crates/mesh-llm-ui/src/features/configuration/pages/ConfigurationPage.tsx b/crates/mesh-llm-ui/src/features/configuration/pages/ConfigurationPage.tsx index 2e52ab5a5..d0b0fa44d 100644 --- a/crates/mesh-llm-ui/src/features/configuration/pages/ConfigurationPage.tsx +++ b/crates/mesh-llm-ui/src/features/configuration/pages/ConfigurationPage.tsx @@ -71,7 +71,7 @@ type ConfigurationPageProps = { const OWNER_CONTROL_READ_ONLY_MESSAGE = 'No owner-control identity on this node, run both commands to unlock saving.' const OWNER_CONTROL_SAVE_ERROR = 'Config was not saved. Runtime control is disabled: missing owner identity.' const RUNTIME_CONTROL_SAVE_UNAVAILABLE_ERROR = 'Config was not saved. Runtime control config is unavailable.' -const OWNER_CONTROL_DOCS_URL = 'https://docs.meshllm.cloud/' +const OWNER_CONTROL_DOCS_URL = 'https://meshllm.cloud/' function formatRuntimeControlDisabledReason(bootstrap: RuntimeControlBootstrapPayload | undefined) { if (bootstrap?.disabled_reason === 'missing_owner_identity') return 'missing owner identity' diff --git a/crates/mesh-llm-ui/src/features/network/components/ConnectBlock.test.tsx b/crates/mesh-llm-ui/src/features/network/components/ConnectBlock.test.tsx index 803134779..aa41a7408 100644 --- a/crates/mesh-llm-ui/src/features/network/components/ConnectBlock.test.tsx +++ b/crates/mesh-llm-ui/src/features/network/components/ConnectBlock.test.tsx @@ -5,7 +5,7 @@ import { ConnectBlock, type ConnectApiTargetLiveness } from '@/features/network/ function renderConnectBlock(apiTargetLiveness?: ConnectApiTargetLiveness) { render( { renderTopNav({ apiUrl: 'http://mesh.local:3131/v1', apiAccessLinks: [ - { href: 'https://docs.meshllm.cloud/', label: 'Docs' }, - { href: 'https://docs.meshllm.cloud/#install', label: 'Install' } + { href: 'https://meshllm.cloud/', label: 'Docs' }, + { href: 'https://meshllm.cloud/#install', label: 'Install' } ], joinCommands: [ { @@ -210,9 +210,9 @@ describe('TopNav', () => { } ], joinLinks: [ - { href: 'https://docs.meshllm.cloud/', label: 'Setup' }, - { href: 'https://docs.meshllm.cloud/#install', label: 'Install' }, - { href: 'https://docs.meshllm.cloud/#blackboard', label: 'Blackboard' } + { href: 'https://meshllm.cloud/', label: 'Setup' }, + { href: 'https://meshllm.cloud/#install', label: 'Install' }, + { href: 'https://meshllm.cloud/#blackboard', label: 'Blackboard' } ] }) diff --git a/crates/mesh-llm-ui/src/features/shell/components/TopNav.tsx b/crates/mesh-llm-ui/src/features/shell/components/TopNav.tsx index 19d09575b..1ae491b12 100644 --- a/crates/mesh-llm-ui/src/features/shell/components/TopNav.tsx +++ b/crates/mesh-llm-ui/src/features/shell/components/TopNav.tsx @@ -260,8 +260,8 @@ function HeaderLinks({ links }: { links: { href: string; label: string }[] }) { } const DEFAULT_API_ACCESS_LINKS: LinkItem[] = [ - { href: 'https://docs.meshllm.cloud/', label: 'Docs' }, - { href: 'https://docs.meshllm.cloud/#install', label: 'Install' } + { href: 'https://meshllm.cloud/', label: 'Docs' }, + { href: 'https://meshllm.cloud/#install', label: 'Install' } ] function ApiAccessContent({ apiUrl, dataMode, links }: { apiUrl: string; dataMode: DataMode; links?: LinkItem[] }) { @@ -329,9 +329,9 @@ const DEFAULT_JOIN_COMMANDS: TopNavJoinCommand[] = [ ] const DEFAULT_JOIN_LINKS: LinkItem[] = [ - { href: 'https://docs.meshllm.cloud/', label: 'Setup' }, - { href: 'https://docs.meshllm.cloud/#install', label: 'Install' }, - { href: 'https://docs.meshllm.cloud/#blackboard', label: 'Blackboard' } + { href: 'https://meshllm.cloud/', label: 'Setup' }, + { href: 'https://meshllm.cloud/#install', label: 'Install' }, + { href: 'https://meshllm.cloud/#blackboard', label: 'Blackboard' } ] function JoinInviteContent({ commands, links }: { commands?: TopNavJoinCommand[]; links?: LinkItem[] }) { diff --git a/website/src/_includes/components/cta-terminal.njk b/website/src/_includes/components/cta-terminal.njk index e903153cf..0a2ad85db 100644 --- a/website/src/_includes/components/cta-terminal.njk +++ b/website/src/_includes/components/cta-terminal.njk @@ -6,19 +6,19 @@
- +
~ · zsh · mesh-llm
- +

# Install Mesh (macOS, Linux, Windows · ~18 MB)

-

$ curl -fsSL https://mesh-llm.cloud/install.sh | sh

- +

$ curl -fsSL https://meshllm.cloud/install.sh | sh

+
diff --git a/website/src/_includes/sections/hero.njk b/website/src/_includes/sections/hero.njk index 1cb1c2ea1..83f4cbd0b 100644 --- a/website/src/_includes/sections/hero.njk +++ b/website/src/_includes/sections/hero.njk @@ -16,15 +16,19 @@ curl -fsSL - https://mesh-llm.cloud/install.sh + https://meshllm.cloud/install.sh | sh -
- + + Public mesh + + + Learn more diff --git a/website/src/assets/site.css b/website/src/assets/site.css index 5993706e3..548bc431c 100644 --- a/website/src/assets/site.css +++ b/website/src/assets/site.css @@ -1426,25 +1426,40 @@ section.hero::after { } .hero-copy.copied { color: var(--green-2); } .hero-copy.failed { color: #fca5a5; } -.hero-learn { +.hero-learn, +.hero-public { min-height: 48px; display: inline-flex; align-items: center; gap: 10px; padding: 0 16px; - border: 1px solid var(--line-3); border-radius: var(--radius); - color: var(--fg-2); font-weight: 500; transition: border-color 0.16s ease, color 0.16s ease, background-color 0.16s ease; } +.hero-learn { + border: 1px solid var(--line-3); + background: transparent; + color: var(--fg-2); +} .hero-learn:hover { border-color: rgba(59,130,246,0.48); background: var(--blue-soft); color: var(--fg); } +.hero-public { + border: 1px solid var(--primary); + background: var(--primary); + color: var(--primary-foreground); +} +.hero-public:hover { + border-color: var(--primary-hover); + background: var(--primary-hover); + color: var(--primary-foreground); +} .hero-copy:focus-visible, .hero-learn:focus-visible, +.hero-public:focus-visible, .sponsor-slot:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; @@ -1452,7 +1467,9 @@ section.hero::after { .hero-copy svg, .hero-copy i, .hero-learn svg, -.hero-learn i { +.hero-learn i, +.hero-public svg, +.hero-public i { width: 16px; height: 16px; stroke-width: 1.8; @@ -1462,6 +1479,10 @@ section.hero::after { color: var(--subtle); will-change: transform, opacity; } +.hero-public svg, +.hero-public i { + color: currentColor; +} .hero-sponsor { flex: 0 0 auto; display: flex; @@ -1582,21 +1603,25 @@ section.hero::after { } .hero-footer-actions { display: grid; - grid-template-columns: 1fr; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; width: 100%; } .hero-sponsor { display: none; } .hero-install, - .hero-learn { + .hero-learn, + .hero-public { width: 100%; max-width: none; } .hero-install { + grid-column: 1 / -1; justify-content: space-between; } - .hero-learn { + .hero-learn, + .hero-public { justify-content: center; } .hero-title-loop { diff --git a/website/src/docs/pages/installing-linux.md b/website/src/docs/pages/installing-linux.md index ba533711a..2fb165c92 100644 --- a/website/src/docs/pages/installing-linux.md +++ b/website/src/docs/pages/installing-linux.md @@ -9,7 +9,7 @@ Install Mesh on every Linux machine that should serve a model or call into a mes ## Quick install ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash +curl -fsSL https://meshllm.cloud/install.sh | bash ``` Open a new terminal after install if the installer added Mesh to your `PATH`. @@ -34,7 +34,7 @@ The installer auto-detects your GPU and selects the best bundle. Supported Linux Force a specific flavor: ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash -s -- --flavor cuda +curl -fsSL https://meshllm.cloud/install.sh | bash -s -- --flavor cuda ``` ## What the installer does @@ -46,13 +46,13 @@ The installer detects your Linux hardware, selects the matching release bundle, Install the latest prerelease: ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash -s -- --pre-release +curl -fsSL https://meshllm.cloud/install.sh | bash -s -- --pre-release ``` Install to a custom location: ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash -s -- --install-dir "$HOME/bin" +curl -fsSL https://meshllm.cloud/install.sh | bash -s -- --install-dir "$HOME/bin" ``` ## Next step diff --git a/website/src/docs/pages/installing-macos.md b/website/src/docs/pages/installing-macos.md index 6b962aca7..3a0a7d554 100644 --- a/website/src/docs/pages/installing-macos.md +++ b/website/src/docs/pages/installing-macos.md @@ -9,7 +9,7 @@ Install Mesh on every Mac that should serve a model or call into a mesh. ## Quick install ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash +curl -fsSL https://meshllm.cloud/install.sh | bash ``` Open a new terminal after install if the installer added Mesh to your `PATH`. @@ -37,7 +37,7 @@ The installer detects your Mac hardware, selects the `metal` bundle (optimized f The macOS installer auto-detects `metal`. Force a different flavor when auto-detection is wrong or you want to test a specific backend: ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash -s -- --flavor vulkan +curl -fsSL https://meshllm.cloud/install.sh | bash -s -- --flavor vulkan ``` Available macOS flavors: @@ -53,13 +53,13 @@ Available macOS flavors: Install the latest prerelease: ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash -s -- --pre-release +curl -fsSL https://meshllm.cloud/install.sh | bash -s -- --pre-release ``` Install to a custom location: ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash -s -- --install-dir "$HOME/bin" +curl -fsSL https://meshllm.cloud/install.sh | bash -s -- --install-dir "$HOME/bin" ``` ## Next step diff --git a/website/src/docs/pages/installing-windows.md b/website/src/docs/pages/installing-windows.md index 9c942e70f..748a17040 100644 --- a/website/src/docs/pages/installing-windows.md +++ b/website/src/docs/pages/installing-windows.md @@ -11,7 +11,7 @@ Install Mesh on every Windows machine that should serve a model or call into a m Open PowerShell and run: ```powershell -irm https://mesh-llm.cloud/install.ps1 | iex +irm https://meshllm.cloud/install.ps1 | iex ``` Open a new terminal after install if the installer added Mesh to your `PATH`. @@ -36,7 +36,7 @@ The installer auto-detects your GPU and selects the best bundle. Supported Windo Force a specific flavor: ```powershell -& ([scriptblock]::Create((irm https://mesh-llm.cloud/install.ps1))) -Flavor cuda +& ([scriptblock]::Create((irm https://meshllm.cloud/install.ps1))) -Flavor cuda ``` ## What the installer does @@ -48,13 +48,13 @@ The installer detects your Windows hardware, selects the matching release bundle Install the latest prerelease: ```powershell -& ([scriptblock]::Create((irm https://mesh-llm.cloud/install.ps1))) -PreRelease +& ([scriptblock]::Create((irm https://meshllm.cloud/install.ps1))) -PreRelease ``` Install to a custom location: ```powershell -& ([scriptblock]::Create((irm https://mesh-llm.cloud/install.ps1))) -InstallDir "$HOME\bin" +& ([scriptblock]::Create((irm https://meshllm.cloud/install.ps1))) -InstallDir "$HOME\bin" ``` ## Next step diff --git a/website/src/docs/pages/quickstart.md b/website/src/docs/pages/quickstart.md index 47d5ea8fd..54a83a528 100644 --- a/website/src/docs/pages/quickstart.md +++ b/website/src/docs/pages/quickstart.md @@ -12,24 +12,24 @@ Choose your platform for the fastest path: {% set macosQuick %} ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash +curl -fsSL https://meshllm.cloud/install.sh | bash ``` {% endset %} {% set linuxQuick %} ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash +curl -fsSL https://meshllm.cloud/install.sh | bash ``` {% endset %} {% set windowsQuick %} ```powershell -irm https://mesh-llm.cloud/install.ps1 | iex +irm https://meshllm.cloud/install.ps1 | iex ``` {% endset %} **macOS** — Metal (Apple Silicon): ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash +curl -fsSL https://meshllm.cloud/install.sh | bash ``` Full guide: [Installing on macOS](/docs/pages/installing-macos/) @@ -37,7 +37,7 @@ Full guide: [Installing on macOS](/docs/pages/installing-macos/) **Linux** — CUDA, ROCm, Vulkan, or CPU: ```sh -curl -fsSL https://mesh-llm.cloud/install.sh | bash +curl -fsSL https://meshllm.cloud/install.sh | bash ``` Full guide: [Installing on Linux](/docs/pages/installing-linux/) @@ -45,7 +45,7 @@ Full guide: [Installing on Linux](/docs/pages/installing-linux/) **Windows** — CUDA, ROCm, Vulkan, or CPU: ```powershell -irm https://mesh-llm.cloud/install.ps1 | iex +irm https://meshllm.cloud/install.ps1 | iex ``` Full guide: [Installing on Windows](/docs/pages/installing-windows/)