neurolake-plus-plus / index.html
LukasBe's picture
Awesome! Make it even more cooler looking! - Follow Up Deployment
6c6ddef verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NeuroLake++ Cognitive Spec</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/examples/js/controls/OrbitControls.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&family=Share+Tech+Mono&display=swap" rel="stylesheet">
<style>
body {
font-family: 'Share Tech Mono', monospace;
}
h1, h2, h3, h4, h5, h6 {
font-family: 'Orbitron', sans-serif;
}
.gradient-bg {
background: linear-gradient(135deg, #0f2027 0%, #203a43 50%, #2c5364 100%);
}
.matrix-text {
color: #00ff41;
text-shadow: 0 0 5px #00ff41;
}
.terminal-border {
border: 1px solid #00ff41;
box-shadow: 0 0 10px #00ff41;
}
.code-block {
background-color: rgba(0, 20, 10, 0.7);
border-radius: 0.5rem;
position: relative;
border: 1px solid #00ff41;
box-shadow: 0 0 15px rgba(0, 255, 65, 0.3);
}
.code-header {
background-color: #0f172a;
border-top-left-radius: 0.5rem;
border-top-right-radius: 0.5rem;
padding: 0.5rem 1rem;
display: flex;
align-items: center;
}
.code-dots {
display: flex;
gap: 0.5rem;
}
.code-dot {
width: 12px;
height: 12px;
border-radius: 50%;
}
.code-dot-red {
background-color: #ef4444;
}
.code-dot-yellow {
background-color: #f59e0b;
}
.code-dot-green {
background-color: #10b981;
}
.code-filename {
margin-left: 1rem;
color: #94a3b8;
font-family: monospace;
}
.code-content {
padding: 1rem;
overflow-x: auto;
}
pre {
margin: 0;
font-family: 'Courier New', Courier, monospace;
color: #e2e8f0;
line-height: 1.5;
}
.json-key {
color: #00ff41;
}
.json-value {
color: #ffffff;
}
.json-string {
color: #00ff99;
}
.json-number {
color: #00ccff;
}
.json-boolean {
color: #ff00ff;
}
.json-null {
color: #ff6600;
}
.feature-card:hover {
transform: translateY(-5px);
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
animation: fadeIn 0.3s ease-in-out;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.nav-tab {
transition: all 0.2s ease;
}
.nav-tab:hover:not(.active) {
background-color: rgba(255, 255, 255, 0.1);
}
</style>
</head>
<body class="bg-slate-900 text-slate-100 min-h-screen">
<div class="gradient-bg w-full py-16 px-4">
<div class="max-w-6xl mx-auto">
<div class="flex items-center justify-center mb-6">
<div class="bg-white/20 p-3 rounded-full">
<i class="fas fa-brain text-white text-3xl"></i>
</div>
</div>
<h1 class="text-4xl md:text-5xl font-bold text-center matrix-text mb-4">NEUROLAKE++</h1>
<p class="text-xl text-center matrix-text max-w-3xl mx-auto">
The cognitive foundation for agent memory, multimodal RAG, and long-term adaptive knowledge
</p>
</div>
</div>
<div class="max-w-6xl mx-auto px-4 py-12">
<div class="bg-black/70 rounded-xl terminal-border overflow-hidden mb-12 backdrop-blur-sm">
<div class="p-6 md:p-8">
<h2 class="text-2xl font-bold mb-4 text-white">🧠 Cognitive Spec – Layer by Layer</h2>
<p class="text-slate-300 mb-6">
NeuroLake++ is not just a file format, but a foundation for cognitive tooling, RAG agents, and long-term adaptive memory.
</p>
<div class="flex flex-wrap border-b border-slate-700 mb-6">
<button class="nav-tab px-4 py-2 font-medium text-sm rounded-t-lg mr-1 active" data-tab="manifest">
<i class="fas fa-file-alt mr-2"></i> Manifest
</button>
<button class="nav-tab px-4 py-2 font-medium text-sm rounded-t-lg mr-1" data-tab="chunk">
<i class="fas fa-cube mr-2"></i> Chunk
</button>
<button class="nav-tab px-4 py-2 font-medium text-sm rounded-t-lg mr-1" data-tab="memory">
<i class="fas fa-memory mr-2"></i> Memory
</button>
<button class="nav-tab px-4 py-2 font-medium text-sm rounded-t-lg" data-tab="graph">
<i class="fas fa-project-diagram mr-2"></i> Graph
</button>
</div>
<div id="manifest" class="tab-content active">
<div class="mb-4">
<h3 class="text-lg font-semibold text-white mb-2">📜 Global Manifest File (<code class="bg-slate-700 px-2 py-1 rounded">manifest.json</code>)</h3>
<p class="text-slate-300 mb-4">
Describes all contents in a "NeuroLake Object Group" (e.g., an S3 prefix or ZIP archive), defines modality coverage, versioning, and affordances.
</p>
</div>
<div class="code-block">
<div class="code-header">
<div class="code-dots">
<div class="code-dot code-dot-red"></div>
<div class="code-dot code-dot-yellow"></div>
<div class="code-dot code-dot-green"></div>
</div>
<div class="code-filename">manifest.json</div>
</div>
<div class="code-content">
<pre><code>{
<span class="json-key">"neuro_lake_version"</span>: <span class="json-string">"0.4.1"</span>,
<span class="json-key">"description"</span>: <span class="json-string">"Memory & knowledge corpus for legal assistant GPT agent"</span>,
<span class="json-key">"modality_map"</span>: {
<span class="json-key">"text"</span>: <span class="json-boolean">true</span>,
<span class="json-key">"image"</span>: <span class="json-boolean">true</span>,
<span class="json-key">"pdf"</span>: <span class="json-boolean">true</span>,
<span class="json-key">"audio"</span>: <span class="json-boolean">false</span>,
<span class="json-key">"embedding"</span>: <span class="json-boolean">true</span>
},
<span class="json-key">"index_types"</span>: [
<span class="json-string">"dense"</span>,
<span class="json-string">"sparse"</span>,
<span class="json-string">"graph"</span>
],
<span class="json-key">"agent_hooks"</span>: [
<span class="json-string">"summarize"</span>,
<span class="json-string">"retrieve"</span>,
<span class="json-string">"chain_reasoning"</span>
],
<span class="json-key">"chunks"</span>: [
<span class="json-string">"chunk_00001.json"</span>,
<span class="json-string">"chunk_00002.json"</span>,
<span class="json-string">...</span>
]
}</code></pre>
</div>
</div>
</div>
<div id="chunk" class="tab-content">
<div class="mb-4">
<h3 class="text-lg font-semibold text-white mb-2">🔹 Chunk File (<code class="bg-slate-700 px-2 py-1 rounded">chunk_00001.json</code>)</h3>
<p class="text-slate-300 mb-4">
Represents a unit of retrieval. Can be a memory, a doc fragment, a multimodal pair, etc.
</p>
</div>
<div class="code-block">
<div class="code-header">
<div class="code-dots">
<div class="code-dot code-dot-red"></div>
<div class="code-dot code-dot-yellow"></div>
<div class="code-dot code-dot-green"></div>
</div>
<div class="code-filename">chunk_00001.json</div>
</div>
<div class="code-content">
<pre><code>{
<span class="json-key">"chunk_id"</span>: <span class="json-string">"00001"</span>,
<span class="json-key">"type"</span>: <span class="json-string">"doc_fragment"</span>,
<span class="json-key">"modality"</span>: [
<span class="json-string">"text"</span>,
<span class="json-string">"embedding"</span>
],
<span class="json-key">"content"</span>: <span class="json-string">"The GDPR stipulates that personal data must be processed lawfully..."</span>,
<span class="json-key">"source"</span>: {
<span class="json-key">"origin"</span>: <span class="json-string">"GDPR_FullText_EN.pdf"</span>,
<span class="json-key">"section"</span>: <span class="json-string">"Article 5 - Principles"</span>
},
<span class="json-key">"timestamp"</span>: <span class="json-string">"2023-08-22T11:45:12Z"</span>,
<span class="json-key">"tags"</span>: [
<span class="json-string">"GDPR"</span>,
<span class="json-string">"data processing"</span>,
<span class="json-string">"privacy"</span>
],
<span class="json-key">"embedding"</span>: [
<span class="json-number">0.14</span>,
<span class="json-number">0.91</span>,
<span class="json-number">-0.55</span>,
<span class="json-string">...</span>
],
<span class="json-key">"affordances"</span>: [
<span class="json-string">"summarize"</span>,
<span class="json-string">"cite"</span>,
<span class="json-string">"retrieve"</span>
],
<span class="json-key">"version_info"</span>: {
<span class="json-key">"chunk_hash"</span>: <span class="json-string">"sha256:abcd123..."</span>,
<span class="json-key">"model_embedding"</span>: <span class="json-string">"OpenAI/text-embedding-3-large@2024-01"</span>,
<span class="json-key">"format"</span>: <span class="json-string">"utf8/text"</span>
}
}</code></pre>
</div>
</div>
</div>
<div id="memory" class="tab-content">
<div class="mb-4">
<h3 class="text-lg font-semibold text-white mb-2">🧩 Episodic Memory Block (<code class="bg-slate-700 px-2 py-1 rounded">chunk_00192.json</code>)</h3>
<p class="text-slate-300 mb-4">
Useful for personal assistants, dev copilots, design bots...
</p>
</div>
<div class="code-block">
<div class="code-header">
<div class="code-dots">
<div class="code-dot code-dot-red"></div>
<div class="code-dot code-dot-yellow"></div>
<div class="code-dot code-dot-green"></div>
</div>
<div class="code-filename">chunk_00192.json</div>
</div>
<div class="code-content">
<pre><code>{
<span class="json-key">"chunk_id"</span>: <span class="json-string">"00192"</span>,
<span class="json-key">"type"</span>: <span class="json-string">"episodic_memory"</span>,
<span class="json-key">"agent"</span>: <span class="json-string">"gpt-legal-aide"</span>,
<span class="json-key">"user_context"</span>: {
<span class="json-key">"persona"</span>: <span class="json-string">"in-house legal advisor"</span>,
<span class="json-key">"session_intent"</span>: <span class="json-string">"understand data retention policies"</span>
},
<span class="json-key">"summary"</span>: <span class="json-string">"User asked about retention periods for biometric data in smart meters."</span>,
<span class="json-key">"reflection"</span>: <span class="json-string">"Follow up on DPA guidelines in Czech Republic."</span>,
<span class="json-key">"embedding"</span>: [
<span class="json-string">...</span>
],
<span class="json-key">"related_chunks"</span>: [
<span class="json-string">"00001"</span>,
<span class="json-string">"00017"</span>
],
<span class="json-key">"created"</span>: <span class="json-string">"2025-06-14T20:14:22Z"</span>
}</code></pre>
</div>
</div>
</div>
<div id="graph" class="tab-content">
<div class="mb-4">
<h3 class="text-lg font-semibold text-white mb-2">🌐 Graph Index File (<code class="bg-slate-700 px-2 py-1 rounded">graph_index.json</code>)</h3>
<p class="text-slate-300 mb-4">
Describes entity-entity, chunk-chunk relationships across modalities.
</p>
</div>
<div class="code-block">
<div class="code-header">
<div class="code-dots">
<div class="code-dot code-dot-red"></div>
<div class="code-dot code-dot-yellow"></div>
<div class="code-dot code-dot-green"></div>
</div>
<div class="code-filename">graph_index.json</div>
</div>
<div class="code-content">
<pre><code>{
<span class="json-key">"nodes"</span>: [
{
<span class="json-key">"id"</span>: <span class="json-string">"GDPR"</span>,
<span class="json-key">"type"</span>: <span class="json-string">"legal_concept"</span>
},
{
<span class="json-key">"id"</span>: <span class="json-string">"chunk_00001"</span>,
<span class="json-key">"type"</span>: <span class="json-string">"text"</span>
},
{
<span class="json-key">"id"</span>: <span class="json-string">"chunk_00192"</span>,
<span class="json-key">"type"</span>: <span class="json-string">"memory"</span>
},
{
<span class="json-key">"id"</span>: <span class="json-string">"UserLukas"</span>,
<span class="json-key">"type"</span>: <span class="json-string">"user"</span>
}
],
<span class="json-key">"edges"</span>: [
{
<span class="json-key">"from"</span>: <span class="json-string">"chunk_00001"</span>,
<span class="json-key">"to"</span>: <span class="json-string">"GDPR"</span>,
<span class="json-key">"rel"</span>: <span class="json-string">"mentions"</span>
},
{
<span class="json-key">"from"</span>: <span class="json-string">"chunk_00192"</span>,
<span class="json-key">"to"</span>: <span class="json-string">"chunk_00001"</span>,
<span class="json-key">"rel"</span>: <span class="json-string">"references"</span>
},
{
<span class="json-key">"from"</span>: <span class="json-string">"UserLukas"</span>,
<span class="json-key">"to"</span>: <span class="json-string">"chunk_00192"</span>,
<span class="json-key">"rel"</span>: <span class="json-string">"authored"</span>
}
]
}</code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="bg-slate-800 rounded-xl shadow-xl overflow-hidden mb-12">
<div class="p-6 md:p-8">
<h2 class="text-2xl font-bold mb-6 text-white">🔧 Planned Tooling</h2>
<p class="text-slate-300 mb-6">
We can prototype this using:
</p>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
<div class="bg-slate-700/50 p-4 rounded-lg border border-slate-700">
<div class="flex items-center mb-3">
<div class="bg-blue-500/20 p-2 rounded-full mr-3">
<i class="fas fa-database text-blue-400"></i>
</div>
<h3 class="font-semibold">DuckDB</h3>
</div>
<p class="text-sm text-slate-300">
Locally index & query JSONL files as a pseudo-RAG engine
</p>
</div>
<div class="bg-slate-700/50 p-4 rounded-lg border border-slate-700">
<div class="flex items-center mb-3">
<div class="bg-purple-500/20 p-2 rounded-full mr-3">
<i class="fas fa-folder-open text-purple-400"></i>
</div>
<h3 class="font-semibold">S3 Storage</h3>
</div>
<p class="text-sm text-slate-300">
Folder layout for deployable storage with versioning
</p>
</div>
<div class="bg-slate-700/50 p-4 rounded-lg border border-slate-700">
<div class="flex items-center mb-3">
<div class="bg-green-500/20 p-2 rounded-full mr-3">
<i class="fas fa-robot text-green-400"></i>
</div>
<h3 class="font-semibold">Embedding Models</h3>
</div>
<p class="text-sm text-slate-300">
Local OpenAI-compatible embedding + mini-retriever (FAISS)
</p>
</div>
<div class="bg-slate-700/50 p-4 rounded-lg border border-slate-700">
<div class="flex items-center mb-3">
<div class="bg-yellow-500/20 p-2 rounded-full mr-3">
<i class="fas fa-window-maximize text-yellow-400"></i>
</div>
<h3 class="font-semibold">Browser WASM</h3>
</div>
<p class="text-sm text-slate-300">
Memory retrieval with WASM + embedding hashing (LlamaIndex)
</p>
</div>
</div>
</div>
</div>
<div class="bg-slate-800 rounded-xl shadow-xl overflow-hidden mb-12">
<div class="p-6 md:p-8">
<h2 class="text-2xl font-bold mb-6 text-white">🔥 What This Enables</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div class="feature-card bg-slate-700/50 p-5 rounded-lg border border-slate-700 transition-all duration-300 hover:border-blue-500">
<div class="flex items-start mb-3">
<div class="bg-blue-500/20 p-2 rounded-full mr-3">
<i class="fas fa-sliders-h text-blue-400"></i>
</div>
<div>
<h3 class="font-semibold text-white">Personalized, evolving memory</h3>
<p class="text-sm text-slate-300 mt-1">
Agents that learn and remember across sessions
</p>
</div>
</div>
</div>
<div class="feature-card bg-slate-700/50 p-5 rounded-lg border border-slate-700 transition-all duration-300 hover:border-purple-500">
<div class="flex items-start mb-3">
<div class="bg-purple-500/20 p-2 rounded-full mr-3">
<i class="fas fa-images text-purple-400"></i>
</div>
<div>
<h3 class="font-semibold text-white">Multimodal memory-retrieval</h3>
<p class="text-sm text-slate-300 mt-1">
GPTs that see, cite, and recall across formats
</p>
</div>
</div>
</div>
<div class="feature-card bg-slate-700/50 p-5 rounded-lg border border-slate-700 transition-all duration-300 hover:border-green-500">
<div class="flex items-start mb-3">
<div class="bg-green-500/20 p-2 rounded-full mr-3">
<i class="fas fa-link text-green-400"></i>
</div>
<div>
<h3 class="font-semibold text-white">Graph-enhanced RAG</h3>
<p class="text-sm text-slate-300 mt-1">
Enables reasoning, tool-use, and disambiguation
</p>
</div>
</div>
</div>
<div class="feature-card bg-slate-700/50 p-5 rounded-lg border border-slate-700 transition-all duration-300 hover:border-yellow-500">
<div class="flex items-start mb-3">
<div class="bg-yellow-500/20 p-2 rounded-full mr-3">
<i class="fas fa-history text-yellow-400"></i>
</div>
<div>
<h3 class="font-semibold text-white">Time travel / version audit</h3>
<p class="text-sm text-slate-300 mt-1">
Trace how knowledge or memory evolved
</p>
</div>
</div>
</div>
<div class="feature-card bg-slate-700/50 p-5 rounded-lg border border-slate-700 transition-all duration-300 hover:border-red-500">
<div class="flex items-start mb-3">
<div class="bg-red-500/20 p-2 rounded-full mr-3">
<i class="fas fa-plug text-red-400"></i>
</div>
<div>
<h3 class="font-semibold text-white">Plug-and-play RAG agents</h3>
<p class="text-sm text-slate-300 mt-1">
Universal context sources, future-ready APIs
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="bg-slate-800 rounded-xl shadow-xl overflow-hidden">
<div class="p-6 md:p-8">
<h2 class="text-2xl font-bold mb-6 text-white">🎯 Next Steps</h2>
<p class="text-slate-300 mb-6">
Here are a few possible next steps to take NeuroLake++ forward:
</p>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div class="bg-gradient-to-br from-blue-900/50 to-blue-800/50 p-5 rounded-lg border border-blue-800/50">
<div class="flex items-start">
<div class="bg-blue-500/20 p-3 rounded-full mr-4">
<i class="fas fa-laptop-code text-blue-400 text-xl"></i>
</div>
<div>
<h3 class="font-semibold text-white text-lg mb-2">Local PoC</h3>
<p class="text-sm text-blue-100 mb-3">
DuckDB + NeuroLake++-style JSON index → basic RAG prototype
</p>
<button class="text-xs bg-blue-600 hover:bg-blue-700 text-white px-3 py-1 rounded-full transition-colors">
Prototype
</button>
</div>
</div>
</div>
<div class="bg-gradient-to-br from-purple-900/50 to-purple-800/50 p-5 rounded-lg border border-purple-800/50">
<div class="flex items-start">
<div class="bg-purple-500/20 p-3 rounded-full mr-4">
<i class="fas fa-memory text-purple-400 text-xl"></i>
</div>
<div>
<h3 class="font-semibold text-white text-lg mb-2">Memory Builder</h3>
<p class="text-sm text-purple-100 mb-3">
A tool to create episodic memory blocks from user sessions
</p>
<button class="text-xs bg-purple-600 hover:bg-purple-700 text-white px-3 py-1 rounded-full transition-colors">
Design
</button>
</div>
</div>
</div>
<div class="bg-gradient-to-br from-green-900/50 to-green-800/50 p-5 rounded-lg border border-green-800/50">
<div class="flex items-start">
<div class="bg-green-500/20 p-3 rounded-full mr-4">
<i class="fas fa-server text-green-400 text-xl"></i>
</div>
<div>
<h3 class="font-semibold text-white text-lg mb-2">S3 Storage Layout</h3>
<p class="text-sm text-green-100 mb-3">
Full design of how NeuroLake++ would live, grow, and update in S3
</p>
<button class="text-xs bg-green-600 hover:bg-green-700 text-white px-3 py-1 rounded-full transition-colors">
Architect
</button>
</div>
</div>
</div>
<div class="bg-gradient-to-br from-yellow-900/50 to-yellow-800/50 p-5 rounded-lg border border-yellow-800/50">
<div class="flex items-start">
<div class="bg-yellow-500/20 p-3 rounded-full mr-4">
<i class="fas fa-robot text-yellow-400 text-xl"></i>
</div>
<div>
<h3 class="font-semibold text-white text-lg mb-2">Agent SDK</h3>
<p class="text-sm text-yellow-100 mb-3">
Design function signatures for agents to remember(), reflect(), and query_memory()
</p>
<button class="text-xs bg-yellow-600 hover:bg-yellow-700 text-white px-3 py-1 rounded-full transition-colors">
Develop
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="bg-slate-800/50 py-8 px-4 border-t border-slate-700/50">
<div class="max-w-6xl mx-auto">
<div class="flex flex-col md:flex-row justify-between items-center">
<div class="mb-4 md:mb-0">
<div class="flex items-center">
<div class="bg-white/20 p-2 rounded-full mr-3">
<i class="fas fa-brain text-white"></i>
</div>
<span class="font-bold text-white">NeuroLake++</span>
</div>
<p class="text-sm text-slate-400 mt-2">
The cognitive foundation for agent memory
</p>
</div>
<div class="flex space-x-4">
<a href="#" class="text-slate-400 hover:text-white transition-colors">
<i class="fab fa-github text-lg"></i>
</a>
<a href="#" class="text-slate-400 hover:text-white transition-colors">
<i class="fab fa-twitter text-lg"></i>
</a>
<a href="#" class="text-slate-400 hover:text-white transition-colors">
<i class="fab fa-discord text-lg"></i>
</a>
</div>
</div>
<div class="mt-8 text-center text-sm text-slate-500">
© 2024 NeuroLake++ Project. All specifications are open for discussion and contribution.
</div>
</div>
</footer>
<div id="threejs-container" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1;"></div>
<script>
// Three.js Matrix-like background
const container = document.getElementById('threejs-container');
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
container.appendChild(renderer.domElement);
// Create grid
const gridSize = 30;
const gridDivisions = 30;
const gridHelper = new THREE.GridHelper(gridSize, gridDivisions, 0x00ff41, 0x00aa33);
gridHelper.position.y = -5;
scene.add(gridHelper);
// Add floating particles
const particles = new THREE.BufferGeometry();
const particleCount = 1000;
const posArray = new Float32Array(particleCount * 3);
for(let i = 0; i < particleCount * 3; i++) {
posArray[i] = (Math.random() - 0.5) * 20;
}
particles.setAttribute('position', new THREE.BufferAttribute(posArray, 3));
const particleMaterial = new THREE.PointsMaterial({
size: 0.1,
color: 0x00ff41,
transparent: true,
opacity: 0.8
});
const particleSystem = new THREE.Points(particles, particleMaterial);
scene.add(particleSystem);
camera.position.z = 10;
function animate() {
requestAnimationFrame(animate);
particleSystem.rotation.y += 0.001;
renderer.render(scene, camera);
}
animate();
// Handle window resize
window.addEventListener('resize', () => {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
});
// Tab switching functionality
document.querySelectorAll('.nav-tab').forEach(tab => {
tab.addEventListener('click', () => {
// Remove active class from all tabs and content
document.querySelectorAll('.nav-tab').forEach(t => t.classList.remove('active'));
document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));
// Add active class to clicked tab and corresponding content
tab.classList.add('active');
const tabId = tab.getAttribute('data-tab');
document.getElementById(tabId).classList.add('active');
});
});
// Add animation to feature cards on hover
document.querySelectorAll('.feature-card').forEach(card => {
card.addEventListener('mouseenter', () => {
card.style.transform = 'translateY(-5px)';
card.style.boxShadow = '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)';
});
card.addEventListener('mouseleave', () => {
card.style.transform = '';
card.style.boxShadow = '';
});
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://deepsite.hf.co/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://deepsite.hf.co" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://deepsite.hf.co?remix=LukasBe/neurolake-plus-plus" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>