byteclaw/site/index.html

100 lines
7.4 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="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ByteClaw – selbst gehosteter, schlanker KI-Assistent</title>
<meta name="description" content="ByteClaw ist ein selbst gehosteter, schlanker KI-Assistent: Go-Backend plus native Android-App. OpenAI-kompatible Anbieter, Live-Streaming, Tools, sichere Defaults.">
<meta name="theme-color" content="#14202E">
<meta property="og:type" content="website">
<meta property="og:title" content="ByteClaw – selbst gehosteter KI-Assistent">
<meta property="og:description" content="Go-Backend + Android-App. OpenAI, OpenRouter, Ollama, Dahl, GonkaRouter oder eigener Endpunkt.">
<meta property="og:image" content="https://byteclaw-app-65807.web.app/assets/og.png">
<meta property="og:locale" content="de_DE">
<meta name="twitter:card" content="summary_large_image">
<link rel="icon" href="assets/icon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="assets/icon-180.png">
<link rel="stylesheet" href="style.css">
</head>
<body>
<header class="nav">
<a class="brand" href="#top"><img src="assets/icon.svg" alt="" width="32" height="32">ByteClaw</a>
<nav aria-label="Hauptnavigation">
<a href="#features">Features</a><a href="#screens">Screenshots</a><a href="#quickstart">Quickstart</a>
</nav>
</header>
<main id="top">
<section class="hero">
<div class="hero-text">
<img class="hero-icon" src="assets/icon.svg" alt="ByteClaw-Logo: drei Krallenspuren und Byte-Bits" width="112" height="112">
<h1>ByteClaw</h1>
<p class="claim">Selbst gehosteter, schlanker KI-Assistent – <span>Go-Backend</span> + <span>Android-App</span>.</p>
<p class="lead">Ein einzelnes Go-Binary mit SQLite spricht mit jedem OpenAI-kompatiblen Anbieter, nutzt Tools und streamt Antworten live in die native Android-App. Deine Schlüssel bleiben auf deinem Server.</p>
<div class="cta">
<a class="btn btn-primary" href="https://git.85.190.126.179.sslip.io/crypto/byteclaw/releases/download/v0.3.1/byteclaw-0.3.1-release.apk">Android-App laden · v0.3.1 (1,9 MB)</a>
<a class="btn btn-ghost" href="#quickstart">Quickstart ansehen</a>
</div>
</div>
<div class="hero-phones" aria-hidden="true">
<div class="phone tilt-l"><picture><source srcset="assets/chat_markdown_dark.webp" type="image/webp"><img src="assets/chat_markdown_dark.png" alt="" width="450" height="1000"></picture></div>
<div class="phone tilt-r"><picture><source srcset="assets/providers_light.webp" type="image/webp"><img src="assets/providers_light.png" alt="" width="450" height="1000"></picture></div>
</div>
</section>
<section id="features" class="section">
<h2>Was ByteClaw kann</h2>
<div class="grid">
<article class="card"><h3>Viele Anbieter</h3><p>Presets für OpenAI, OpenRouter, Ollama, Dahl und GonkaRouter – oder ein eigener OpenAI-kompatibler Endpunkt.</p></article>
<article class="card"><h3>Live-Streaming</h3><p>Antworten erscheinen Wort für Wort per WebSocket in der App.</p></article>
<article class="card"><h3>Tools</h3><p>Uhrzeit, Web-Abruf mit SSRF-Schutz, Datei-Tools im Workspace und ein optionales, streng begrenztes Shell-Tool.</p></article>
<article class="card"><h3>Abbrechen</h3><p>Stopp-Button in der App: Der Abbruch reicht bis zum Anbieter, die Teilantwort bleibt gespeichert.</p></article>
<article class="card"><h3>Session-Zusammenfassung</h3><p>Lange Chats werden automatisch per LLM zusammengefasst – die Originalnachrichten bleiben erhalten.</p></article>
<article class="card"><h3>Anbieter pro Session</h3><p>Global umschalten oder für einzelne Chats ein anderes Modell wählen – direkt aus der App.</p></article>
<article class="card"><h3>Konten &amp; Login</h3><p>Registrierung und Anmeldung in der App – jeder Nutzer hat eigene, getrennte Chats. Passwörter als bcrypt-Hash, Tokens widerrufbar.</p></article>
<article class="card"><h3>Sichere Defaults</h3><p>Login-Pflicht, Rate-Limit, nur localhost, Origin-Prüfung, TLS immer an, Keys nie in der App, Release nur HTTPS.</p></article>
<article class="card"><h3>ARM &amp; Termux</h3><p>Statische Builds für Linux amd64, arm64 und armv7 sowie Termux auf Android.</p></article>
</div>
</section>
<section id="screens" class="section">
<h2>Screenshots</h2>
<p class="sub">Android-App mit Demo-Daten, hell und dunkel.</p>
<div class="gallery">
<figure><div class="phone"><picture><source srcset="assets/chat_markdown_light.webp" type="image/webp"><img loading="lazy" src="assets/chat_markdown_light.png" alt="Chat mit Markdown und Codeblock-Kopieren, helles Design" width="450" height="1000"></picture></div><figcaption>Markdown &amp; Code kopieren</figcaption></figure>
<figure><div class="phone"><picture><source srcset="assets/chat_provider_dark.webp" type="image/webp"><img loading="lazy" src="assets/chat_provider_dark.png" alt="Chat mit Anbieter-Auswahl pro Session im Header, dunkles Design" width="450" height="1000"></picture></div><figcaption>Anbieter pro Session</figcaption></figure>
<figure><div class="phone"><picture><source srcset="assets/providers_dark.webp" type="image/webp"><img loading="lazy" src="assets/providers_dark.png" alt="Einstellungen mit Anbieter- und Modellauswahl, dunkles Design" width="450" height="1000"></picture></div><figcaption>Anbieter &amp; Modell</figcaption></figure>
<figure><div class="phone"><picture><source srcset="assets/sessions_search_dark.webp" type="image/webp"><img loading="lazy" src="assets/sessions_search_dark.png" alt="Sessions durchsuchen, dunkles Design" width="450" height="1000"></picture></div><figcaption>Sessions suchen &amp; umbenennen</figcaption></figure>
<figure><div class="phone"><picture><source srcset="assets/login_light.webp" type="image/webp"><img loading="lazy" src="assets/login_light.png" alt="Anmelde- und Registrierungsbildschirm, helles Design" width="450" height="1000"></picture></div><figcaption>Anmelden &amp; Registrieren</figcaption></figure>
<figure><div class="phone"><picture><source srcset="assets/chat_dark.webp" type="image/webp"><img loading="lazy" src="assets/chat_dark.png" alt="Chat, dunkles Design" width="450" height="1000"></picture></div><figcaption>Dunkles Design</figcaption></figure>
</div>
</section>
<section id="quickstart" class="section">
<h2>Quickstart</h2>
<p class="sub">Backend starten (Go 1.25), dann in der App Server-URL und Token eintragen.</p>
<div class="code">
<button class="copy" type="button" data-copy="qs">Kopieren</button>
<pre id="qs"><code>cp config.example.yaml config.yaml
export BYTECLAW_AUTH_TOKEN=$(openssl rand -hex 32)
export BYTECLAW_LLM_PROVIDER=dahl # openai | openrouter | ollama | dahl | gonkarouter | custom
export DAHL_API_KEY=... # Key bleibt auf dem Server
make run
curl -H "Authorization: Bearer $BYTECLAW_AUTH_TOKEN" \
-d '{"text":"Wie spät ist es in Berlin?"}' localhost:8787/api/chat</code></pre>
</div>
</section>
</main>
<footer class="footer">
<p><img src="assets/icon.svg" alt="" width="20" height="20"> ByteClaw · selbst gehostet, Go + Android</p>
<p class="muted">Screenshots zeigen Demo-Daten. APK v0.3.1 · Android 8+ · signiert.</p>
</footer>
<script>
document.querySelectorAll('[data-copy]').forEach(b=>b.addEventListener('click',()=>{
navigator.clipboard?.writeText(document.getElementById(b.dataset.copy).innerText).then(()=>{b.textContent='Kopiert';setTimeout(()=>b.textContent='Kopieren',1500)});
}));
</script>
</body>
</html>