Files
neon-chat/templates/index.html
T
arch_agent a432226824 v2.0 — Streaming, Session-Cookies, Gedächtnis-Fix, Multi-Device
Features:
- Streaming Responses: Token-für-Token via Server-Sent Events
- Session-Cookies: Cookie-basierte Session, läuft 1 Jahr
- Multi-Device: Anderes Gerät = gleiche Session = gleicher Chat
- /api/history endpoint: Lädt vollen Chat-Verlauf beim Reconnect
- Gedächtnis-Fix: Chat-Verlauf beim Neuladen korrekt aus DB
- Session-basiertes Gedächtnis (session_id in jeder Nachricht)
- UI: Animated typing indicator (3 dots)
- UI: Session-ID Anzeige im Header
- Auto-History-Load beim Seitenaufruf (falls nicht server-seitig gerendert)
- Prompt: Anti-Repetition Rule hinzugefügt
- Prompt: Erinnerungen-Referenz-Regel hinzugefügt
- DB Migration: Alte Nachrichten werden zu Default-Session migriert
- DB Schema: session_id Spalte in messages und summaries
2026-07-24 21:43:48 +02:00

61 lines
2.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="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NeonChat</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'Segoe UI', system-ui, sans-serif;
background: #0a0a0f;
color: #e0e0e8;
min-height: 100vh;
}
.container { max-width: 1200px; margin: 0 auto; padding: 20px; }
h1 {
font-size: 2rem; font-weight: 700;
background: linear-gradient(135deg, #ff006e, #8338ec, #3a86ff);
-webkit-background-clip: text; -webkit-text-fill-color: transparent;
margin-bottom: 8px;
}
.subtitle { color: #6b6b80; font-size: 0.95rem; margin-bottom: 30px; }
.char-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; }
.char-card {
background: #15151f; border: 1px solid #252535; border-radius: 14px;
padding: 20px; cursor: pointer; transition: all 0.2s;
display: flex; gap: 14px; align-items: center;
}
.char-card:hover { border-color: #8338ec; transform: translateY(-2px); box-shadow: 0 4px 20px rgba(131,56,236,0.15); }
.char-avatar { font-size: 2rem; width: 52px; height: 52px; display: flex; align-items: center; justify-content: center; background: #1e1e2e; border-radius: 50%; }
.char-info h3 { font-size: 1.1rem; margin-bottom: 4px; }
.char-info p { font-size: 0.85rem; color: #6b6b80; line-height: 1.4; }
.new-card {
background: transparent; border: 2px dashed #353545; border-radius: 14px;
display: flex; align-items: center; justify-content: center;
min-height: 90px; cursor: pointer; color: #6b6b80; transition: all 0.2s;
}
.new-card:hover { border-color: #ff006e; color: #ff006e; }
</style>
</head>
<body>
<div class="container">
<h1>✦ NeonChat</h1>
<p class="subtitle">Lokaler RP-Chatbot · Wähle einen Charakter oder erstelle einen neuen</p>
<div class="char-grid">
{% for c in characters %}
<div class="char-card" onclick="location.href='/chat/{{ c.filename | urlencode }}'">
<div class="char-avatar">{{ c.avatar }}</div>
<div class="char-info">
<h3>{{ c.name }}</h3>
<p>{{ c.description[:80] }}{% if c.description|length > 80 %}...{% endif %}</p>
</div>
</div>
{% endfor %}
<div class="new-card" onclick="location.href='/create'">
<span style="font-size: 1.5rem;"> Neuer Charakter</span>
</div>
</div>
</div>
</body>
</html>