Files
docs/apps/visor/app/layout.tsx
zeekay 8e2bb684fa Add visor.hanzo.ai site + platform pricing page
- New visor-docs app: VM management landing + docs + pricing (41 files)
  - 6 VM tiers, GPU pricing, block storage
  - 11 MDX doc pages (providers, features, API)
  - K8s manifests + Dockerfile + nginx
- Add /pricing page to platform site
  - Cloud VMs, K8s pods, Docker containers, AI models
  - Feature comparison table, enterprise CTA
- Add Pricing nav link to platform layout
- Fix platform Dockerfile to use simple nginx pattern
2026-02-27 10:28:27 -08:00

54 lines
1.6 KiB
TypeScript

import './global.css';
import type { Viewport } from 'next';
import { baseUrl, createMetadata } from '@/lib/metadata';
import { Body } from '@/app/layout.client';
import { Provider } from './provider';
import type { ReactNode } from 'react';
import { Geist, Geist_Mono } from 'next/font/google';
import { TreeContextProvider } from '@hanzo/docs/ui/contexts/tree';
import { source } from '@/lib/source';
import { NextProvider } from '@hanzo/docs/core/framework/next';
export const metadata = createMetadata({
title: {
template: '%s | Hanzo Visor',
default: 'Hanzo Visor — Virtual Machine Management',
},
description: 'Launch and manage VMs across AWS, DigitalOcean, and Hetzner. Browser terminal, block storage, multi-cloud.',
metadataBase: baseUrl,
});
const geist = Geist({
variable: '--font-sans',
subsets: ['latin'],
});
const mono = Geist_Mono({
variable: '--font-mono',
subsets: ['latin'],
});
export const viewport: Viewport = {
themeColor: [
{ media: '(prefers-color-scheme: dark)', color: '#0A0A0A' },
{ media: '(prefers-color-scheme: light)', color: '#0A0A0A' },
],
};
export default function RootLayout({ children }: { children: ReactNode }) {
return (
<html lang="en" className={`${geist.variable} ${mono.variable}`} suppressHydrationWarning>
<head>
<script defer src="https://analytics.hanzo.ai/script.js" data-website-id="PLACEHOLDER" />
</head>
<Body>
<NextProvider>
<TreeContextProvider tree={source.getPageTree()}>
<Provider>{children}</Provider>
</TreeContextProvider>
</NextProvider>
</Body>
</html>
);
}