Eigenes Chat-Interface mit SSE-Streaming gegen das hinterlegte Ollama-Modell, gegroundet in den Bewerbungs-/E-Mail-/Termindaten des Nutzers. - lib/chat.js: streamChat (Ollama stream:true, NDJSON-Token) + buildContextPrompt - chat_threads/chat_messages Tabellen (CASCADE, Index) - Routen: GET /chat, Thread-CRUD, POST /messages (SSE, AbortController) - views/chat.ejs + public/js/chat.js + Floating-Button im Footer - hasApiKey-Gating (503 ohne OLLAMA_API_KEY) Co-Authored-By: Claude <noreply@anthropic.com>
19 lines
946 B
Plaintext
19 lines
946 B
Plaintext
<footer class="bg-gray-100 dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 mt-12 py-6">
|
|
<div class="container mx-auto px-4 text-center">
|
|
<p class="text-gray-600 dark:text-gray-400 text-sm">
|
|
Bewerbungssystem |
|
|
© hackner.dev <span id="currentYear"><%= new Date().getFullYear() %></span>
|
|
</p>
|
|
</div>
|
|
</footer>
|
|
|
|
<!-- Floating button: open the KI chat assistant -->
|
|
<a href="/chat"
|
|
class="fixed bottom-5 right-5 z-40 flex items-center gap-2 rounded-full bg-blue-600 hover:bg-blue-700 text-white shadow-lg px-4 py-3 text-sm font-medium transition-colors"
|
|
title="KI-Bewerbungs-Assistent öffnen">
|
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 10h8M8 14h5m4 7a8 8 0 100-16 8 8 0 000 16z"></path>
|
|
</svg>
|
|
<span class="hidden sm:inline">KI-Chat</span>
|
|
</a>
|