Files
aitbc/website/docs/marketplace-web.html
oib 7062b2cc78 feat: add dark mode, navigation, and Web Vitals tracking to marketplace
Backend:
- Simplify DatabaseConfig: remove effective_url property and project root finder
- Update to Pydantic v2 model_config (replace nested Config class)
- Add web_vitals router to main.py and __init__.py
- Fix ExplorerService datetime handling (ensure timezone-naive comparisons)
- Fix status_label extraction to handle both enum and string job states

Frontend (Marketplace):
- Add dark mode toggle with system preference detection
2026-02-15 19:02:51 +01:00

277 lines
9.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Marketplace Web - AITBC Documentation</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<link rel="stylesheet" href="css/docs.css">
</head>
<body>
<!-- Header -->
<header class="site-header">
<div class="container">
<div class="header-inner">
<a href="/" class="brand">
<i class="fas fa-cube"></i>
<span>AITBC</span>
</a>
<nav class="header-nav">
<a href="/">Home</a>
<a href="/explorer/">Explorer</a>
<a href="/Exchange/">Exchange</a>
<a href="/docs/index.html" class="active">Docs</a>
<button id="theme-toggle" class="theme-toggle" title="Toggle theme"><i class="fas fa-sun"></i></button>
</nav>
</div>
</div>
</header>
<main>
<div class="container">
<!-- Breadcrumb -->
<div class="breadcrumb">
<a href="index.html">Documentation</a>
<span></span>
<a href="components.html">Components</a>
<span></span>
<span>Marketplace Web</span>
</div>
<!-- Back Button -->
<a href="components.html" class="back-button">
<i class="fas fa-arrow-left"></i>
Back to Components
</a>
<!-- Header -->
<div class="doc-header">
<h1><i class="fas fa-store"></i> Marketplace Web</h1>
<p>Vite/TypeScript marketplace with offer/bid functionality, stats dashboard, and mock/live data toggle. Production UI ready.</p>
<span class="status-badge">● Live</span>
</div>
<!-- Alert for markdown format -->
<div class="alert alert-info">
<i class="fas fa-info-circle"></i>
<strong>Documentation Format:</strong> <a href="https://github.com/oib/AITBC/blob/main/docs/marketplace-web.md" target="_blank" style="color: #1e40af; text-decoration: underline;">View this documentation in markdown format</a> for easier contribution and version control.
</div>
<!-- Overview -->
<section class="content-section">
<h2>Overview</h2>
<p>The Marketplace Web is the primary interface for clients to submit AI compute jobs and for miners to offer their services. It provides a real-time trading platform with comprehensive job management and analytics.</p>
<h3>Key Features</h3>
<ul>
<li>Real-time job marketplace with offer/bid functionality</li>
<li>Interactive statistics dashboard</li>
<li>Mock/live data toggle for development</li>
<li>Responsive design for all devices</li>
<li>WebSocket integration for live updates</li>
<li>Wallet integration for seamless payments</li>
</ul>
</section>
<!-- Technology Stack -->
<section class="content-section">
<h2>Technology Stack</h2>
<div class="tech-grid">
<div class="tech-item">
<strong>Framework</strong>
Vite 4.x
</div>
<div class="tech-item">
<strong>Language</strong>
TypeScript 5.x
</div>
<div class="tech-item">
<strong>UI</strong>
TailwindCSS + Headless UI
</div>
<div class="tech-item">
<strong>State Management</strong>
Zustand
</div>
<div class="tech-item">
<strong>Charts</strong>
Chart.js
</div>
<div class="tech-item">
<strong>WebSocket</strong>
Native WebSocket API
</div>
<div class="tech-item">
<strong>Icons</strong>
Lucide React
</div>
</div>
</section>
<!-- Getting Started -->
<section class="content-section">
<h2>Getting Started</h2>
<h3>Prerequisites</h3>
<ul>
<li>Node.js 18+</li>
<li>npm or yarn</li>
</ul>
<h3>Installation</h3>
<pre><code># Clone the repository
git clone https://github.com/oib/AITBC.git
cd aitbc/apps/marketplace-web
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview</code></pre>
<h3>Environment Configuration</h3>
<pre><code># .env.local
VITE_API_URL=http://localhost:18000
VITE_WS_URL=ws://localhost:18001
VITE_NETWORK=mainnet
VITE_MOCK_DATA=false</code></pre>
</section>
<!-- Features -->
<section class="content-section">
<h2>Features</h2>
<h3>Job Marketplace</h3>
<ul>
<li>Submit AI compute jobs with custom parameters</li>
<li>Browse available miner offers</li>
<li>Real-time price discovery</li>
<li>Job history and tracking</li>
</ul>
<h3>Statistics Dashboard</h3>
<ul>
<li>Real-time network metrics</li>
<li>Job completion rates</li>
<li>GPU utilization charts</li>
<li>Price trends analysis</li>
</ul>
<h3>Wallet Integration</h3>
<ul>
<li>Connect wallet via private key or keystore</li>
<li>View balance and transaction history</li>
<li>Sign transactions for job submissions</li>
<li>Receipt verification</li>
</ul>
</section>
<!-- API Integration -->
<section class="content-section">
<h2>API Integration</h2>
<h3>Coordinator API</h3>
<pre><code>// Job submission
POST /v1/jobs
{
"type": "inference",
"prompt": "Your prompt here",
"model": "llama3.2:latest",
"max_price": "100aitbc"
}
// WebSocket for live updates
ws://localhost:18001/ws</code></pre>
<h3>Blockchain RPC</h3>
<pre><code>// Get transaction status
curl -X POST http://localhost:26657 \
-d '{
"jsonrpc": "2.0",
"method": "tx",
"params": ["0x..."]
}'</code></pre>
</section>
<!-- Development -->
<section class="content-section">
<h2>Development</h2>
<h3>Project Structure</h3>
<pre><code>marketplace-web/
├── src/
│ ├── components/ # Reusable UI components
│ ├── pages/ # Page components
│ ├── hooks/ # Custom React hooks
│ ├── stores/ # Zustand stores
│ ├── services/ # API services
│ ├── types/ # TypeScript definitions
│ └── utils/ # Utility functions
├── public/
├── package.json
└── vite.config.ts</code></pre>
<h3>Mock Data</h3>
<p>Toggle mock data mode for development without a running backend:</p>
<pre><code>// In .env.local
VITE_MOCK_DATA=true</code></pre>
<h3>Building for Production</h3>
<pre><code># Build optimized bundle
npm run build
# Output in dist/ directory
# Deploy to any static hosting service</code></pre>
</section>
<!-- Deployment -->
<section class="content-section">
<h2>Deployment</h2>
<h3>Docker Deployment</h3>
<pre><code># Build image
docker build -t aitbc/marketplace-web .
# Run with nginx
docker run -d \
-p 80:80 \
-e VITE_API_URL=http://api.aitbc.bubuit.net \
aitbc/marketplace-web</code></pre>
<h3>Environment Variables</h3>
<ul>
<li><code>VITE_API_URL</code> - Coordinator API endpoint</li>
<li><code>VITE_WS_URL</code> - WebSocket endpoint</li>
<li><code>VITE_NETWORK</code> - Network name (mainnet/testnet)</li>
<li><code>VITE_MOCK_DATA</code> - Enable/disable mock data</li>
</ul>
</section>
<!-- Support -->
<section class="content-section">
<h2>Support</h2>
<p>For marketplace-specific issues:</p>
<ul>
<li>Check the <a href="full-documentation.html">issue tracker</a></li>
<li>Join our <a href="https://discord.gg/aitbc">Discord</a></li>
<li>Contact: <a href="mailto:andreas.fleckl@bubuit.net">andreas.fleckl@bubuit.net</a></li>
</ul>
</section>
</div>
</main>
<footer>
<div class="container">
<p>&copy; 2026 AITBC. All rights reserved.</p>
</div>
</footer>
<script src="js/theme.js"></script>
</body>
</html>