fix: rebuild docs/ with latest GPU specs

This commit is contained in:
2026-03-31 15:46:12 -07:00
parent 10a3a2e570
commit 2632ae1c9b
54 changed files with 7620 additions and 604 deletions
+25 -2
View File
@@ -22,7 +22,7 @@ const CloudPricing: React.FC = () => {
const instances: GPUInstance[] = [
{
gpu: 'NVIDIA B300',
gpu: 'NVIDIA B300 (Blackwell Ultra)',
gpuCount: 8,
processor: 'Dual 64-Core',
ram: '3TB',
@@ -32,7 +32,20 @@ const CloudPricing: React.FC = () => {
monthlyPrice: null,
sixMonthPrice: 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',
@@ -313,6 +326,16 @@ const CloudPricing: React.FC = () => {
</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 */}
<div className="mt-16 grid grid-cols-1 md:grid-cols-4 gap-6">
<div className="text-center">
+3 -3
View File
@@ -11,7 +11,7 @@ const DGXSparkHighlight: React.FC = () => {
addItem({
id: 'dgx-spark',
name: 'DGX Spark',
price: 4000,
price: 3999,
description: 'Perfect for startups and researchers to kickstart projects on a powerful, dedicated DGX instance.',
purchaseMethod: 'online',
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"
/>
<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>
@@ -153,7 +153,7 @@ const DGXSparkHighlight: React.FC = () => {
<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" />
</svg>
Add to Cart - $4,000
Add to Cart - $3,999
</>
)}
</button>
+1 -1
View File
@@ -11,7 +11,7 @@ const FAQ: React.FC = () => {
},
{
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?",
+1 -1
View File
@@ -31,7 +31,7 @@ const features = [
{
icon: CpuChipIcon,
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,
+45 -3
View File
@@ -3,9 +3,37 @@ import React from 'react';
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',
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',
stats: [
{ value: '192 GB', label: 'HBM3e Memory' },
@@ -17,7 +45,7 @@ const hardware = [
]
},
{
category: 'LATEST: Blackwell Architecture',
category: 'Blackwell Architecture',
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.',
imageUrl: '/nvidia-dgx-spark-and-dgx-station.jpg',
@@ -58,6 +86,20 @@ const hardware = [
{ 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 }) => (
+1 -1
View File
@@ -25,7 +25,7 @@ const Hero: React.FC = () => {
</span>
</h1>
<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>
<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">
+93 -4
View File
@@ -277,11 +277,68 @@ const gpuPlans = [
salesLink: 'https://hanzo.ai/contact',
// 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',
name: 'GB300 NVL72 Exascale',
price: 'Custom Quote',
priceValue: 0,
price: 'From $499K',
priceValue: 499000,
leasePrice: '$39,999',
leasePriceValue: 39999,
period: '',
description: 'An exascale of compute in a rack. 72x NVIDIA B300 GPUs with direct liquid cooling for maximum AI performance.',
features: [
@@ -295,6 +352,15 @@ const gpuPlans = [
'800 Gb/s Networking',
'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',
purchaseMethod: 'sales' as const,
salesLink: 'https://hanzo.ai/contact',
@@ -325,6 +391,29 @@ const gpuPlans = [
isBlackwell: 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',
name: '8X NVIDIA H100 (Standalone)',
@@ -445,9 +534,9 @@ const gpuPlans = [
price: 'Usage-Based',
priceValue: 0,
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: [
'Access to H100 & H200 GPUs',
'Access to B300, B200, H200 & H100 GPUs',
'Scale from 1 to 100s of GPUs',
'Pay only for what you use',
'Ideal for Inference & Fine-tuning',
+1 -1
View File
@@ -24,7 +24,7 @@ const SearchModal: React.FC<SearchModalProps> = ({ isOpen, onClose }) => {
{
id: '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',
action: () => {
navigate('/#pricing');
+1 -1
View File
@@ -194,7 +194,7 @@ const UseCases: React.FC = () => {
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"
>
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">
<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>
+2 -2
View File
@@ -115,7 +115,7 @@ const WhyBuyHardware: React.FC = () => {
<p className="text-gray-400">Own Your Hardware</p>
</div>
<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-500 text-sm mt-1">+ 100 hours included</div>
</div>
@@ -249,7 +249,7 @@ const WhyBuyHardware: React.FC = () => {
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"
>
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">
<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>
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 395 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

+1
View File
@@ -0,0 +1 @@
hanzo.computer
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 KiB

-273
View File
@@ -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: 'billing@hanzo.computer',
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
-296
View File
@@ -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 = 'user@example.com';
-- 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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -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

+6
View File
@@ -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

+12
View File
@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 686 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

+9
View File
@@ -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

+42
View File
@@ -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)
+43
View File
@@ -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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 670 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

+14
View File
@@ -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

File diff suppressed because it is too large Load Diff
+4
View File
@@ -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

+1
View File
@@ -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

+1
View File
@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

+155
View File
@@ -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>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

+8
View File
@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

+5 -5
View File
@@ -9,10 +9,10 @@ test.describe('Ecommerce Flow', () => {
// Test DGX Spark highlight section
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
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
await expect(page).toHaveURL('/cart');
@@ -23,7 +23,7 @@ test.describe('Ecommerce Flow', () => {
// Verify cart item details
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
const plusButton = page.getByRole('button', { name: '+' });
@@ -130,7 +130,7 @@ test.describe('Navigation', () => {
// Dropdown should appear
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('H100 & H200 GPUs')).toBeVisible();
});
@@ -224,7 +224,7 @@ test.describe('Cart Persistence', () => {
await page.goto('/');
// 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');
// Add more items
+8 -8
View File
@@ -6,27 +6,27 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- Primary Meta Tags -->
<title>Hanzo - On-Demand AI Supercomputing | DGX, H100, H200 GPU Access</title>
<meta name="title" content="Hanzo - On-Demand AI Supercomputing | DGX, H100, H200 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." />
<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 - On-Demand AI Supercomputing | DGX, H100, H200 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: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 - On-Demand AI Supercomputing | DGX, H100, H200 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: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, 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="robots" content="index, follow" />
<link rel="canonical" href="https://hanzo.computer/" />
+1 -1
View File
@@ -125,7 +125,7 @@
<p class="subtitle">
Access NVIDIA DGX, H100 & H200 GPUs<br>
Starting at $4,000
Starting at $3,999
</p>
<div class="badges">
+1 -1
View File
@@ -153,7 +153,7 @@ const FeaturesPage: React.FC = () => {
to="/#dgx-spark"
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
to="/request-quote"
+1 -1
View File
@@ -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>
<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>Additional compute hours available for purchase</li>
<li>Maximum 5 units per order</li>