Files
spore-website/public/index.html
2025-10-14 18:12:16 +02:00

359 lines
18 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>SPORE - Sprocket Orchestration Engine</title>
<link rel="stylesheet" href="styles.css">
<!-- Prism.js for syntax highlighting -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet">
</head>
<body>
<header>
<div class="container">
<div class="header-content">
<div class="brand">
<h1>SPORE</h1>
<p class="tagline">Sprocket Orchestration Engine</p>
</div>
<button class="burger" id="menu-toggle" aria-label="Menu" aria-controls="site-nav" aria-expanded="false">
<span></span><span></span><span></span>
</button>
</div>
</div>
<nav id="site-nav" class="site-nav">
<div class="container">
<a href="#overview">Overview</a>
<a href="#spore">Core</a>
<a href="#ui">UI</a>
<a href="#apps">Apps</a>
<a href="#docs">Docs</a>
</div>
</nav>
</header>
<main>
<section id="overview" class="hero">
<div class="container">
<img src="assets/spore.png" alt="SPORE" class="hero-image">
<p>A totally based cluster engine for ESP8266 microcontrollers with automatic node discovery, health monitoring, and over-the-air updates. Built for real-time control of distributed embedded systems.</p>
</div>
<p class="subtitle">
</section>
<section id="spore" class="content-section">
<div class="container">
<h2>Core</h2>
<p class="subtitle">Cluster engine firmware for ESP8266 microcontrollers</p>
<p class="repo-link"><a href="https://git.dcentral.systems/iot/spore" target="_blank" rel="noopener">Repository: spore</a></p>
<div class="feature-grid">
<div class="feature-card">
<h3>Auto Discovery</h3>
<p>UDP-based node discovery with automatic cluster membership</p>
</div>
<div class="feature-card">
<h3>Health Monitoring</h3>
<p>Real-time node status tracking with resource monitoring and automatic failover</p>
</div>
<div class="feature-card">
<h3>Event System</h3>
<p>Local and cluster-wide event publishing/subscription with WebSocket and UDP streaming API</p>
</div>
<div class="feature-card">
<h3>OTA Updates</h3>
<p>Seamless firmware updates across the cluster via HTTP API</p>
</div>
<div class="feature-card">
<h3>Service Registry</h3>
<p>Dynamic API endpoint discovery and registration for custom services</p>
</div>
<div class="feature-card">
<h3>Task Scheduler</h3>
<p>Cooperative multitasking system for background operations</p>
</div>
</div>
<div class="content-block">
<h3>Quick Start</h3>
<pre><code class="language-cpp">#include &lt;Arduino.h&gt;
#include "spore/Spore.h"
#include "spore/Service.h"
#include "spore/core/ApiServer.h"
#include "spore/core/TaskManager.h"
class HelloService : public Service {
public:
HelloService() {}
const char* getName() const override { return "HelloService"; }
void registerEndpoints(ApiServer& api) override {
api.registerEndpoint("/api/hello", HTTP_GET, [](AsyncWebServerRequest* req) {
req->send(200, "application/json", "{\"message\":\"hello\"}");
});
}
void registerTasks(TaskManager& taskManager) override {
taskManager.registerTask("heartbeat", 1000, [this]() { this->heartbeat(); });
}
private:
void heartbeat() {
// e.g., blink LED, publish telemetry, etc.
}
};
Spore spore({
{"app", "my_app"},
{"role", "controller"}
});
void setup() {
spore.setup();
spore.registerService(new HelloService());
spore.begin();
}
void loop() {
spore.loop();
}</code></pre>
</div>
<div class="content-block">
<h3>Technical Specifications</h3>
<ul>
<li><strong>Supported Hardware:</strong> ESP-01/ESP-01S (1MB Flash), Wemos D1 (4MB Flash)</li>
<li><strong>Discovery Protocol:</strong> Discovery and heartbeat via UDP broadcast</li>
<li><strong>API Interface:</strong> RESTful HTTP + WebSocket and UDP streaming</li>
<li><strong>Dependencies:</strong> ESPAsyncWebServer, ArduinoJson</li>
<li><strong>Framework:</strong> Arduino with PlatformIO build system</li>
</ul>
</div>
</div>
</section>
<section id="ui" class="content-section alt">
<div class="container">
<h2>UI</h2>
<p class="subtitle">Zero-configuration web interface for cluster monitoring and management</p>
<p class="repo-link"><a href="https://git.dcentral.systems/iot/spore-ui" target="_blank" rel="noopener">Repository: spore-ui</a></p>
<div class="screenshot-grid">
<div class="screenshot">
<img src="assets/cluster.png" alt="Cluster monitoring view">
<p>Real-time cluster member overview with auto-discovery</p>
</div>
<div class="screenshot">
<img src="assets/topology.png" alt="Network topology visualization">
<p>Network topology visualization with node relationships</p>
</div>
<div class="screenshot">
<img src="assets/monitoring.png" alt="Node monitoring dashboard">
<p>Detailed system metrics and task monitoring</p>
</div>
<div class="screenshot">
<img src="assets/firmware.png" alt="Firmware management interface">
<p>Clusterwide over-the-air firmware updates</p>
</div>
</div>
<div class="content-block">
<h3>Features</h3>
<ul>
<li>Cluster monitoring with real-time status updates</li>
<li>Node details including running tasks and available endpoints</li>
<li>Direct HTTP API access to all nodes in the cluster</li>
<li>Over-the-air firmware updates for entire cluster</li>
<li>WebSocket terminal for direct node interaction</li>
<li>UDP auto-discovery eliminates hardcoded IP addresses</li>
<li>Responsive design for all devices</li>
</ul>
</div>
<div class="content-block">
<h3>Technology Stack</h3>
<ul>
<li><strong>Backend:</strong> Express.js, Node.js</li>
<li><strong>Frontend:</strong> Vanilla JavaScript, CSS3, HTML5</li>
<li><strong>Architecture:</strong> Custom component-based framework</li>
</ul>
</div>register
</div>
</section>
<section id="apps" class="content-section">
<div class="container">
<h2>Apps</h2>
<p class="subtitle">Application suite built on SPORE</p>
<div class="content-block">
<p>Explore applications that extend SPORE.</p>
<ul>
<li><a href="#ledlab">LEDLab</a> — Real-time LED matrix animation streaming and visual preset editor</li>
</ul>
</div>
</div>
</section>
<section id="ledlab" class="content-section">
<div class="container">
<h2>LEDLab</h2>
<p class="subtitle">Real-time LED matrix animation streaming and visual preset editor</p>
<p class="repo-link"><a href="https://git.dcentral.systems/iot/spore-ledlab" target="_blank" rel="noopener">Repository: spore-ledlab</a></p>
<div class="screenshot-grid">
<div class="screenshot">
<img src="assets/ledlab.png" alt="LEDLab interface">
<p>Multi-node management with live canvas preview</p>
</div>
<div class="screenshot">
<img src="assets/editor.png" alt="Preset editor">
<p>Visual preset editor with building blocks</p>
</div>
</div>
<div class="content-block">
<h3>Firmware Requirements</h3>
<p>LEDLab requires SPORE nodes running the <strong>PixelStreamController</strong> firmware, which handles UDP-based RGB data streaming to NeoPixel strips and matrices. The firmware subscribes to <code>udp/raw</code> cluster events and converts incoming hex-encoded pixel data into real-time LED animations.</p>
<p>Key firmware features include support for both strip and matrix configurations, serpentine (zig-zag) wiring patterns, and configurable pixel counts, brightness, and matrix dimensions. The controller automatically remaps pixel coordinates for proper matrix display.</p>
<p>See <a href="https://git.dcentral.systems/iot/spore/src/branch/main/examples/pixelstream/README.md" target="_blank" rel="noopener">PixelStream documentation</a> for more information.</p>
</div>
<div class="content-block">
<h3>Capabilities</h3>
<ul>
<li>Multi-node management with individual control</li>
<li>Real-time canvas preview for each node</li>
<li>10+ built-in animation presets (rainbow, lava lamp, aurora, etc.)</li>
<li>Visual preset editor with reusable building blocks</li>
<li>Live parameter control with instant feedback</li>
<li>Import/export custom presets as JSON</li>
<li>Auto-discovery of SPORE nodes on network</li>
<li>Configurable FPS (1-60) and matrix dimensions</li>
<li>Requires SPORE nodes running PixelStreamController</li>
</ul>
</div>
<div class="content-block">
<h3>Building Blocks</h3>
<div class="building-blocks">
<div>
<strong>Shapes:</strong> Circle, Rectangle, Triangle, Blob, Point, Line
</div>
<div>
<strong>Patterns:</strong> Trail, Radial, Spiral
</div>
<div>
<strong>Colors:</strong> Solid, Gradient, Palette, Rainbow
</div>
<div>
<strong>Animations:</strong> Move, Rotate, Pulse, Oscillate, Fade
</div>
</div>
</div>
</div>
</section>
<section id="docs" class="content-section">
<div class="container">
<h2>Documentation</h2>
</div>
<div class="doc-grid">
<div class="doc-card">
<h3>SPORE Core</h3>
<ul>
<li><a href="https://git.dcentral.systems/iot/spore/src/branch/main/docs/Architecture.md" target="_blank" rel="noopener">Architecture Guide</a> - System design and implementation</li>
<li><a href="https://git.dcentral.systems/iot/spore/src/branch/main/docs/API.md" target="_blank" rel="noopener">API Reference</a> - Complete REST API documentation</li>
<li><a href="https://git.dcentral.systems/iot/spore/src/branch/main/docs/Development.md" target="_blank" rel="noopener">Development Guide</a> - Build, deployment, configuration</li>
<li><a href="https://git.dcentral.systems/iot/spore/src/branch/main/docs/TaskManagement.md" target="_blank" rel="noopener">Task Management</a> - Background task system</li>
<li><a href="https://git.dcentral.systems/iot/spore/src/branch/main/docs/ClusterBroadcast.md" target="_blank" rel="noopener">Cluster Broadcast</a> - Event distribution protocol</li>
<li><a href="https://git.dcentral.systems/iot/spore/src/branch/main/docs/StreamingAPI.md" target="_blank" rel="noopener">Streaming API</a> - WebSocket integration</li>
</ul>
</div>
<div class="doc-card">
<h3>SPORE UI</h3>
<ul>
<li><a href="https://git.dcentral.systems/iot/spore-ui/src/branch/main/README.md" target="_blank" rel="noopener">Getting Started</a> - Installation and setup</li>
<li><a href="https://git.dcentral.systems/iot/spore-ui/src/branch/main/docs/DISCOVERY.md" target="_blank" rel="noopener">UDP Auto Discovery</a> - Network discovery protocol</li>
<li><a href="https://git.dcentral.systems/iot/spore-ui/src/branch/main/api/openapi.yaml" target="_blank" rel="noopener">API Spec</a> - Backend API reference (OpenAPI)</li>
<li><a href="https://git.dcentral.systems/iot/spore-ui/src/branch/main/docs/FRAMEWORK_README.md" target="_blank" rel="noopener">Component Framework</a> - Custom UI architecture</li>
</ul>
</div>
<div class="doc-card">
<h3>SPORE LEDLab</h3>
<ul>
<li><a href="https://git.dcentral.systems/iot/spore-ledlab/src/branch/main/README.md" target="_blank" rel="noopener">Quick Start</a> - Installation and usage</li>
<li><a href="https://git.dcentral.systems/iot/spore-ledlab/src/branch/main/PRESET_EDITOR.md" target="_blank" rel="noopener">Preset Editor</a> - Visual animation builder</li>
<li><a href="https://git.dcentral.systems/iot/spore-ledlab/src/branch/main/presets/examples" target="_blank" rel="noopener">Custom Presets</a> - JSON format and examples</li>
<li><a href="https://git.dcentral.systems/iot/spore-ledlab/src/branch/main/presets/building-blocks.js" target="_blank" rel="noopener">Building Blocks</a> - Reusable components</li>
<li><a href="https://git.dcentral.systems/iot/spore-ledlab/src/branch/main/MULTI_NODE_UPDATE.md" target="_blank" rel="noopener">Multi-Node Management</a> - Cluster control</li>
<li><a href="https://git.dcentral.systems/iot/spore/src/branch/main/examples/pixelstream/README.md" target="_blank" rel="noopener">PixelStream Controller</a> - Required SPORE node firmware</li>
</ul>
</div>
</div>
<div class="container">
<div class="getting-started">
<h3>Getting Started</h3>
<div class="start-grid">
<div class="start-card">
<h4>SPORE Core</h4>
<pre><code># Build and flash firmware
./ctl.sh build target esp01
./ctl.sh flash target esp01</code></pre>
</div>
<div class="start-card">
<h4>SPORE UI</h4>
<pre><code># Install and start
npm install
npm start
# Open browser
http://localhost:3001</code></pre>
</div>
<div class="start-card">
<h4>SPORE LEDLab</h4>
<pre><code># Install and start
npm install
npm start
# Open browser
http://localhost:3000</code></pre>
</div>
</div>
</div>
</div>
</section>
</main>
<footer>
<div class="container">
<p>SPORE - Sprocket Orchestration Engine</p>
<p>
Source:
<a href="https://git.dcentral.systems/iot/spore" target="_blank" rel="noopener">spore</a> ·
<a href="https://git.dcentral.systems/iot/spore-ui" target="_blank" rel="noopener">spore-ui</a> ·
<a href="https://git.dcentral.systems/iot/spore-ledlab" target="_blank" rel="noopener">spore-ledlab</a>
</p>
</div>
</footer>
<!-- Lightbox Overlay for screenshots -->
<div id="lightbox" class="lightbox" aria-hidden="true" role="dialog">
<div class="lightbox-backdrop" data-close></div>
<figure class="lightbox-content">
<img id="lightbox-image" alt="Expanded screenshot" />
<figcaption id="lightbox-caption"></figcaption>
<button class="lightbox-close" type="button" title="Close" aria-label="Close" data-close>×</button>
</figure>
</div>
<script src="script.js"></script>
<!-- Prism.js for syntax highlighting -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/components/prism-core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.30.0/plugins/autoloader/prism-autoloader.min.js"></script>
</body>
</html>