fix: rebuild docs/ with latest GPU specs
@@ -22,7 +22,7 @@ const CloudPricing: React.FC = () => {
|
|||||||
|
|
||||||
const instances: GPUInstance[] = [
|
const instances: GPUInstance[] = [
|
||||||
{
|
{
|
||||||
gpu: 'NVIDIA B300',
|
gpu: 'NVIDIA B300 (Blackwell Ultra)',
|
||||||
gpuCount: 8,
|
gpuCount: 8,
|
||||||
processor: 'Dual 64-Core',
|
processor: 'Dual 64-Core',
|
||||||
ram: '3TB',
|
ram: '3TB',
|
||||||
@@ -32,7 +32,20 @@ const CloudPricing: React.FC = () => {
|
|||||||
monthlyPrice: null,
|
monthlyPrice: null,
|
||||||
sixMonthPrice: null,
|
sixMonthPrice: null,
|
||||||
annualPrice: null,
|
annualPrice: null,
|
||||||
badge: 'Cutting Edge'
|
badge: 'Blackwell Ultra'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
gpu: 'NVIDIA GB200 NVL72',
|
||||||
|
gpuCount: 8,
|
||||||
|
processor: '2x Grace CPU',
|
||||||
|
ram: '1,536GB HBM3e',
|
||||||
|
nvmeStorage: 'Rack-Scale System',
|
||||||
|
additionalStorage: '1.4 EXAFLOPS FP4',
|
||||||
|
network: '800Gb/s NVLink',
|
||||||
|
monthlyPrice: null,
|
||||||
|
sixMonthPrice: null,
|
||||||
|
annualPrice: null,
|
||||||
|
badge: 'Rack Scale'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
gpu: 'NVIDIA B200',
|
gpu: 'NVIDIA B200',
|
||||||
@@ -313,6 +326,16 @@ const CloudPricing: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Vera Rubin Roadmap */}
|
||||||
|
<div className="mt-12 text-center">
|
||||||
|
<div className="inline-flex items-center gap-2 px-6 py-3 bg-purple-500/10 border border-purple-500/30 rounded-full">
|
||||||
|
<svg className="w-5 h-5 text-purple-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||||
|
</svg>
|
||||||
|
<span className="text-sm font-semibold text-purple-300">Vera Rubin (R-series) -- Coming 2027</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Key Features */}
|
{/* Key Features */}
|
||||||
<div className="mt-16 grid grid-cols-1 md:grid-cols-4 gap-6">
|
<div className="mt-16 grid grid-cols-1 md:grid-cols-4 gap-6">
|
||||||
<div className="text-center">
|
<div className="text-center">
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const DGXSparkHighlight: React.FC = () => {
|
|||||||
addItem({
|
addItem({
|
||||||
id: 'dgx-spark',
|
id: 'dgx-spark',
|
||||||
name: 'DGX Spark',
|
name: 'DGX Spark',
|
||||||
price: 4000,
|
price: 3999,
|
||||||
description: 'Perfect for startups and researchers to kickstart projects on a powerful, dedicated DGX instance.',
|
description: 'Perfect for startups and researchers to kickstart projects on a powerful, dedicated DGX instance.',
|
||||||
purchaseMethod: 'online',
|
purchaseMethod: 'online',
|
||||||
image: '/nvidia-dgx-spark-and-nvidia-dgx-station.jpg',
|
image: '/nvidia-dgx-spark-and-nvidia-dgx-station.jpg',
|
||||||
@@ -41,7 +41,7 @@ const DGXSparkHighlight: React.FC = () => {
|
|||||||
className="relative rounded-2xl shadow-2xl border border-primary/30"
|
className="relative rounded-2xl shadow-2xl border border-primary/30"
|
||||||
/>
|
/>
|
||||||
<div className="absolute -top-4 -right-4 bg-primary text-black font-bold px-6 py-3 rounded-full shadow-lg transform rotate-12">
|
<div className="absolute -top-4 -right-4 bg-primary text-black font-bold px-6 py-3 rounded-full shadow-lg transform rotate-12">
|
||||||
Only $4,000
|
Only $3,999
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -153,7 +153,7 @@ const DGXSparkHighlight: React.FC = () => {
|
|||||||
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" />
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" />
|
||||||
</svg>
|
</svg>
|
||||||
Add to Cart - $4,000
|
Add to Cart - $3,999
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const FAQ: React.FC = () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
question: "How does pricing work?",
|
question: "How does pricing work?",
|
||||||
answer: "DGX Spark is a one-time $4,000 payment that includes 100 hours of compute. For on-demand usage beyond that, check out Hanzo Cloud for pay-as-you-go pricing. Enterprise customers can contact sales for custom SuperPOD deployments and volume pricing."
|
answer: "DGX Spark is a one-time $3,999 payment that includes 100 hours of compute. For on-demand usage beyond that, check out Hanzo Cloud for pay-as-you-go pricing. Enterprise customers can contact sales for custom SuperPOD deployments and volume pricing."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
question: "Can I scale beyond DGX Spark?",
|
question: "Can I scale beyond DGX Spark?",
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ const features = [
|
|||||||
{
|
{
|
||||||
icon: CpuChipIcon,
|
icon: CpuChipIcon,
|
||||||
title: 'Elite NVIDIA Hardware',
|
title: 'Elite NVIDIA Hardware',
|
||||||
description: 'Get direct access to the world\'s most advanced AI hardware, including NVIDIA DGX systems, H200, and H100 GPUs.',
|
description: 'Get direct access to the world\'s most advanced AI hardware, including NVIDIA Blackwell Ultra B300, B200, GB200 NVL72, DGX systems, and Hopper GPUs.',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: ScaleIcon,
|
icon: ScaleIcon,
|
||||||
|
|||||||
@@ -3,9 +3,37 @@ import React from 'react';
|
|||||||
|
|
||||||
const hardware = [
|
const hardware = [
|
||||||
{
|
{
|
||||||
category: 'LATEST: Blackwell Architecture',
|
category: 'LATEST: Blackwell Ultra',
|
||||||
|
name: 'NVIDIA B300 GPU',
|
||||||
|
description: 'Blackwell Ultra B300 GPU delivers the highest single-GPU AI performance with 288GB HBM3e memory, 12 TB/s bandwidth, and 2nd-gen Transformer Engine.',
|
||||||
|
imageUrl: '/nvidia-blackwell-ultra.jpg',
|
||||||
|
stats: [
|
||||||
|
{ value: '288 GB', label: 'HBM3e Memory' },
|
||||||
|
{ value: '12 TB/s', label: 'Memory Bandwidth' },
|
||||||
|
{ value: '~$5.99', label: '/GPU-hr Cloud' },
|
||||||
|
{ value: 'Blackwell Ultra', label: 'Architecture' },
|
||||||
|
{ value: '1800 GB/s', label: 'NVLink 5.0' },
|
||||||
|
{ value: '2nd Gen', label: 'Transformer Engine' },
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
category: 'Rack-Scale: Blackwell Architecture',
|
||||||
|
name: 'NVIDIA GB200 NVL72',
|
||||||
|
description: 'Rack-scale system with 8x B200 GPUs and 2x Grace CPUs. 1.4 EXAFLOPS FP4 performance with 1,536GB total HBM3e memory and direct liquid cooling.',
|
||||||
|
imageUrl: '/nvidia-blackwell-ultra.jpg',
|
||||||
|
stats: [
|
||||||
|
{ value: '1,536 GB', label: 'Total HBM3e' },
|
||||||
|
{ value: '1.4 EX', label: 'FLOPS FP4' },
|
||||||
|
{ value: '8x B200', label: '+ 2x Grace' },
|
||||||
|
{ value: 'From $399K', label: 'Purchase' },
|
||||||
|
{ value: '$29,999', label: '/mo Lease' },
|
||||||
|
{ value: 'Liquid', label: 'Cooled' },
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
category: 'Blackwell Architecture',
|
||||||
name: 'NVIDIA B200 GPU',
|
name: 'NVIDIA B200 GPU',
|
||||||
description: 'The latest Blackwell B200 GPU delivers unprecedented AI performance with 192GB HBM3e memory and 2nd-gen Transformer Engine for next-generation AI workloads.',
|
description: 'The Blackwell B200 GPU delivers exceptional AI performance with 192GB HBM3e memory and 2nd-gen Transformer Engine for next-generation AI workloads.',
|
||||||
imageUrl: '/nvidia-blackwell-ultra.jpg',
|
imageUrl: '/nvidia-blackwell-ultra.jpg',
|
||||||
stats: [
|
stats: [
|
||||||
{ value: '192 GB', label: 'HBM3e Memory' },
|
{ value: '192 GB', label: 'HBM3e Memory' },
|
||||||
@@ -17,7 +45,7 @@ const hardware = [
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
category: 'LATEST: Blackwell Architecture',
|
category: 'Blackwell Architecture',
|
||||||
name: 'NVIDIA B100 GPU',
|
name: 'NVIDIA B100 GPU',
|
||||||
description: 'Blackwell B100 GPU combines exceptional AI performance with 192GB memory, perfect for training and inference of the largest AI models.',
|
description: 'Blackwell B100 GPU combines exceptional AI performance with 192GB memory, perfect for training and inference of the largest AI models.',
|
||||||
imageUrl: '/nvidia-dgx-spark-and-dgx-station.jpg',
|
imageUrl: '/nvidia-dgx-spark-and-dgx-station.jpg',
|
||||||
@@ -58,6 +86,20 @@ const hardware = [
|
|||||||
{ value: 'PCIe Gen5', label: 'System Interface' },
|
{ value: 'PCIe Gen5', label: 'System Interface' },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
category: 'COMING 2027: Vera Rubin Architecture',
|
||||||
|
name: 'NVIDIA R-Series (Vera Rubin)',
|
||||||
|
description: 'Next-generation Vera Rubin architecture GPUs are expected in 2027. Contact us to join the waitlist for early access when available.',
|
||||||
|
imageUrl: '/nvidia-dgx-spark-and-dgx-station.jpg',
|
||||||
|
stats: [
|
||||||
|
{ value: 'R-Series', label: 'Architecture' },
|
||||||
|
{ value: '2027', label: 'Expected' },
|
||||||
|
{ value: 'HBM4', label: 'Memory Type' },
|
||||||
|
{ value: 'Next Gen', label: 'NVLink' },
|
||||||
|
{ value: 'TBD', label: 'Performance' },
|
||||||
|
{ value: 'Waitlist', label: 'Status' },
|
||||||
|
]
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const Stat: React.FC<{ value: string; label: string }> = ({ value, label }) => (
|
const Stat: React.FC<{ value: string; label: string }> = ({ value, label }) => (
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ const Hero: React.FC = () => {
|
|||||||
</span>
|
</span>
|
||||||
</h1>
|
</h1>
|
||||||
<p className="max-w-3xl mx-auto text-lg md:text-xl text-gray-400 mb-10">
|
<p className="max-w-3xl mx-auto text-lg md:text-xl text-gray-400 mb-10">
|
||||||
Access NVIDIA's latest Blackwell architecture GPUs. Rent or buy B200 and B100 GPUs with unprecedented AI performance, 192GB HBM3e memory, and next-generation capabilities for frontier model training and inference.
|
Access NVIDIA's latest Blackwell Ultra architecture GPUs. Rent or buy B300, B200, and B100 GPUs with unprecedented AI performance, up to 288GB HBM3e memory, and next-generation capabilities for frontier model training and inference.
|
||||||
</p>
|
</p>
|
||||||
<div className="flex justify-center items-center space-x-4">
|
<div className="flex justify-center items-center space-x-4">
|
||||||
<a href="#pricing" className="bg-primary text-black font-bold py-4 px-10 rounded-lg hover:bg-primary-dark transition-all duration-300 transform hover:scale-105 text-lg">
|
<a href="#pricing" className="bg-primary text-black font-bold py-4 px-10 rounded-lg hover:bg-primary-dark transition-all duration-300 transform hover:scale-105 text-lg">
|
||||||
|
|||||||
@@ -277,11 +277,68 @@ const gpuPlans = [
|
|||||||
salesLink: 'https://hanzo.ai/contact',
|
salesLink: 'https://hanzo.ai/contact',
|
||||||
// Hidden from landing page - available via hardware specs page
|
// Hidden from landing page - available via hardware specs page
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'b300-standalone',
|
||||||
|
name: 'NVIDIA B300 (Blackwell Ultra)',
|
||||||
|
price: 'From $50K',
|
||||||
|
priceValue: 50000,
|
||||||
|
period: 'per GPU',
|
||||||
|
description: 'Blackwell Ultra B300 GPU with 288GB HBM3e memory. The most powerful single GPU for frontier AI training and inference.',
|
||||||
|
features: [
|
||||||
|
'Single NVIDIA B300 GPU',
|
||||||
|
'288 GB HBM3e Memory',
|
||||||
|
'12 TB/s Memory Bandwidth',
|
||||||
|
'Blackwell Ultra Architecture',
|
||||||
|
'NVLink 5.0 Interconnect',
|
||||||
|
'2nd Gen Transformer Engine',
|
||||||
|
'FP4 / FP8 / FP16 Support',
|
||||||
|
'Enterprise Support',
|
||||||
|
],
|
||||||
|
cta: 'Contact Sales',
|
||||||
|
purchaseMethod: 'sales' as const,
|
||||||
|
salesLink: 'https://hanzo.ai/contact',
|
||||||
|
isBlackwell: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'gb200-nvl72',
|
||||||
|
name: 'GB200 NVL72',
|
||||||
|
price: 'From $399K',
|
||||||
|
priceValue: 399000,
|
||||||
|
leasePrice: '$29,999',
|
||||||
|
leasePriceValue: 29999,
|
||||||
|
period: '',
|
||||||
|
description: '8x B200 GPUs + 2x Grace CPUs in a single rack-scale system. 1.4 EXAFLOPS FP4 performance with 1,536GB total HBM3e memory.',
|
||||||
|
features: [
|
||||||
|
'8x NVIDIA B200 GPUs',
|
||||||
|
'2x NVIDIA Grace CPUs',
|
||||||
|
'1.4 EXAFLOPS FP4 Performance',
|
||||||
|
'1,536 GB Total HBM3e Memory',
|
||||||
|
'NVLink 5.0 Interconnect',
|
||||||
|
'Direct Liquid Cooling',
|
||||||
|
'Blackwell Architecture',
|
||||||
|
'Enterprise Support & Services',
|
||||||
|
],
|
||||||
|
leaseFeatures: [
|
||||||
|
'8x NVIDIA B200 GPUs + 2x Grace CPUs',
|
||||||
|
'1.4 EXAFLOPS FP4 Performance',
|
||||||
|
'1,536 GB Total HBM3e Memory',
|
||||||
|
'NVLink 5.0 Interconnect',
|
||||||
|
'Direct Liquid Cooling',
|
||||||
|
'$29,999/mo Lease',
|
||||||
|
'Enterprise Support & Services',
|
||||||
|
],
|
||||||
|
cta: 'Contact Sales',
|
||||||
|
purchaseMethod: 'sales' as const,
|
||||||
|
salesLink: 'https://hanzo.ai/contact',
|
||||||
|
isBlackwell: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'gb300-nvl72',
|
id: 'gb300-nvl72',
|
||||||
name: 'GB300 NVL72 Exascale',
|
name: 'GB300 NVL72 Exascale',
|
||||||
price: 'Custom Quote',
|
price: 'From $499K',
|
||||||
priceValue: 0,
|
priceValue: 499000,
|
||||||
|
leasePrice: '$39,999',
|
||||||
|
leasePriceValue: 39999,
|
||||||
period: '',
|
period: '',
|
||||||
description: 'An exascale of compute in a rack. 72x NVIDIA B300 GPUs with direct liquid cooling for maximum AI performance.',
|
description: 'An exascale of compute in a rack. 72x NVIDIA B300 GPUs with direct liquid cooling for maximum AI performance.',
|
||||||
features: [
|
features: [
|
||||||
@@ -295,6 +352,15 @@ const gpuPlans = [
|
|||||||
'800 Gb/s Networking',
|
'800 Gb/s Networking',
|
||||||
'Enterprise Support & Services',
|
'Enterprise Support & Services',
|
||||||
],
|
],
|
||||||
|
leaseFeatures: [
|
||||||
|
'72x NVIDIA B300 GPUs',
|
||||||
|
'20.7 TB Total GPU Memory',
|
||||||
|
'36x NVIDIA Grace CPUs',
|
||||||
|
'Direct Liquid Cooling',
|
||||||
|
'Exascale Supercomputer',
|
||||||
|
'$39,999/mo Lease',
|
||||||
|
'Enterprise Support & Services',
|
||||||
|
],
|
||||||
cta: 'Contact Sales',
|
cta: 'Contact Sales',
|
||||||
purchaseMethod: 'sales' as const,
|
purchaseMethod: 'sales' as const,
|
||||||
salesLink: 'https://hanzo.ai/contact',
|
salesLink: 'https://hanzo.ai/contact',
|
||||||
@@ -325,6 +391,29 @@ const gpuPlans = [
|
|||||||
isBlackwell: true,
|
isBlackwell: true,
|
||||||
popular: true,
|
popular: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'h200-8x-standalone',
|
||||||
|
name: '8X NVIDIA H200 (Standalone)',
|
||||||
|
price: 'Contact Sales',
|
||||||
|
priceValue: 0,
|
||||||
|
period: 'Lease Starting at $21,199/mo',
|
||||||
|
description: '8X NVIDIA H200 GPUs with 141GB HBM3e per GPU. Lease terms: Annual ($21,199/mo), 6-Month ($23,849/mo), 3-Month ($25,174/mo), Monthly ($26,499/mo).',
|
||||||
|
features: [
|
||||||
|
'8X NVIDIA H200 GPUs',
|
||||||
|
'141 GB HBM3e per GPU',
|
||||||
|
'Dual 48-core Processors',
|
||||||
|
'2TB System RAM',
|
||||||
|
'960GB NVMe + (4) 3.84TB NVMe',
|
||||||
|
'25Gb Bonded Network (3200Gb Available)',
|
||||||
|
'Annual: $21,199/mo ($3.63/GPU-hr)',
|
||||||
|
'6-Month: $23,849/mo ($4.08/GPU-hr)',
|
||||||
|
'3-Month: $25,174/mo ($4.31/GPU-hr)',
|
||||||
|
'Monthly: $26,499/mo ($4.54/GPU-hr)',
|
||||||
|
],
|
||||||
|
cta: 'Contact Sales',
|
||||||
|
purchaseMethod: 'sales' as const,
|
||||||
|
salesLink: 'https://hanzo.ai/contact',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'h100-8x-standalone',
|
id: 'h100-8x-standalone',
|
||||||
name: '8X NVIDIA H100 (Standalone)',
|
name: '8X NVIDIA H100 (Standalone)',
|
||||||
@@ -445,9 +534,9 @@ const gpuPlans = [
|
|||||||
price: 'Usage-Based',
|
price: 'Usage-Based',
|
||||||
priceValue: 0,
|
priceValue: 0,
|
||||||
period: '',
|
period: '',
|
||||||
description: 'Need on-demand GPU access? Check out Hanzo Cloud for flexible, pay-as-you-go H100 and H200 GPU compute.',
|
description: 'Need on-demand GPU access? Check out Hanzo Cloud for flexible, pay-as-you-go Blackwell and Hopper GPU compute.',
|
||||||
features: [
|
features: [
|
||||||
'Access to H100 & H200 GPUs',
|
'Access to B300, B200, H200 & H100 GPUs',
|
||||||
'Scale from 1 to 100s of GPUs',
|
'Scale from 1 to 100s of GPUs',
|
||||||
'Pay only for what you use',
|
'Pay only for what you use',
|
||||||
'Ideal for Inference & Fine-tuning',
|
'Ideal for Inference & Fine-tuning',
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const SearchModal: React.FC<SearchModalProps> = ({ isOpen, onClose }) => {
|
|||||||
{
|
{
|
||||||
id: 'dgx-spark',
|
id: 'dgx-spark',
|
||||||
title: 'DGX Spark',
|
title: 'DGX Spark',
|
||||||
description: '$4,000 - Dedicated DGX Instance with 100 Hours Compute',
|
description: '$3,999 - Dedicated DGX Instance with 100 Hours Compute',
|
||||||
category: 'Product',
|
category: 'Product',
|
||||||
action: () => {
|
action: () => {
|
||||||
navigate('/#pricing');
|
navigate('/#pricing');
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ const UseCases: React.FC = () => {
|
|||||||
href="#pricing"
|
href="#pricing"
|
||||||
className="inline-flex items-center px-8 py-4 bg-primary text-black font-bold rounded-lg hover:bg-primary-dark transition-all duration-300 transform hover:scale-105"
|
className="inline-flex items-center px-8 py-4 bg-primary text-black font-bold rounded-lg hover:bg-primary-dark transition-all duration-300 transform hover:scale-105"
|
||||||
>
|
>
|
||||||
Get DGX Spark - $4,000
|
Get DGX Spark - $3,999
|
||||||
<svg className="w-5 h-5 ml-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg className="w-5 h-5 ml-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" />
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ const WhyBuyHardware: React.FC = () => {
|
|||||||
<p className="text-gray-400">Own Your Hardware</p>
|
<p className="text-gray-400">Own Your Hardware</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="text-center mb-6">
|
<div className="text-center mb-6">
|
||||||
<div className="text-5xl font-bold text-primary mb-2">$4,000</div>
|
<div className="text-5xl font-bold text-primary mb-2">$3,999</div>
|
||||||
<div className="text-gray-400">One-time payment</div>
|
<div className="text-gray-400">One-time payment</div>
|
||||||
<div className="text-gray-500 text-sm mt-1">+ 100 hours included</div>
|
<div className="text-gray-500 text-sm mt-1">+ 100 hours included</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -249,7 +249,7 @@ const WhyBuyHardware: React.FC = () => {
|
|||||||
href="#pricing"
|
href="#pricing"
|
||||||
className="inline-flex items-center px-8 py-4 bg-primary text-black font-bold rounded-lg hover:bg-primary-dark transition-all duration-300 transform hover:scale-105"
|
className="inline-flex items-center px-8 py-4 bg-primary text-black font-bold rounded-lg hover:bg-primary-dark transition-all duration-300 transform hover:scale-105"
|
||||||
>
|
>
|
||||||
Get DGX Spark for $4,000
|
Get DGX Spark for $3,999
|
||||||
<svg className="w-5 h-5 ml-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<svg className="w-5 h-5 ml-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" />
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
After Width: | Height: | Size: 395 KiB |
|
After Width: | Height: | Size: 15 MiB |
|
After Width: | Height: | Size: 223 KiB |
@@ -0,0 +1 @@
|
|||||||
|
hanzo.computer
|
||||||
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 539 KiB |
@@ -1,273 +0,0 @@
|
|||||||
# Invoice System Documentation
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
The Hanzo Computer marketplace now includes a comprehensive PDF invoice generation system that allows customers to download professional invoices for their orders and subscriptions.
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
### Customer Features
|
|
||||||
- **Download PDF Invoices**: Generate and download professional PDF invoices for all paid orders
|
|
||||||
- **Invoice History**: View all past invoices in a dedicated tab on the dashboard
|
|
||||||
- **Invoice Preview**: Preview invoices before downloading
|
|
||||||
- **Automatic Generation**: Invoices are automatically generated when orders are paid
|
|
||||||
- **Professional Layout**: Clean, branded invoice design with Hanzo Computer branding
|
|
||||||
|
|
||||||
### Admin Features
|
|
||||||
- **Bulk Generation**: Generate invoices for multiple orders at once
|
|
||||||
- **Email Invoices**: Send invoices directly to customers via email
|
|
||||||
- **Regenerate Invoices**: Update and regenerate existing invoices
|
|
||||||
- **Invoice Management**: Mark invoices as paid, void invoices, add notes
|
|
||||||
- **Missing Invoice Detection**: Identify paid orders without invoices
|
|
||||||
|
|
||||||
## Technical Implementation
|
|
||||||
|
|
||||||
### Components
|
|
||||||
|
|
||||||
#### 1. Invoice Generator (`/src/lib/invoices.ts`)
|
|
||||||
Core invoice functionality including:
|
|
||||||
- Invoice data structure definition
|
|
||||||
- Invoice creation from orders and subscriptions
|
|
||||||
- PDF storage in Supabase
|
|
||||||
- Invoice number generation
|
|
||||||
- Currency and date formatting
|
|
||||||
|
|
||||||
#### 2. Invoice Component (`/src/components/Invoice.tsx`)
|
|
||||||
React PDF component using `@react-pdf/renderer`:
|
|
||||||
- Professional invoice template
|
|
||||||
- Hanzo Computer branding
|
|
||||||
- Line items with GPU specifications
|
|
||||||
- Tax calculations
|
|
||||||
- Payment terms and conditions
|
|
||||||
|
|
||||||
#### 3. Dashboard Integration (`/src/components/DashboardInvoices.tsx`)
|
|
||||||
Customer-facing invoice interface:
|
|
||||||
- Invoice download buttons
|
|
||||||
- Preview functionality
|
|
||||||
- Invoice history display
|
|
||||||
- Real-time generation
|
|
||||||
|
|
||||||
#### 4. Admin Actions (`/src/lib/adminInvoiceActions.ts`)
|
|
||||||
Administrative invoice operations:
|
|
||||||
- Bulk invoice generation
|
|
||||||
- Email sending integration
|
|
||||||
- Invoice status management
|
|
||||||
- Regeneration capabilities
|
|
||||||
|
|
||||||
### Database Schema
|
|
||||||
|
|
||||||
#### Invoices Table
|
|
||||||
```sql
|
|
||||||
- id: UUID (Primary Key)
|
|
||||||
- invoice_number: VARCHAR (Unique)
|
|
||||||
- user_id: UUID (Foreign Key)
|
|
||||||
- order_id: UUID (Foreign Key)
|
|
||||||
- subscription_id: UUID (Foreign Key)
|
|
||||||
- external_invoice_id: VARCHAR
|
|
||||||
- amount_due: DECIMAL
|
|
||||||
- amount_paid: DECIMAL
|
|
||||||
- status: VARCHAR ('draft', 'open', 'paid', 'void', 'uncollectible')
|
|
||||||
- due_date: DATE
|
|
||||||
- paid_at: TIMESTAMP
|
|
||||||
- pdf_url: TEXT
|
|
||||||
- generated_at: TIMESTAMP
|
|
||||||
- line_items: JSONB
|
|
||||||
- customer_info: JSONB
|
|
||||||
- subtotal: DECIMAL
|
|
||||||
- tax: DECIMAL
|
|
||||||
```
|
|
||||||
|
|
||||||
### Storage Configuration
|
|
||||||
|
|
||||||
#### Supabase Storage Buckets
|
|
||||||
- **invoices**: Public bucket for PDF storage
|
|
||||||
- Organized by year: `/invoices/2025/INV-20250131-0001.pdf`
|
|
||||||
- Automatic public URL generation
|
|
||||||
- Signed URLs for private access
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
### For Customers
|
|
||||||
|
|
||||||
1. **View Invoices**:
|
|
||||||
- Log in to your dashboard
|
|
||||||
- Click the "Invoices" tab
|
|
||||||
- View all your orders and their invoice status
|
|
||||||
|
|
||||||
2. **Download Invoice**:
|
|
||||||
- Find the order you need an invoice for
|
|
||||||
- Click "Download" if invoice exists
|
|
||||||
- Or click "Generate Invoice" for new invoices
|
|
||||||
- PDF will download to your computer
|
|
||||||
|
|
||||||
3. **Preview Invoice**:
|
|
||||||
- Click "Preview" button next to any order
|
|
||||||
- View invoice in modal before downloading
|
|
||||||
- Close modal when done
|
|
||||||
|
|
||||||
### For Administrators
|
|
||||||
|
|
||||||
1. **Generate Invoice for Order**:
|
|
||||||
```typescript
|
|
||||||
import { generateAndSendInvoice } from '@/lib/adminInvoiceActions';
|
|
||||||
|
|
||||||
const result = await generateAndSendInvoice(orderId, true); // true = send email
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **Bulk Generate Invoices**:
|
|
||||||
```typescript
|
|
||||||
import { bulkGenerateInvoices } from '@/lib/adminInvoiceActions';
|
|
||||||
|
|
||||||
const result = await bulkGenerateInvoices(orderIds, false); // false = no emails
|
|
||||||
console.log(`Generated: ${result.generated}, Failed: ${result.failed}`);
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Regenerate Invoice**:
|
|
||||||
```typescript
|
|
||||||
import { regenerateInvoice } from '@/lib/adminInvoiceActions';
|
|
||||||
|
|
||||||
const result = await regenerateInvoice(invoiceId, true); // true = send email
|
|
||||||
```
|
|
||||||
|
|
||||||
## API Endpoints
|
|
||||||
|
|
||||||
### Generate Invoice API (`/api/generate-invoice.ts`)
|
|
||||||
Serverless function for invoice generation:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
POST /api/generate-invoice
|
|
||||||
{
|
|
||||||
"type": "order" | "subscription" | "invoice",
|
|
||||||
"id": "order-uuid",
|
|
||||||
"regenerate": false,
|
|
||||||
"period": { // optional, for subscriptions
|
|
||||||
"start": "2025-01-01",
|
|
||||||
"end": "2025-01-31"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Response:
|
|
||||||
{
|
|
||||||
"success": true,
|
|
||||||
"data": {
|
|
||||||
"invoiceId": "invoice-uuid",
|
|
||||||
"invoiceNumber": "INV-20250131-0001",
|
|
||||||
"pdfUrl": "https://...",
|
|
||||||
"downloadUrl": "https://..." // signed URL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
### Environment Variables
|
|
||||||
```bash
|
|
||||||
VITE_SUPABASE_URL=your-supabase-url
|
|
||||||
VITE_SUPABASE_ANON_KEY=your-supabase-anon-key
|
|
||||||
SUPABASE_SERVICE_KEY=your-service-key # For API operations
|
|
||||||
```
|
|
||||||
|
|
||||||
### Company Information
|
|
||||||
Edit `/src/lib/invoices.ts` to update company details:
|
|
||||||
```typescript
|
|
||||||
export const COMPANY_INFO = {
|
|
||||||
name: 'Hanzo Computer',
|
|
||||||
address: '2100 Geng Road',
|
|
||||||
city: 'Palo Alto',
|
|
||||||
state: 'CA',
|
|
||||||
zip: '94303',
|
|
||||||
country: 'United States',
|
|
||||||
email: '[email protected]',
|
|
||||||
phone: '+1 (650) 555-0100',
|
|
||||||
website: 'https://hanzo.computer',
|
|
||||||
taxId: 'XX-XXXXXXX'
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
## Email Integration
|
|
||||||
|
|
||||||
To enable email sending, integrate with your preferred email service:
|
|
||||||
|
|
||||||
1. **SendGrid Integration**:
|
|
||||||
```typescript
|
|
||||||
import sgMail from '@sendgrid/mail';
|
|
||||||
|
|
||||||
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
|
|
||||||
// Update sendInvoiceEmail function in adminInvoiceActions.ts
|
|
||||||
```
|
|
||||||
|
|
||||||
2. **AWS SES Integration**:
|
|
||||||
```typescript
|
|
||||||
import { SESClient, SendEmailCommand } from "@aws-sdk/client-ses";
|
|
||||||
|
|
||||||
const client = new SESClient({ region: "us-west-2" });
|
|
||||||
// Update sendInvoiceEmail function
|
|
||||||
```
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
### Unit Tests
|
|
||||||
```bash
|
|
||||||
npm test -- invoice.test.ts
|
|
||||||
```
|
|
||||||
|
|
||||||
### Manual Testing
|
|
||||||
1. Create a test order and mark it as paid
|
|
||||||
2. Navigate to Dashboard > Invoices tab
|
|
||||||
3. Click "Generate Invoice" for the test order
|
|
||||||
4. Verify PDF downloads correctly
|
|
||||||
5. Check invoice appears in history
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### Common Issues
|
|
||||||
|
|
||||||
1. **Invoice Generation Fails**:
|
|
||||||
- Check Supabase connection
|
|
||||||
- Verify storage bucket exists and has proper permissions
|
|
||||||
- Check console for detailed error messages
|
|
||||||
|
|
||||||
2. **PDF Not Downloading**:
|
|
||||||
- Ensure browser allows pop-ups from the site
|
|
||||||
- Check if PDF URL is accessible
|
|
||||||
- Verify storage bucket is public or signed URL is valid
|
|
||||||
|
|
||||||
3. **Missing Invoice Data**:
|
|
||||||
- Ensure order has complete information
|
|
||||||
- Check user details are properly loaded
|
|
||||||
- Verify line items are properly formatted
|
|
||||||
|
|
||||||
## Security Considerations
|
|
||||||
|
|
||||||
1. **Access Control**:
|
|
||||||
- Users can only view/download their own invoices
|
|
||||||
- Admin role required for bulk operations
|
|
||||||
- RLS policies enforce data isolation
|
|
||||||
|
|
||||||
2. **Storage Security**:
|
|
||||||
- Invoices stored in Supabase Storage
|
|
||||||
- Signed URLs for temporary access
|
|
||||||
- Public URLs only for authorized invoices
|
|
||||||
|
|
||||||
3. **Data Privacy**:
|
|
||||||
- Customer information stored securely
|
|
||||||
- PII handled according to privacy policy
|
|
||||||
- Audit trail for all invoice operations
|
|
||||||
|
|
||||||
## Future Enhancements
|
|
||||||
|
|
||||||
1. **Recurring Invoices**: Automatic monthly invoice generation for subscriptions
|
|
||||||
2. **Custom Templates**: Multiple invoice templates for different use cases
|
|
||||||
3. **Multi-language Support**: Invoices in customer's preferred language
|
|
||||||
4. **Payment Links**: Direct payment links in invoice emails
|
|
||||||
5. **Webhook Integration**: Webhook for automatic invoice generation
|
|
||||||
6. **Credit Notes**: Support for refunds and adjustments
|
|
||||||
7. **Batch Download**: ZIP file with multiple invoices
|
|
||||||
8. **Invoice Scheduling**: Schedule invoice generation for future dates
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
For issues or questions about the invoice system:
|
|
||||||
- Technical Support: support@hanzo.computer
|
|
||||||
- Billing Questions: billing@hanzo.computer
|
|
||||||
- Documentation: This file and inline code comments
|
|
||||||
@@ -1,296 +0,0 @@
|
|||||||
# Rate Limiting Implementation
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
This document describes the comprehensive rate limiting system implemented across API endpoints and Supabase queries for the Hanzo Computer platform.
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
The rate limiting system consists of several components:
|
|
||||||
|
|
||||||
1. **Upstash Redis** - Distributed rate limit storage
|
|
||||||
2. **Middleware** - API route protection
|
|
||||||
3. **Supabase Tables** - Audit logging and custom rules
|
|
||||||
4. **Frontend Handling** - User feedback and retry logic
|
|
||||||
5. **Admin Dashboard** - Monitoring and management
|
|
||||||
|
|
||||||
## Components
|
|
||||||
|
|
||||||
### 1. Rate Limiter Utility (`src/lib/rateLimit.ts`)
|
|
||||||
|
|
||||||
Core rate limiting logic using Upstash Redis with sliding window algorithm.
|
|
||||||
|
|
||||||
**Features:**
|
|
||||||
- Role-based limits (anonymous, authenticated, admin)
|
|
||||||
- Endpoint-specific limits
|
|
||||||
- Graceful fallback on Redis failure
|
|
||||||
- Rate limit status tracking
|
|
||||||
|
|
||||||
**Default Limits:**
|
|
||||||
- Anonymous users: 10 requests/minute
|
|
||||||
- Authenticated users: 100 requests/minute
|
|
||||||
- Admin users: 1000 requests/minute
|
|
||||||
|
|
||||||
### 2. API Middleware (`api/_middleware.ts`)
|
|
||||||
|
|
||||||
Automatic rate limiting for all API routes.
|
|
||||||
|
|
||||||
**Headers Added:**
|
|
||||||
- `X-RateLimit-Limit` - Total allowed requests
|
|
||||||
- `X-RateLimit-Remaining` - Requests remaining
|
|
||||||
- `X-RateLimit-Reset` - Reset timestamp
|
|
||||||
- `Retry-After` - Seconds until retry
|
|
||||||
|
|
||||||
### 3. Database Schema (`supabase/migrations/rate_limiting.sql`)
|
|
||||||
|
|
||||||
**Tables:**
|
|
||||||
- `rate_limit_log` - Request history
|
|
||||||
- `rate_limit_rules` - Custom per-user limits
|
|
||||||
- `rate_limit_violations` - Abuse tracking
|
|
||||||
|
|
||||||
**Features:**
|
|
||||||
- Row Level Security (RLS)
|
|
||||||
- Automatic cleanup of old logs (7 days)
|
|
||||||
- Performance indexes
|
|
||||||
- Monitoring views
|
|
||||||
|
|
||||||
### 4. Frontend API Client (`src/lib/api.ts`)
|
|
||||||
|
|
||||||
Smart API client with rate limit handling.
|
|
||||||
|
|
||||||
**Features:**
|
|
||||||
- Automatic retry with exponential backoff
|
|
||||||
- User-friendly error messages
|
|
||||||
- Visual countdown timer
|
|
||||||
- Rate limit status indicator
|
|
||||||
|
|
||||||
### 5. Admin Dashboard (`src/pages/admin/RateLimitDashboard.tsx`)
|
|
||||||
|
|
||||||
Comprehensive monitoring interface.
|
|
||||||
|
|
||||||
**Sections:**
|
|
||||||
- Overview - Endpoint statistics
|
|
||||||
- Users - User activity tracking
|
|
||||||
- Violations - Rate limit violations
|
|
||||||
- Rules - Custom limit management
|
|
||||||
|
|
||||||
## Protected Endpoints
|
|
||||||
|
|
||||||
### Strict Limits
|
|
||||||
- `/api/create-payment-intent` - 5 requests/minute
|
|
||||||
- `/api/rfq-submission` - 5 requests/hour
|
|
||||||
|
|
||||||
### Moderate Limits
|
|
||||||
- `/api/send-email` - 10 requests/minute
|
|
||||||
- `/api/quote-acceptance` - 10 requests/minute
|
|
||||||
|
|
||||||
### Standard Limits
|
|
||||||
- `/api/generate-invoice` - 20 requests/minute
|
|
||||||
- All admin endpoints - 100 requests/minute
|
|
||||||
|
|
||||||
## Setup Instructions
|
|
||||||
|
|
||||||
### 1. Environment Variables
|
|
||||||
|
|
||||||
Add to your `.env` file:
|
|
||||||
|
|
||||||
```env
|
|
||||||
# Upstash Redis Configuration
|
|
||||||
UPSTASH_REDIS_REST_URL=https://your-redis-instance.upstash.io
|
|
||||||
UPSTASH_REDIS_REST_TOKEN=your-upstash-redis-token-here
|
|
||||||
|
|
||||||
# Rate Limiting Configuration
|
|
||||||
RATE_LIMIT_ENABLED=true
|
|
||||||
VITE_API_URL=/api
|
|
||||||
|
|
||||||
# Admin Configuration
|
|
||||||
ADMIN_API_KEY=your-admin-api-key-here
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Database Migration
|
|
||||||
|
|
||||||
Run the Supabase migration:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
supabase db push
|
|
||||||
```
|
|
||||||
|
|
||||||
Or manually execute `supabase/migrations/rate_limiting.sql` in your Supabase dashboard.
|
|
||||||
|
|
||||||
### 3. Upstash Redis Setup
|
|
||||||
|
|
||||||
1. Create an account at [upstash.com](https://upstash.com)
|
|
||||||
2. Create a new Redis database
|
|
||||||
3. Copy the REST URL and token to your `.env` file
|
|
||||||
|
|
||||||
### 4. Deploy API Routes
|
|
||||||
|
|
||||||
For Vercel deployment:
|
|
||||||
```bash
|
|
||||||
vercel --prod
|
|
||||||
```
|
|
||||||
|
|
||||||
For other platforms, ensure the `/api` directory is properly configured for serverless functions.
|
|
||||||
|
|
||||||
## Usage Examples
|
|
||||||
|
|
||||||
### Frontend API Call
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import { api } from '@/lib/api';
|
|
||||||
|
|
||||||
// Automatic rate limit handling
|
|
||||||
try {
|
|
||||||
const result = await api.createPaymentIntent(5000, 'usd');
|
|
||||||
console.log('Payment intent created:', result);
|
|
||||||
} catch (error) {
|
|
||||||
if (error instanceof RateLimitError) {
|
|
||||||
console.log(`Rate limited. Retry in ${error.retryAfter} seconds`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Custom Rate Limit Check
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import { getRateLimitStatus } from '@/lib/rateLimit';
|
|
||||||
|
|
||||||
const status = await getRateLimitStatus('user_123', 'api/send-email');
|
|
||||||
console.log(`Remaining requests: ${status.remaining}`);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Clear Rate Limit (Admin)
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
// Admin endpoint to clear rate limits
|
|
||||||
fetch('/api/admin/clear-rate-limit', {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
'X-Admin-Key': 'your-admin-key'
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
userId: 'user_123',
|
|
||||||
endpoint: 'api/send-email' // optional
|
|
||||||
})
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Monitoring
|
|
||||||
|
|
||||||
### Admin Dashboard Access
|
|
||||||
|
|
||||||
Navigate to `/admin/rate-limits` to access the monitoring dashboard.
|
|
||||||
|
|
||||||
**Features:**
|
|
||||||
- Real-time request statistics
|
|
||||||
- User activity tracking
|
|
||||||
- Violation logs
|
|
||||||
- Custom rule management
|
|
||||||
|
|
||||||
### Database Queries
|
|
||||||
|
|
||||||
```sql
|
|
||||||
-- View recent rate limit violations
|
|
||||||
SELECT * FROM rate_limit_violations
|
|
||||||
WHERE timestamp > NOW() - INTERVAL '24 hours'
|
|
||||||
ORDER BY timestamp DESC;
|
|
||||||
|
|
||||||
-- Check user request patterns
|
|
||||||
SELECT * FROM rate_limit_user_stats
|
|
||||||
WHERE email = '[email protected]';
|
|
||||||
|
|
||||||
-- View endpoint statistics
|
|
||||||
SELECT * FROM rate_limit_stats
|
|
||||||
ORDER BY total_requests DESC;
|
|
||||||
```
|
|
||||||
|
|
||||||
## Error Handling
|
|
||||||
|
|
||||||
### Rate Limit Exceeded Response
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"error": "Too Many Requests",
|
|
||||||
"message": "Rate limit exceeded. Please try again in 45 seconds.",
|
|
||||||
"limit": 10,
|
|
||||||
"remaining": 0,
|
|
||||||
"reset": "2024-01-01T12:00:00Z",
|
|
||||||
"retryAfter": 45
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Frontend Display
|
|
||||||
|
|
||||||
When rate limited, users see:
|
|
||||||
1. Toast notification with countdown timer
|
|
||||||
2. Automatic retry after cooldown
|
|
||||||
3. Visual indicator of rate limit status
|
|
||||||
|
|
||||||
## Best Practices
|
|
||||||
|
|
||||||
### For Developers
|
|
||||||
|
|
||||||
1. **Use the API client** - Always use `src/lib/api.ts` for API calls
|
|
||||||
2. **Handle errors gracefully** - Check for `RateLimitError` specifically
|
|
||||||
3. **Implement caching** - Reduce unnecessary API calls
|
|
||||||
4. **Batch operations** - Combine multiple operations when possible
|
|
||||||
|
|
||||||
### For Administrators
|
|
||||||
|
|
||||||
1. **Monitor regularly** - Check the dashboard for unusual patterns
|
|
||||||
2. **Set appropriate limits** - Balance security with usability
|
|
||||||
3. **Review violations** - Investigate repeated violations
|
|
||||||
4. **Update rules** - Adjust limits based on usage patterns
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### Common Issues
|
|
||||||
|
|
||||||
**Issue: Rate limits not working**
|
|
||||||
- Check `RATE_LIMIT_ENABLED=true` in environment
|
|
||||||
- Verify Upstash Redis credentials
|
|
||||||
- Ensure middleware is properly configured
|
|
||||||
|
|
||||||
**Issue: Users frequently hitting limits**
|
|
||||||
- Review current limits in dashboard
|
|
||||||
- Consider increasing limits for specific users
|
|
||||||
- Implement caching on frontend
|
|
||||||
|
|
||||||
**Issue: Redis connection failures**
|
|
||||||
- Verify Upstash credentials
|
|
||||||
- Check network connectivity
|
|
||||||
- System fails open (allows requests) by default
|
|
||||||
|
|
||||||
## Security Considerations
|
|
||||||
|
|
||||||
1. **IP-based limiting** - Fallback for anonymous users
|
|
||||||
2. **User-based limiting** - Primary for authenticated users
|
|
||||||
3. **Endpoint-specific limits** - Sensitive operations have stricter limits
|
|
||||||
4. **Admin override** - Administrators can clear limits when needed
|
|
||||||
|
|
||||||
## Performance Impact
|
|
||||||
|
|
||||||
- **Latency**: ~20-50ms added per request
|
|
||||||
- **Redis calls**: 1 per request
|
|
||||||
- **Database logging**: Asynchronous, minimal impact
|
|
||||||
- **Frontend retry**: Exponential backoff prevents thundering herd
|
|
||||||
|
|
||||||
## Future Enhancements
|
|
||||||
|
|
||||||
- [ ] Geographic-based rate limiting
|
|
||||||
- [ ] Machine learning for anomaly detection
|
|
||||||
- [ ] Dynamic limit adjustment based on load
|
|
||||||
- [ ] WebSocket rate limiting
|
|
||||||
- [ ] GraphQL query complexity limiting
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
For issues or questions:
|
|
||||||
1. Check the admin dashboard for current status
|
|
||||||
2. Review logs in Supabase
|
|
||||||
3. Contact system administrator with details
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Last updated: October 2024
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="2500" height="422" viewBox="0 0 1002 169"><path d="M84.16 169v-32.88c34.86 0 61.75-34.37 48.31-70.74A49 49 0 0 0 103.09 36a51.94 51.94 0 0 0-70.22 48.31H0c0-54.8 53.29-98.14 111.55-80.2a81.43 81.43 0 0 1 53.29 53.3C182.77 115.7 139.44 169 84.16 169z" fill="#0080ff"/><path d="M84.66 136.12H51.79v-32.38h32.87m-32.87 57.79h-24.9v-25.41h24.9v25.41m-24.9-25.41H6V115.2h20.89M300.3 48.94c-9.46-6.48-21.91-10-35.86-10h-30.37v97.14h30.38q20.92 0 35.86-10.46a38.11 38.11 0 0 0 12.45-15.44c3-6.48 4.48-14.45 4.48-22.92s-1.49-16.44-4.48-22.42c-3-7.43-6.98-12.41-12.46-15.9zM252 55.42h9.46c10.46 0 19.42 2 26.39 6.48 7.47 4.48 11 13 11 25.41s-4 21.42-11 26.4c-6.47 4-14.94 6.48-25.9 6.48H252V55.42m86.65-17.93a10.13 10.13 0 0 0-7.47 3 9 9 0 0 0-3.49 7.47 10.46 10.46 0 1 0 20.92 0 10.14 10.14 0 0 0-3-7.47c-1.49-2-4-3-7-3m-9 29.89h17.43v68.25h-17.36V67.38m79.68 6c-5-4.48-11-7.47-17.43-7.47a30.82 30.82 0 0 0-23.41 10 34.69 34.69 0 0 0-9.46 24.41c0 9.47 3 17.93 9 24.41s13.94 9.47 23.41 9.47a27.56 27.56 0 0 0 16.93-5.48v1.49c0 5.48-1.49 10-4.48 13s-7 4.48-12.45 4.48c-8 0-12.95-3-18.92-11.46l-12 11.46.5.5c2.49 3.49 6.47 7 11.45 10.46s11.45 5 18.92 5c10.46 0 18.43-3 24.4-9.47s9.46-14.45 9.46-24.91V67.38h-16.91v6h1m-4.48 40.35c-3 3.49-7 5-12 5s-9-1.49-12-5-4.48-8-4.48-13.45S378 90.29 381 86.8s7-5 12-5 9 1.49 12 5 4.48 8 4.48 13.45-1.49 10-4.48 13.45m36.35-46.33h17.43v68.25h-17.54V67.38m8.47-29.89a10.21 10.21 0 0 0-10.46 10.46 10.46 10.46 0 1 0 20.92 0 10.21 10.21 0 0 0-10.47-10.46M496 48.94h-16.91v18.44h-10v15.44h10v28.4c0 9 2 15.44 5.48 18.93s10 5.48 18.43 5.48a48.3 48.3 0 0 0 8.47-.5h1v-15.45l-6 .5c-4 0-7-.5-8-2-1.49-1.49-2-4.48-2-9V83.32h15.94V67.87h-15.89L496 48.94m96.61-10h17.43v97.14h-17.41V39m191.24 72.73a57.76 57.76 0 0 1-8.47 8 17.19 17.19 0 0 1-9 2.49 17 17 0 0 1-12.4-5.53c-3.49-4-5-8.47-5-14.45s1.49-10.46 5-14.45a15.31 15.31 0 0 1 12.45-5.48c5.48 0 11.45 3.49 16.43 9.47l11.45-11c-7.47-9.47-16.93-13.95-28.39-13.95-9.46 0-17.43 3.49-24.4 10.46a36.2 36.2 0 0 0-10 25.41c0 10 3.49 18.93 10 25.41a32.39 32.39 0 0 0 24.4 10.46c12.45 0 22.41-5.48 29.38-15.44l-11.45-11.46m70.22-34.37a26.22 26.22 0 0 0-10-8 32.5 32.5 0 0 0-14.44-3c-9.46 0-17.43 3.49-23.41 10.46a40 40 0 0 0-8.47 25.41c0 10.46 3 18.93 9.46 25.41s14.44 10 24.9 10c11.45 0 20.92-4.48 28.39-13.95l.5-.5-11.45-11c-1 1.49-2.49 2.49-4 4a15.18 15.18 0 0 1-5 3.49 16.36 16.36 0 0 1-8.47 2 19.17 19.17 0 0 1-12-4c-3-2.49-4.48-6-5-10.46h45.82v-6.48a37.16 37.16 0 0 0-2-13 22.59 22.59 0 0 0-5-10.46m-37.18 16.06a17.64 17.64 0 0 1 4.48-8 12 12 0 0 1 9-3.49c4 0 7.47 1 9.46 3.49 2 2 3 5 3.49 8h-26.43m103.59-20.43c-5-4.48-12.45-6.48-21.41-6.48a43.59 43.59 0 0 0-15.92 3.5c-4.48 2.49-9 6-11.45 11l11 10.46c4.48-7.47 9.46-10 16.43-10a13.9 13.9 0 0 1 9 3 9 9 0 0 1 3.49 7.47v3.49a38.13 38.13 0 0 0-12.45-2q-12.7 0-20.92 6c-5.48 4-8 10-8 16.94 0 6.48 2 11.46 6.47 15.44s10 5.48 16.43 5.48 12.45-2.49 18.43-7v5.48h16.93V91.79c0-8-2.49-14.45-8-18.93m-30.38 36.86c2-1.49 4.48-2 8-2a42.37 42.37 0 0 1 12.95 2.49v6.48a22 22 0 0 1-14.94 5.48c-3 0-5.48-.5-7-2s-2.49-3-2.49-5a8.17 8.17 0 0 1 3.49-5.48m104.54-35.84c-5-5.48-11.45-8-19.92-8q-10.46 0-16.43 6v-4h-16.94v68.25h17.43V98.26c0-5 1-9.47 3.49-12.45a12.54 12.54 0 0 1 10-4.48 10.94 10.94 0 0 1 9 4 18 18 0 0 1 3.49 11v39.85H1002V96.27q-.75-14.2-7.47-22.42m-423.31-1c-5-4.48-12.45-6.48-21.41-6.48a43.59 43.59 0 0 0-15.94 3.49c-4.48 2.49-9 6-11.45 11l11 10.46c4.48-7.47 9.46-10 16.43-10a13.9 13.9 0 0 1 9 3 9 9 0 0 1 3.49 7.47v3.49a38.13 38.13 0 0 0-12.45-2q-12.7 0-20.92 6c-5.48 4-8 10-8 16.94 0 6.48 2 11.46 6.47 15.44s10 5.48 16.43 5.48 12.45-2.49 18.43-7v5.48h16.93V91.79c0-8-3-14.45-8-18.93m-30.88 36.86c2-1.49 4.48-2 8-2a42.37 42.37 0 0 1 12.95 2.49v6.48a22 22 0 0 1-14.94 5.48c-3 0-5.48-.5-7-2s-2.49-3-2.49-5a14.84 14.84 0 0 1 3.49-5.48m132 27.9a49.82 49.82 0 1 1 49.8-49.82 50 50 0 0 1-49.8 49.82m0-82.69a32.38 32.38 0 1 0 32.33 32.4 32.31 32.31 0 0 0-32.37-32.38" fill="#0080ff"/></svg>
|
||||||
|
After Width: | Height: | Size: 3.9 KiB |
@@ -0,0 +1,6 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 50" fill="none">
|
||||||
|
<g fill="#FFFFFF">
|
||||||
|
<!-- DigitalOcean text -->
|
||||||
|
<text x="10" y="32" font-family="Arial, sans-serif" font-size="24" font-weight="600">DigitalOcean</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 249 B |
@@ -0,0 +1,12 @@
|
|||||||
|
<svg viewBox="0 0 67 67" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect width="67" height="67" fill="#000000"/>
|
||||||
|
<g>
|
||||||
|
<path d="M17 54V36.1H4V54H17Z" fill="#ffffff"/>
|
||||||
|
<path d="M4 36.1L17 37.6V36.1H4Z" fill="#DDDDDD" opacity="0.7"/>
|
||||||
|
<path d="M53.6 17.4H17.2L4 36.1H40.3L53.6 17.4Z" fill="#ffffff"/>
|
||||||
|
<path d="M17 4H4V17.4H17V4Z" fill="#ffffff"/>
|
||||||
|
<path d="M53.6 4H40.4V17.4H53.6V4Z" fill="#ffffff"/>
|
||||||
|
<path d="M53.6 17.4L40.4 15.7V17.4H53.6Z" fill="#DDDDDD" opacity="0.7"/>
|
||||||
|
<path d="M53.6 54V36.1H40.4V54H53.6Z" fill="#ffffff"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 562 B |
|
After Width: | Height: | Size: 686 KiB |
|
After Width: | Height: | Size: 247 KiB |
|
After Width: | Height: | Size: 308 KiB |
@@ -0,0 +1,9 @@
|
|||||||
|
<svg viewBox="0 0 67 67" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M22.21 67V44.6369H0V67H22.21Z" fill="#ffffff"/>
|
||||||
|
<path d="M0 44.6369L22.21 46.8285V44.6369H0Z" fill="#DDDDDD" opacity="0.7"/>
|
||||||
|
<path d="M66.7038 22.3184H22.2534L0.0878906 44.6367H44.4634L66.7038 22.3184Z" fill="#ffffff"/>
|
||||||
|
<path d="M22.21 0H0V22.3184H22.21V0Z" fill="#ffffff"/>
|
||||||
|
<path d="M66.7198 0H44.5098V22.3184H66.7198V0Z" fill="#ffffff"/>
|
||||||
|
<path d="M66.6753 22.3185L44.5098 20.0822V22.3185H66.6753Z" fill="#DDDDDD" opacity="0.7"/>
|
||||||
|
<path d="M66.7198 67V44.6369H44.5098V67H66.7198Z" fill="#ffffff"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 589 B |
@@ -0,0 +1,42 @@
|
|||||||
|
# NVIDIA Images Manifest
|
||||||
|
|
||||||
|
## DGX Systems
|
||||||
|
- nvidia-dgx-spark-and-dgx-station.jpg (378KB)
|
||||||
|
- nvidia-dgx-spark-and-nvidia-dgx-station.jpg (131KB) - duplicate
|
||||||
|
- nvidia-dgx-superpod.jpg (146KB)
|
||||||
|
- 2u-nvidia-rtx-pro-server.jpg (395KB)
|
||||||
|
|
||||||
|
## H200/H100 GPUs
|
||||||
|
- h200-nvl.jpg (309KB)
|
||||||
|
- nvidia-blackwell-ultra.jpg (209KB)
|
||||||
|
|
||||||
|
## RTX Pro Products
|
||||||
|
- nvidia-rtx-pro-6000-blackwell-server-edition-gpu.jpg (150KB)
|
||||||
|
- rtx-pro-2000-blackwell.png (2.0MB)
|
||||||
|
- rtx-pro-4000-blackwell-sff.png (1.5MB)
|
||||||
|
- rtx-pro-enterprise-it.png (627KB)
|
||||||
|
|
||||||
|
## Technology Showcases
|
||||||
|
- robotics-and-omniverse.jpg (2.0MB)
|
||||||
|
- industrial-ai.png (941KB)
|
||||||
|
- nvidia-ai-data-platform.jpg (671KB)
|
||||||
|
- quantum-computing.jpg (367KB)
|
||||||
|
- B-R4-Ros-IsaacSim-2024_oneoff.png (41KB)
|
||||||
|
- jetson-thor.png (1.2MB)
|
||||||
|
|
||||||
|
## Networking & Infrastructure
|
||||||
|
- nvlink-fusion.jpg (406KB)
|
||||||
|
- silicon-photonics-networking.jpg (408KB)
|
||||||
|
- spectrum-xgs.png (512KB)
|
||||||
|
|
||||||
|
## Data Center & Cloud
|
||||||
|
- European AI Infrastructure.jpg (539KB)
|
||||||
|
- gtc-paris-dgx-cloud-lepton.jpg (247KB)
|
||||||
|
- CUDA-x Data Science Image.jpg (1.0MB)
|
||||||
|
|
||||||
|
## Gaming/Consumer
|
||||||
|
- geforce-now-gamescom-2025.jpg (686KB)
|
||||||
|
- BFGD KV.jpg (15MB) - NEEDS OPTIMIZATION
|
||||||
|
|
||||||
|
## Manufacturing
|
||||||
|
- tsmc-chip.jpg (83KB)
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" class="scroll-smooth">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
|
<!-- Primary Meta Tags -->
|
||||||
|
<title>Hanzo - AI Supercomputing | Blackwell, Hopper, DGX GPU Access</title>
|
||||||
|
<meta name="title" content="Hanzo - AI Supercomputing | Blackwell, Hopper, DGX GPU Access" />
|
||||||
|
<meta name="description" content="Access NVIDIA Blackwell B200, B300, GB200 NVL72, and DGX Spark GPUs on-demand. Enterprise AI infrastructure by Hanzo.AI starting at $3,999." />
|
||||||
|
|
||||||
|
<!-- Open Graph / Facebook -->
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:url" content="https://hanzo.computer/" />
|
||||||
|
<meta property="og:title" content="Hanzo - AI Supercomputing | Blackwell, Hopper, DGX GPU Access" />
|
||||||
|
<meta property="og:description" content="Access NVIDIA Blackwell B200, B300, GB200 NVL72, and DGX Spark GPUs on-demand. Enterprise AI infrastructure by Hanzo.AI starting at $3,999." />
|
||||||
|
<meta property="og:image" content="https://hanzo.computer/og-image.jpg" />
|
||||||
|
|
||||||
|
<!-- Twitter -->
|
||||||
|
<meta property="twitter:card" content="summary_large_image" />
|
||||||
|
<meta property="twitter:url" content="https://hanzo.computer/" />
|
||||||
|
<meta property="twitter:title" content="Hanzo - AI Supercomputing | Blackwell, Hopper, DGX GPU Access" />
|
||||||
|
<meta property="twitter:description" content="Access NVIDIA Blackwell B200, B300, GB200 NVL72, and DGX Spark GPUs on-demand. Enterprise AI infrastructure by Hanzo.AI starting at $3,999." />
|
||||||
|
<meta property="twitter:image" content="https://hanzo.computer/og-image.jpg" />
|
||||||
|
<meta name="twitter:site" content="@hanzoai" />
|
||||||
|
|
||||||
|
<!-- Additional Meta Tags -->
|
||||||
|
<meta name="keywords" content="AI supercomputing, NVIDIA DGX, H100 GPU, H200 GPU, Blackwell, B200, B300, GB200, GB300, DGX Spark, Vera Rubin, GPU rental, AI infrastructure, machine learning, deep learning, cloud GPU" />
|
||||||
|
<meta name="author" content="Hanzo Industries Inc" />
|
||||||
|
<meta name="robots" content="index, follow" />
|
||||||
|
<link rel="canonical" href="https://hanzo.computer/" />
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
||||||
|
<script type="module" crossorigin src="/assets/index-DMDQJq7E.js"></script>
|
||||||
|
<link rel="stylesheet" crossorigin href="/assets/index-Z_4HI4Em.css">
|
||||||
|
</head>
|
||||||
|
<body class="bg-dark-bg">
|
||||||
|
<div id="root"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
After Width: | Height: | Size: 670 KiB |
|
After Width: | Height: | Size: 209 KiB |
|
After Width: | Height: | Size: 378 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 146 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 80" fill="none">
|
||||||
|
<!-- NVIDIA logo in green -->
|
||||||
|
<g fill="#76B900">
|
||||||
|
<path d="M5 10v40h5V22.5l4 .025c1.3 0 2.2.3 2.85 1 .8.85 1.1 2.2 1.1 4.7v21.75h5V26.5c0-7-4.5-8-8.8-8H5z"/>
|
||||||
|
<path d="M27.5 50h5V10h-5v40z"/>
|
||||||
|
<path d="M37.5 10l-4.2 14-4.2-14h-5.5l5.75 17.75h7.25L42.5 10h-5z"/>
|
||||||
|
<path d="M47.5 10v40h8.1c4.35 0 5.75-.7 7.25-2.35 1.1-1.15 1.8-3.65 1.8-6.35 0-2.5-.6-4.75-1.65-6.1-1.4-1.75-4.25-2.45-8.35-2.45H47.5V10zm5 3.85h2.15c3.15 0 5.15 1.4 5.15 5.05s-2 5.05-5.15 5.05H52.5V13.85z"/>
|
||||||
|
<path d="M70 50h5V10h-5v40z"/>
|
||||||
|
<path d="M82.5 10l-7 17.75h4.95l1.1-3.15h8.25l1.05 3.15h5.35L88.5 10h-6zm3.25 3.25l3.05 8.3h-6.15l3.1-8.3z"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- INCEPTION PROGRAM text in white, smaller font -->
|
||||||
|
<text x="5" y="70" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="8" font-weight="600" letter-spacing="1">INCEPTION PROGRAM</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 929 B |
@@ -0,0 +1,4 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-146.205 -44.925 1267.11 269.55">
|
||||||
|
<path d="M962.1 144.1v-2.7h1.7c.9 0 2.2.1 2.2 1.2 0 1.1-.7 1.5-1.8 1.5h-2.1m0 1.9h1.2l2.7 4.7h2.9l-3-4.9c1.5.1 2.7-1 2.8-2.5v-.4c0-2.6-1.8-3.4-4.8-3.4h-4.3v11.2h2.5V146m12.6-.9c0-6.6-5.1-10.4-10.8-10.4-5.7 0-10.8 3.8-10.8 10.4 0 6.6 5.1 10.4 10.8 10.4 5.7 0 10.8-3.8 10.8-10.4m-3.2 0c.2 4.2-3.1 7.8-7.3 8h-.3c-4.4.2-8.1-3.3-8.3-7.7-.2-4.4 3.3-8.1 7.7-8.3 4.4-.2 8.1 3.3 8.3 7.7-.1.1-.1.2-.1.3zM578.2 34v118h33.3V34zm-262-.2v118.1h33.6V60.2l26.2.1c8.6 0 14.6 2.1 18.7 6.5 5.3 5.6 7.4 14.7 7.4 31.2v53.9h32.6V86.7c0-46.6-29.7-52.9-58.7-52.9zm315.7.2v118h54c28.8 0 38.2-4.8 48.3-15.5 7.2-7.5 11.8-24.1 11.8-42.2 0-16.6-3.9-31.4-10.8-40.6C723 37.2 705.2 34 678.6 34zm33 25.6h14.3c20.8 0 34.2 9.3 34.2 33.5s-13.4 33.6-34.2 33.6h-14.3zM530.2 34l-27.8 93.5L475.8 34h-36l38 118h48l38.4-118zm231.4 118h33.3V34h-33.3zM855 34l-46.5 117.9h32.8l7.4-20.9h55l7 20.8h35.7L899.5 34zm21.6 21.5l20.2 55.2h-41z" fill="#FFF"/>
|
||||||
|
<path d="M101.3 53.6V37.4c1.6-.1 3.2-.2 4.8-.2 44.4-1.4 73.5 38.2 73.5 38.2S148.2 119 114.5 119c-4.5 0-8.9-.7-13.1-2.1V67.7c17.3 2.1 20.8 9.7 31.1 27l23.1-19.4s-16.9-22.1-45.3-22.1c-3-.1-6 .1-9 .4m0-53.6v24.2l4.8-.3c61.7-2.1 102 50.6 102 50.6s-46.2 56.2-94.3 56.2c-4.2 0-8.3-.4-12.4-1.1v15c3.4.4 6.9.7 10.3.7 44.8 0 77.2-22.9 108.6-49.9 5.2 4.2 26.5 14.3 30.9 18.7-29.8 25-99.3 45.1-138.7 45.1-3.8 0-7.4-.2-11-.6v21.1h170.2V0zm0 116.9v12.8c-41.4-7.4-52.9-50.5-52.9-50.5s19.9-22 52.9-25.6v14h-.1c-17.3-2.1-30.9 14.1-30.9 14.1s7.7 27.3 31 35.2M27.8 77.4s24.5-36.2 73.6-40V24.2C47 28.6 0 74.6 0 74.6s26.6 77 101.3 84v-14c-54.8-6.8-73.5-67.2-73.5-67.2z" fill="#76B900"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="316.2 33.8 630.2 118.2" xmlns:v="https://vecta.io/nano"><path d="M578.2 34v118h33.3V34h-33.3zm-262-.2v118.1h33.6V60.2l26.2.1c8.6 0 14.6 2.1 18.7 6.5 5.3 5.6 7.4 14.7 7.4 31.2v53.9h32.6V86.7c0-46.6-29.7-52.9-58.7-52.9h-59.8zm315.7.2v118h54c28.8 0 38.2-4.8 48.3-15.5 7.2-7.5 11.8-24.1 11.8-42.2 0-16.6-3.9-31.4-10.8-40.6C723 37.2 705.2 34 678.6 34h-46.7zm33 25.6h14.3c20.8 0 34.2 9.3 34.2 33.5s-13.4 33.6-34.2 33.6h-14.3V59.6zM530.2 34l-27.8 93.5L475.8 34h-36l38 118h48l38.4-118h-34zm231.4 118h33.3V34h-33.3v118zM855 34l-46.5 117.9h32.8l7.4-20.9h55l7 20.8h35.7L899.5 34H855zm21.6 21.5l20.2 55.2h-41l20.8-55.2z"/></svg>
|
||||||
|
After Width: | Height: | Size: 665 B |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="800" width="1200" viewBox="-146.205 -44.925 1267.11 269.55" style="background-color: #222"><path d="M962.1 144.1v-2.7h1.7c.9 0 2.2.1 2.2 1.2 0 1.1-.7 1.5-1.8 1.5h-2.1m0 1.9h1.2l2.7 4.7h2.9l-3-4.9c1.5.1 2.7-1 2.8-2.5v-.4c0-2.6-1.8-3.4-4.8-3.4h-4.3v11.2h2.5V146m12.6-.9c0-6.6-5.1-10.4-10.8-10.4-5.7 0-10.8 3.8-10.8 10.4 0 6.6 5.1 10.4 10.8 10.4 5.7 0 10.8-3.8 10.8-10.4m-3.2 0c.2 4.2-3.1 7.8-7.3 8h-.3c-4.4.2-8.1-3.3-8.3-7.7-.2-4.4 3.3-8.1 7.7-8.3 4.4-.2 8.1 3.3 8.3 7.7-.1.1-.1.2-.1.3zM578.2 34v118h33.3V34zm-262-.2v118.1h33.6V60.2l26.2.1c8.6 0 14.6 2.1 18.7 6.5 5.3 5.6 7.4 14.7 7.4 31.2v53.9h32.6V86.7c0-46.6-29.7-52.9-58.7-52.9zm315.7.2v118h54c28.8 0 38.2-4.8 48.3-15.5 7.2-7.5 11.8-24.1 11.8-42.2 0-16.6-3.9-31.4-10.8-40.6C723 37.2 705.2 34 678.6 34zm33 25.6h14.3c20.8 0 34.2 9.3 34.2 33.5s-13.4 33.6-34.2 33.6h-14.3zM530.2 34l-27.8 93.5L475.8 34h-36l38 118h48l38.4-118zm231.4 118h33.3V34h-33.3zM855 34l-46.5 117.9h32.8l7.4-20.9h55l7 20.8h35.7L899.5 34zm21.6 21.5l20.2 55.2h-41z" fill="#FFF"/><path d="M101.3 53.6V37.4c1.6-.1 3.2-.2 4.8-.2 44.4-1.4 73.5 38.2 73.5 38.2S148.2 119 114.5 119c-4.5 0-8.9-.7-13.1-2.1V67.7c17.3 2.1 20.8 9.7 31.1 27l23.1-19.4s-16.9-22.1-45.3-22.1c-3-.1-6 .1-9 .4m0-53.6v24.2l4.8-.3c61.7-2.1 102 50.6 102 50.6s-46.2 56.2-94.3 56.2c-4.2 0-8.3-.4-12.4-1.1v15c3.4.4 6.9.7 10.3.7 44.8 0 77.2-22.9 108.6-49.9 5.2 4.2 26.5 14.3 30.9 18.7-29.8 25-99.3 45.1-138.7 45.1-3.8 0-7.4-.2-11-.6v21.1h170.2V0zm0 116.9v12.8c-41.4-7.4-52.9-50.5-52.9-50.5s19.9-22 52.9-25.6v14h-.1c-17.3-2.1-30.9 14.1-30.9 14.1s7.7 27.3 31 35.2M27.8 77.4s24.5-36.2 73.6-40V24.2C47 28.6 0 74.6 0 74.6s26.6 77 101.3 84v-14c-54.8-6.8-73.5-67.2-73.5-67.2z" fill="#76B900"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 406 KiB |
@@ -0,0 +1,155 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<style>
|
||||||
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||||
|
body {
|
||||||
|
width: 1200px;
|
||||||
|
height: 630px;
|
||||||
|
background: linear-gradient(135deg, #0a0a0f 0%, #1a1a2e 100%);
|
||||||
|
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.bg-blur {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
filter: blur(150px);
|
||||||
|
}
|
||||||
|
.bg-blur-1 {
|
||||||
|
top: -20%;
|
||||||
|
left: -10%;
|
||||||
|
width: 50%;
|
||||||
|
height: 50%;
|
||||||
|
background: rgba(45, 106, 227, 0.15);
|
||||||
|
}
|
||||||
|
.bg-blur-2 {
|
||||||
|
bottom: -20%;
|
||||||
|
right: -10%;
|
||||||
|
width: 50%;
|
||||||
|
height: 50%;
|
||||||
|
background: rgba(0, 255, 155, 0.15);
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
position: relative;
|
||||||
|
z-index: 10;
|
||||||
|
text-align: center;
|
||||||
|
padding: 60px;
|
||||||
|
max-width: 1000px;
|
||||||
|
}
|
||||||
|
.logo {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 16px;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
.logo svg {
|
||||||
|
width: 64px;
|
||||||
|
height: 64px;
|
||||||
|
fill: white;
|
||||||
|
}
|
||||||
|
.logo-text {
|
||||||
|
font-size: 48px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: white;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
font-size: 72px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: white;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
.highlight {
|
||||||
|
color: #00ff9b;
|
||||||
|
}
|
||||||
|
.subtitle {
|
||||||
|
font-size: 32px;
|
||||||
|
color: #a0a0a0;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
.badges {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 30px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.badge {
|
||||||
|
background: rgba(0, 255, 155, 0.1);
|
||||||
|
border: 2px solid rgba(0, 255, 155, 0.3);
|
||||||
|
padding: 12px 30px;
|
||||||
|
border-radius: 50px;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #00ff9b;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
.badge svg {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
fill: #00ff9b;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="bg-blur bg-blur-1"></div>
|
||||||
|
<div class="bg-blur bg-blur-2"></div>
|
||||||
|
|
||||||
|
<div class="content">
|
||||||
|
<div class="logo">
|
||||||
|
<svg viewBox="0 0 67 67" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M22.21 67V44.6369H0V67H22.21Z"></path>
|
||||||
|
<path d="M0 44.6369L22.21 46.8285V44.6369H0Z" opacity="0.7"></path>
|
||||||
|
<path d="M66.7038 22.3184H22.2534L0.0878906 44.6367H44.4634L66.7038 22.3184Z"></path>
|
||||||
|
<path d="M22.21 0H0V22.3184H22.21V0Z"></path>
|
||||||
|
<path d="M66.7198 0H44.5098V22.3184H66.7198V0Z"></path>
|
||||||
|
<path d="M66.6753 22.3185L44.5098 20.0822V22.3185H66.6753Z" opacity="0.7"></path>
|
||||||
|
<path d="M66.7198 67V44.6369H44.5098V67H66.7198Z"></path>
|
||||||
|
</svg>
|
||||||
|
<div class="logo-text">Hanzo</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h1 class="title">
|
||||||
|
AI Supercomputing<br>
|
||||||
|
<span class="highlight">On Your Terms</span>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<p class="subtitle">
|
||||||
|
Access NVIDIA DGX, H100 & H200 GPUs<br>
|
||||||
|
Starting at $3,999
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="badges">
|
||||||
|
<div class="badge">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
|
<path d="M13 10V3L4 14h7v7l9-11h-7z"/>
|
||||||
|
</svg>
|
||||||
|
DGX Spark
|
||||||
|
</div>
|
||||||
|
<div class="badge">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
|
<rect x="2" y="7" width="20" height="14" rx="2" ry="2"/>
|
||||||
|
<path d="M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"/>
|
||||||
|
</svg>
|
||||||
|
H100 & H200
|
||||||
|
</div>
|
||||||
|
<div class="badge">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||||
|
<circle cx="12" cy="12" r="10"/>
|
||||||
|
<polyline points="12 6 12 12 16 14"/>
|
||||||
|
</svg>
|
||||||
|
On-Demand
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 367 KiB |
|
After Width: | Height: | Size: 2.0 MiB |
|
After Width: | Height: | Size: 408 KiB |
@@ -0,0 +1,8 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 50" fill="none">
|
||||||
|
<g fill="#FFFFFF">
|
||||||
|
<!-- techstars text -->
|
||||||
|
<text x="5" y="32" font-family="Arial, sans-serif" font-size="28" font-weight="700" letter-spacing="-0.5">techstars</text>
|
||||||
|
<!-- Correct underscore aligned with text -->
|
||||||
|
<rect x="5" y="38" width="185" height="3" fill="#00C9FF"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 377 B |
|
After Width: | Height: | Size: 83 KiB |
@@ -9,10 +9,10 @@ test.describe('Ecommerce Flow', () => {
|
|||||||
|
|
||||||
// Test DGX Spark highlight section
|
// Test DGX Spark highlight section
|
||||||
await expect(page.getByRole('heading', { name: /DGX Spark/i }).first()).toBeVisible();
|
await expect(page.getByRole('heading', { name: /DGX Spark/i }).first()).toBeVisible();
|
||||||
await expect(page.getByText(/Only \$4,000/i)).toBeVisible();
|
await expect(page.getByText(/Only \$3,999/i)).toBeVisible();
|
||||||
|
|
||||||
// Add to cart from highlight section
|
// Add to cart from highlight section
|
||||||
await page.getByRole('button', { name: /Add to Cart - \$4,000/i }).click();
|
await page.getByRole('button', { name: /Add to Cart - \$3,999/i }).click();
|
||||||
|
|
||||||
// Should navigate to cart
|
// Should navigate to cart
|
||||||
await expect(page).toHaveURL('/cart');
|
await expect(page).toHaveURL('/cart');
|
||||||
@@ -23,7 +23,7 @@ test.describe('Ecommerce Flow', () => {
|
|||||||
|
|
||||||
// Verify cart item details
|
// Verify cart item details
|
||||||
await expect(page.getByRole('heading', { name: 'DGX Spark' })).toBeVisible();
|
await expect(page.getByRole('heading', { name: 'DGX Spark' })).toBeVisible();
|
||||||
await expect(page.getByText(/\$4,000/i)).toBeVisible();
|
await expect(page.getByText(/\$3,999/i)).toBeVisible();
|
||||||
|
|
||||||
// Test quantity controls
|
// Test quantity controls
|
||||||
const plusButton = page.getByRole('button', { name: '+' });
|
const plusButton = page.getByRole('button', { name: '+' });
|
||||||
@@ -130,7 +130,7 @@ test.describe('Navigation', () => {
|
|||||||
|
|
||||||
// Dropdown should appear
|
// Dropdown should appear
|
||||||
await expect(page.getByText('DGX Spark').first()).toBeVisible();
|
await expect(page.getByText('DGX Spark').first()).toBeVisible();
|
||||||
await expect(page.getByText('$4,000 - Dedicated DGX Instance')).toBeVisible();
|
await expect(page.getByText('$3,999 - Dedicated DGX Instance')).toBeVisible();
|
||||||
await expect(page.getByText('GPU On-Demand')).toBeVisible();
|
await expect(page.getByText('GPU On-Demand')).toBeVisible();
|
||||||
await expect(page.getByText('H100 & H200 GPUs')).toBeVisible();
|
await expect(page.getByText('H100 & H200 GPUs')).toBeVisible();
|
||||||
});
|
});
|
||||||
@@ -224,7 +224,7 @@ test.describe('Cart Persistence', () => {
|
|||||||
await page.goto('/');
|
await page.goto('/');
|
||||||
|
|
||||||
// Add item to cart
|
// Add item to cart
|
||||||
await page.getByRole('button', { name: /Add to Cart - \$4,000/i }).click();
|
await page.getByRole('button', { name: /Add to Cart - \$3,999/i }).click();
|
||||||
await expect(page).toHaveURL('/cart');
|
await expect(page).toHaveURL('/cart');
|
||||||
|
|
||||||
// Add more items
|
// Add more items
|
||||||
|
|||||||
@@ -6,27 +6,27 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
<!-- Primary Meta Tags -->
|
<!-- Primary Meta Tags -->
|
||||||
<title>Hanzo - On-Demand AI Supercomputing | DGX, H100, H200 GPU Access</title>
|
<title>Hanzo - AI Supercomputing | Blackwell, Hopper, DGX GPU Access</title>
|
||||||
<meta name="title" content="Hanzo - On-Demand AI Supercomputing | DGX, H100, H200 GPU Access" />
|
<meta name="title" content="Hanzo - AI Supercomputing | Blackwell, Hopper, DGX GPU Access" />
|
||||||
<meta name="description" content="Access NVIDIA DGX systems, H100 and H200 GPUs on-demand. Start with DGX Spark at $4,000 for 100 hours of compute. Enterprise AI infrastructure by Hanzo.AI." />
|
<meta name="description" content="Access NVIDIA Blackwell B200, B300, GB200 NVL72, and DGX Spark GPUs on-demand. Enterprise AI infrastructure by Hanzo.AI starting at $3,999." />
|
||||||
|
|
||||||
<!-- Open Graph / Facebook -->
|
<!-- Open Graph / Facebook -->
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content="https://hanzo.computer/" />
|
<meta property="og:url" content="https://hanzo.computer/" />
|
||||||
<meta property="og:title" content="Hanzo - On-Demand AI Supercomputing | DGX, H100, H200 GPU Access" />
|
<meta property="og:title" content="Hanzo - AI Supercomputing | Blackwell, Hopper, DGX GPU Access" />
|
||||||
<meta property="og:description" content="Access NVIDIA DGX systems, H100 and H200 GPUs on-demand. Start with DGX Spark at $4,000 for 100 hours of compute. Enterprise AI infrastructure by Hanzo.AI." />
|
<meta property="og:description" content="Access NVIDIA Blackwell B200, B300, GB200 NVL72, and DGX Spark GPUs on-demand. Enterprise AI infrastructure by Hanzo.AI starting at $3,999." />
|
||||||
<meta property="og:image" content="https://hanzo.computer/og-image.jpg" />
|
<meta property="og:image" content="https://hanzo.computer/og-image.jpg" />
|
||||||
|
|
||||||
<!-- Twitter -->
|
<!-- Twitter -->
|
||||||
<meta property="twitter:card" content="summary_large_image" />
|
<meta property="twitter:card" content="summary_large_image" />
|
||||||
<meta property="twitter:url" content="https://hanzo.computer/" />
|
<meta property="twitter:url" content="https://hanzo.computer/" />
|
||||||
<meta property="twitter:title" content="Hanzo - On-Demand AI Supercomputing | DGX, H100, H200 GPU Access" />
|
<meta property="twitter:title" content="Hanzo - AI Supercomputing | Blackwell, Hopper, DGX GPU Access" />
|
||||||
<meta property="twitter:description" content="Access NVIDIA DGX systems, H100 and H200 GPUs on-demand. Start with DGX Spark at $4,000 for 100 hours of compute. Enterprise AI infrastructure by Hanzo.AI." />
|
<meta property="twitter:description" content="Access NVIDIA Blackwell B200, B300, GB200 NVL72, and DGX Spark GPUs on-demand. Enterprise AI infrastructure by Hanzo.AI starting at $3,999." />
|
||||||
<meta property="twitter:image" content="https://hanzo.computer/og-image.jpg" />
|
<meta property="twitter:image" content="https://hanzo.computer/og-image.jpg" />
|
||||||
<meta name="twitter:site" content="@hanzoai" />
|
<meta name="twitter:site" content="@hanzoai" />
|
||||||
|
|
||||||
<!-- Additional Meta Tags -->
|
<!-- Additional Meta Tags -->
|
||||||
<meta name="keywords" content="AI supercomputing, NVIDIA DGX, H100 GPU, H200 GPU, GPU rental, AI infrastructure, machine learning, deep learning, cloud GPU, DGX Spark" />
|
<meta name="keywords" content="AI supercomputing, NVIDIA DGX, H100 GPU, H200 GPU, Blackwell, B200, B300, GB200, GB300, DGX Spark, Vera Rubin, GPU rental, AI infrastructure, machine learning, deep learning, cloud GPU" />
|
||||||
<meta name="author" content="Hanzo Industries Inc" />
|
<meta name="author" content="Hanzo Industries Inc" />
|
||||||
<meta name="robots" content="index, follow" />
|
<meta name="robots" content="index, follow" />
|
||||||
<link rel="canonical" href="https://hanzo.computer/" />
|
<link rel="canonical" href="https://hanzo.computer/" />
|
||||||
|
|||||||
@@ -125,7 +125,7 @@
|
|||||||
|
|
||||||
<p class="subtitle">
|
<p class="subtitle">
|
||||||
Access NVIDIA DGX, H100 & H200 GPUs<br>
|
Access NVIDIA DGX, H100 & H200 GPUs<br>
|
||||||
Starting at $4,000
|
Starting at $3,999
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="badges">
|
<div class="badges">
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ const FeaturesPage: React.FC = () => {
|
|||||||
to="/#dgx-spark"
|
to="/#dgx-spark"
|
||||||
className="px-10 py-4 bg-primary text-black font-bold rounded-lg hover:bg-primary-dark transition-all text-lg"
|
className="px-10 py-4 bg-primary text-black font-bold rounded-lg hover:bg-primary-dark transition-all text-lg"
|
||||||
>
|
>
|
||||||
Buy DGX Spark - $4,000
|
Buy DGX Spark - $3,999
|
||||||
</Link>
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
to="/request-quote"
|
to="/request-quote"
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ const TermsOfService: React.FC = () => {
|
|||||||
|
|
||||||
<h3 className="text-xl font-semibold text-white mb-2 mt-4">4.1 DGX Spark</h3>
|
<h3 className="text-xl font-semibold text-white mb-2 mt-4">4.1 DGX Spark</h3>
|
||||||
<ul className="list-disc list-inside space-y-2 pl-4 mb-4">
|
<ul className="list-disc list-inside space-y-2 pl-4 mb-4">
|
||||||
<li>One-time payment of $4,000 includes dedicated DGX instance</li>
|
<li>One-time payment of $3,999 includes dedicated DGX instance</li>
|
||||||
<li>Includes 100 hours of compute time</li>
|
<li>Includes 100 hours of compute time</li>
|
||||||
<li>Additional compute hours available for purchase</li>
|
<li>Additional compute hours available for purchase</li>
|
||||||
<li>Maximum 5 units per order</li>
|
<li>Maximum 5 units per order</li>
|
||||||
|
|||||||