snnnunvr commited on
Commit
f1836e0
·
verified ·
1 Parent(s): 791681c

Build a production‑ready, mobile‑first Chat UI for SinapsisAI

Browse files

Design and implement a modern, responsive chat interface comparable to leading assistants (ChatGPT, DeepSeek, etc.), but tailored to SinapsisAI’s needs. Deliver clean, accessible, and performant HTML/CSS/JS (or a React component) with meticulous attention to micro‑interactions and mobile ergonomics.

Tech & Deliverables

Framework: Prefer vanilla HTML/CSS/JS in a single file for easy embedding OR a React + Tailwind component. If React: export a single default component named SinapsisAIChat and ensure it runs standalone.

Styling: Use CSS variables for theming, plus utility classes (Tailwind allowed). Include custom CSS for fine control (rounded corners, shadows, animations, safe‑area insets, etc.).

Assets: Top‑right logo source is a local file: sinapsislogo.PNG. Provide graceful fallback if not found.

No backend needed: Mock data + client‑side state.

Accessibility: WCAG 2.2 AA; full keyboard navigation; ARIA roles; screen‑reader labels.

Performance: Lightweight, no blocking fonts, lazy‑load heavy panels.

PWA‑ready: Add manifest tags, mobile meta, and offline states (mocked).

Global Behavior & Theming

Dark/Light/System themes with a toggle. Implement with :root CSS variables (colors, spacing, radii, elevation). Example vars: --bg, --bg-soft, --text, --muted, --primary, --accent, --border, --ring, --success, --warning, --danger, --shadow.

Typography: Inter/Roboto system stack. Sizes responsive: text-xs to text-xl.

Layout grid: Three areas

Sidebar (collapsible on mobile),

Chat area (messages),

Right utility drawer (optional, collapsible for tools/results).

Safe area: Respect iOS safe areas (env(safe-area-inset-*)).

Animations: Subtle transitions (200–250ms) for hover/focus/press, chat bubble reveal, drawer slide, tooltip fade.

Header (Top Bar)

Left: App name SinapsisAI (editable chat title inline when a chat is open; pencil icon to rename).

Center (md+): Conversation title + status dot (● Idle / ● Thinking / ● Streaming / ● Disconnected).

Right:

Logo button showing sinapsislogo.PNG (size 28–32px, circular mask). Fallback to initials SAI if missing.

Notifications bell.

Quick Settings gear (opens settings sheet).

Profile/Membership card entry (see below).

Sticky + translucent blur background on scroll.

Sidebar (Chats & Navigation)

Top section:

Search chats input with debounce + fuzzy highlight.

New Chat primary button (plus icon). On mobile, also show a floating action button (FAB) bottom‑right.

Chat list:

Each item: title, last message snippet, time, unread dot, pin star, overflow menu (Rename, Duplicate, Export, Delete).

Support multi‑select for bulk delete/export.

Sections: Today, Yesterday, Previous 7 days, Older.

Navigation group: Links to additional pages (route stubs): Playground, Datasets, Vector DB, Workflows/Agents, Billing, Settings, Audit Logs.

Collapsible; hidden by default on small screens with a hamburger.

Membership Card + Quick Menu (like ChatGPT popover)

Card in header or user menu: shows avatar, display name, plan (Free/Pro/Enterprise), usage (requests, token est., storage), next billing date.

Tap/Click opens a compact menu with:

Settings

Billing & Invoices

API Keys (masked view + copy)

Models & Add‑ons (model picker, add‑on toggles)

Data Controls (history toggle, export/import)

Keyboard Shortcuts

About / Version

Menu supports keyboard navigation; closes on outside click/Escape.

Chat Area (Messages)

Message list:

Bubble layout with timestamps, role badges (You / Assistant / Tool), and delivery states (Sending… / Sent / Failed with retry).

Support streaming assistant messages (typewriter effect) with a Stop button.

Citations and source chips for deep research; expandable cards showing title, site, snippet.

Tool call outputs as inline cards:

Deep Research: result list with filters (recency, domain) + citation chips.

Image Generation: grid of images with download, upscale, and copy prompt.

Code Exec / Sandbox: output console panel with copy + rerun.

Reactions (👍 👎 ⭐), Copy, Edit & Resend (user messages), Regenerate, Fork to new chat.

Attachment preview chips (image thumbnails, PDF icon, etc.) with remove.

System banners: offline, rate‑limit, model unavailable.

Empty state (new chat): helpful quick actions (Deep Research, Image Gen, Vision, Browse Web), sample prompts (TR+EN), and a drag‑and‑drop zone.

Composer (Input Bar)

Behavior: Enter sends; Shift+Enter inserts newline. On mobile, Enter sends by default.

Text area auto‑grows up to 6 lines; shows placeholder like “Ask anything…”.

Left of input: context chips/toggles (Deep Research, Vision, Image Gen, Code Interpreter, Browse Web). Each chip is selectable; show tooltip explaining effect.

Right of input: buttons:

Voice (mic): press to start/stop recording; animated waveform; show permission prompt messaging. Fallback text: “Voice not supported on this browser.”

Plus (+): opens an action sheet with: Attach File(s), Insert Image, Start Image Generation flow, Insert System Prompt, Set Temperature/Max Tokens, Insert Tool Context (e.g., URLs), Add Persona.

Send button (paper‑plane). Disabled when empty.

File attachments: accept images, PDFs, text files; show size/type validation and upload progress (mocked).

Right Utility Drawer (Optional)

Collapsible panel to show detailed research results, image generation history, execution logs, or conversation settings per thread (model, temperature, safety, system prompt). Opens when relevant chips are active.

Search (Global & In‑chat)

Sidebar search filters by title/content/date; highlight matches; supports Turkish diacritics.

In‑chat find (Cmd/Ctrl+F): highlights occurrences and scrolls.

Settings Sheet

General: language (TR/EN), theme (Light/Dark/System/High Contrast), enter‑to‑send toggle, show token/cost, compact mode.

Models & Add‑ons: default model, vision toggle, image gen provider, deep research parameters (time range, domains), web access toggle.

Privacy: history on/off, delete conversations, export/import (JSON, Markdown), data retention notes.

Shortcuts: list all hotkeys.

Keyboard Shortcuts (desktop)

Enter: send; Shift+Enter: newline

Cmd/Ctrl+K: focus Search chats

Cmd/Ctrl+N: New chat

Cmd/Ctrl+/: show shortcuts

Cmd/Ctrl+P: open command palette (optional)

Esc: close menus/drawers

Responsive Specs

Mobile (≤640px): single column; FAB for New Chat; bottom‑sheet for attachments and settings; sticky composer; larger tap targets (44px min).

Tablet (641–1024px): sidebar overlay, chat + optional drawer.

Desktop (≥1025px): 3‑pane layout (sidebar / chat / utility drawer).

Use CSS container queries or Tailwind breakpoints; ensure smooth transitions.

Visual Design Details

Cards and bubbles with rounded‑2xl, soft shadow (box-shadow using --shadow).

Muted surfaces for system/tool messages.

Readable max‑width for message text (~70ch).

Tooltips and toasts for feedback (copied, saved, error).

Loader: 3‑dot bounce; Thinking state with animated sparkles (subtle).

Data Model (mocked)

Conversation { id, title, createdAt, updatedAt, pinned, tags[], messages[] }

Message { id, role: 'user'|'assistant'|'tool'|'system', content, attachments[], status: 'sending'|'sent'|'failed', createdAt, citations[] }

Citation { title, url, source, snippet }

Attachment { id, name, type, size, previewUrl }

Settings { theme, language, enterToSend, showTokenCost, model, temperature }

Provide a small seed dataset so the UI looks rich on first load.

Export/Import

Export conversation as Markdown, JSON, or HTML.

Import JSON to restore chats (validate schema, show errors kindly).

Error & Empty States

Offline banner with retry.

Model unavailable → fallback suggestion.

Empty chat list → show New Chat CTA and sample prompts.

Security & Privacy (UI only)

Sanitize rendered Markdown (XSS safe list).

Never auto‑open downloads; show explicit Save buttons.

Redact API keys in UI (masked with copy button).

QA Checklist

Mobile first: test iOS Safari, Android Chrome.

Keyboard only navigation.

Screen reader basic pass (VoiceOver/NVDA).

Enter-to-send works; Shift+Enter creates newline.

Long messages wrap; code blocks scroll horizontally.

Attachments preview/remove flows.

Implementation Notes (if React)

Single exported component; internal state with hooks; no external store required.

CSS: Tailwind utilities + small <style> block using CSS variables.

Use semantic elements: <nav>, <aside>, <main>, <section>, <header>, <footer>.

Icons: Heroicons or Lucide; inline SVGs ok.

Acceptance Criteria (must‑haves)

Mobile‑first, responsive 3‑pane layout with collapsible sidebar and optional right drawer.

Header with app title, status, notifications, settings, and sinapsislogo.PNG button (top‑right).

Sidebar: chat search, new chat, pinned/unread indicators, sections by date, links to other pages.

Membership card + popover menu with settings/billing/api keys/models/data/shortcuts/about.

Chat list + message bubbles with streaming, citations, tool output cards.

Composer with Enter sends (Shift+Enter newline), voice mic, + action sheet, context chips.

Deep Research & Image Generation flows represented as inline cards or right drawer content.

Settings sheet (theme, language, model, privacy, shortcuts).

Export/Import, offline and error banners, toasts, and tooltips.

Clean CSS with variables and additional custom styling beyond utilities.

Deliver full HTML/CSS/JS (or a React component) that can run as‑is, with mock data populated and all interactions demonstrable client‑side.

Files changed (2) hide show
  1. README.md +7 -4
  2. index.html +315 -19
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Synapticchat Nexus
3
- emoji: 📚
4
  colorFrom: yellow
5
- colorTo: purple
 
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: SynapticChat Nexus 🧠
 
3
  colorFrom: yellow
4
+ colorTo: yellow
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://deepsite.hf.co).
index.html CHANGED
@@ -1,19 +1,315 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="h-full">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta name="theme-color" content="#6366f1">
7
+ <title>SinapsisAI Chat</title>
8
+ <link rel="manifest" href="/manifest.json">
9
+ <script src="https://cdn.tailwindcss.com"></script>
10
+ <script src="https://unpkg.com/feather-icons"></script>
11
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
12
+ <script>
13
+ tailwind.config = {
14
+ darkMode: 'class',
15
+ theme: {
16
+ extend: {
17
+ colors: {
18
+ primary: {
19
+ 50: '#f0f9ff',
20
+ 100: '#e0f2fe',
21
+ 200: '#bae6fd',
22
+ 300: '#7dd3fc',
23
+ 400: '#38bdf8',
24
+ 500: '#0ea5e9',
25
+ 600: '#0284c7',
26
+ 700: '#0369a1',
27
+ 800: '#075985',
28
+ 900: '#0c4a6e',
29
+ },
30
+ secondary: {
31
+ 50: '#f5f3ff',
32
+ 100: '#ede9fe',
33
+ 200: '#ddd6fe',
34
+ 300: '#c4b5fd',
35
+ 400: '#a78bfa',
36
+ 500: '#8b5cf6',
37
+ 600: '#7c3aed',
38
+ 700: '#6d28d9',
39
+ 800: '#5b21b6',
40
+ 900: '#4c1d95',
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ </script>
47
+ <style>
48
+ :root {
49
+ --bg: #ffffff;
50
+ --bg-soft: #f9fafb;
51
+ --text: #111827;
52
+ --muted: #6b7280;
53
+ --primary: #0ea5e9;
54
+ --accent: #8b5cf6;
55
+ --border: #e5e7eb;
56
+ --ring: #93c5fd;
57
+ --success: #10b981;
58
+ --warning: #f59e0b;
59
+ --danger: #ef4444;
60
+ --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
61
+ }
62
+ .dark {
63
+ --bg: #0f172a;
64
+ --bg-soft: #1e293b;
65
+ --text: #f8fafc;
66
+ --muted: #94a3b8;
67
+ --primary: #7dd3fc;
68
+ --accent: #a78bfa;
69
+ --border: #334155;
70
+ --ring: #1e40af;
71
+ --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.5), 0 1px 2px -1px rgb(0 0 0 / 0.5);
72
+ }
73
+ body {
74
+ background-color: var(--bg);
75
+ color: var(--text);
76
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
77
+ }
78
+ .chat-bubble-user {
79
+ background-color: var(--primary);
80
+ color: white;
81
+ border-radius: 1.25rem 1.25rem 0.25rem 1.25rem;
82
+ }
83
+ .chat-bubble-assistant {
84
+ background-color: var(--bg-soft);
85
+ color: var(--text);
86
+ border-radius: 1.25rem 1.25rem 1.25rem 0.25rem;
87
+ border: 1px solid var(--border);
88
+ }
89
+ .typewriter {
90
+ border-right: 2px solid var(--primary);
91
+ animation: blink 1s step-end infinite;
92
+ }
93
+ @keyframes blink {
94
+ from, to { border-color: transparent }
95
+ 50% { border-color: var(--primary) }
96
+ }
97
+ .safe-area-bottom {
98
+ padding-bottom: env(safe-area-inset-bottom);
99
+ }
100
+ .scrollbar-hide::-webkit-scrollbar {
101
+ display: none;
102
+ }
103
+ </style>
104
+ </head>
105
+ <body class="h-full flex flex-col dark:bg-gray-900 transition-colors duration-200">
106
+ <!-- Header -->
107
+ <header class="sticky top-0 z-10 bg-white/80 dark:bg-gray-900/80 backdrop-blur-md border-b border-gray-200 dark:border-gray-800 px-4 py-3 flex items-center justify-between">
108
+ <div class="flex items-center space-x-2">
109
+ <button id="sidebar-toggle" class="md:hidden text-gray-600 dark:text-gray-400">
110
+ <i data-feather="menu"></i>
111
+ </button>
112
+ <h1 class="text-lg font-semibold text-gray-900 dark:text-white">SinapsisAI</h1>
113
+ <div class="hidden md:flex items-center ml-4 space-x-1">
114
+ <span class="w-2 h-2 rounded-full bg-green-500 animate-pulse"></span>
115
+ <span class="text-sm text-gray-500 dark:text-gray-400">Connected</span>
116
+ </div>
117
+ </div>
118
+
119
+ <div class="flex items-center space-x-3">
120
+ <button class="p-2 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800">
121
+ <i data-feather="bell"></i>
122
+ </button>
123
+ <button class="p-2 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800">
124
+ <i data-feather="settings"></i>
125
+ </button>
126
+ <div class="relative">
127
+ <button id="user-menu-button" class="flex items-center space-x-2">
128
+ <div class="w-8 h-8 rounded-full bg-primary-500 flex items-center justify-center text-white font-medium">SA</div>
129
+ </button>
130
+ <div id="user-menu" class="hidden absolute right-0 mt-2 w-64 bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 z-20">
131
+ <div class="p-4 border-b border-gray-200 dark:border-gray-700">
132
+ <div class="flex items-center space-x-3">
133
+ <div class="w-10 h-10 rounded-full bg-primary-500 flex items-center justify-center text-white font-medium">SA</div>
134
+ <div>
135
+ <p class="font-medium">SinapsisAI Pro</p>
136
+ <p class="text-sm text-gray-500 dark:text-gray-400">50 requests left today</p>
137
+ </div>
138
+ </div>
139
+ </div>
140
+ <div class="p-2">
141
+ <a href="#" class="flex items-center px-3 py-2 text-sm rounded-md hover:bg-gray-100 dark:hover:bg-gray-700">
142
+ <i data-feather="user" class="w-4 h-4 mr-2"></i> Profile
143
+ </a>
144
+ <a href="#" class="flex items-center px-3 py-2 text-sm rounded-md hover:bg-gray-100 dark:hover:bg-gray-700">
145
+ <i data-feather="credit-card" class="w-4 h-4 mr-2"></i> Billing
146
+ </a>
147
+ <a href="#" class="flex items-center px-3 py-2 text-sm rounded-md hover:bg-gray-100 dark:hover:bg-gray-700">
148
+ <i data-feather="key" class="w-4 h-4 mr-2"></i> API Keys
149
+ </a>
150
+ <a href="#" class="flex items-center px-3 py-2 text-sm rounded-md hover:bg-gray-100 dark:hover:bg-gray-700">
151
+ <i data-feather="settings" class="w-4 h-4 mr-2"></i> Settings
152
+ </a>
153
+ <div class="border-t border-gray-200 dark:border-gray-700 my-1"></div>
154
+ <a href="#" class="flex items-center px-3 py-2 text-sm rounded-md hover:bg-gray-100 dark:hover:bg-gray-700">
155
+ <i data-feather="log-out" class="w-4 h-4 mr-2"></i> Sign out
156
+ </a>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </header>
162
+
163
+ <!-- Main Content -->
164
+ <div class="flex flex-1 overflow-hidden">
165
+ <!-- Sidebar -->
166
+ <aside id="sidebar" class="hidden md:block w-64 bg-white dark:bg-gray-900 border-r border-gray-200 dark:border-gray-800 flex-shrink-0 overflow-y-auto">
167
+ <div class="p-4">
168
+ <button class="w-full flex items-center justify-center space-x-2 bg-primary-500 hover:bg-primary-600 text-white px-4 py-2 rounded-lg transition-colors">
169
+ <i data-feather="plus" class="w-4 h-4"></i>
170
+ <span>New Chat</span>
171
+ </button>
172
+
173
+ <div class="mt-6">
174
+ <div class="relative">
175
+ <input type="text" placeholder="Search chats..." class="w-full pl-10 pr-4 py-2 bg-gray-100 dark:bg-gray-800 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-primary-500">
176
+ <i data-feather="search" class="absolute left-3 top-2.5 text-gray-400 w-4 h-4"></i>
177
+ </div>
178
+ </div>
179
+
180
+ <div class="mt-6">
181
+ <h3 class="text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider mb-2">Today</h3>
182
+ <div class="space-y-1">
183
+ <a href="#" class="flex items-center justify-between px-3 py-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 group">
184
+ <div class="flex-1 truncate">
185
+ <p class="text-sm font-medium truncate">AI Research Assistant</p>
186
+ <p class="text-xs text-gray-500 dark:text-gray-400 truncate">Can you summarize this paper...</p>
187
+ </div>
188
+ <span class="text-xs text-gray-400">12:45</span>
189
+ </a>
190
+ <a href="#" class="flex items-center justify-between px-3 py-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 group">
191
+ <div class="flex-1 truncate">
192
+ <p class="text-sm font-medium truncate">Code Debugging</p>
193
+ <p class="text-xs text-gray-500 dark:text-gray-400 truncate">Why is this React component...</p>
194
+ </div>
195
+ <span class="text-xs text-gray-400">10:30</span>
196
+ </a>
197
+ </div>
198
+ </div>
199
+
200
+ <div class="mt-6">
201
+ <h3 class="text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider mb-2">Yesterday</h3>
202
+ <div class="space-y-1">
203
+ <a href="#" class="flex items-center justify-between px-3 py-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 group">
204
+ <div class="flex-1 truncate">
205
+ <p class="text-sm font-medium truncate">Content Strategy</p>
206
+ <p class="text-xs text-gray-500 dark:text-gray-400 truncate">Ideas for blog posts about...</p>
207
+ </div>
208
+ <span class="text-xs text-gray-400">18:20</span>
209
+ </a>
210
+ </div>
211
+ </div>
212
+
213
+ <div class="mt-6">
214
+ <h3 class="text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider mb-2">Previous 7 Days</h3>
215
+ <div class="space-y-1">
216
+ <a href="#" class="flex items-center justify-between px-3 py-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 group">
217
+ <div class="flex-1 truncate">
218
+ <p class="text-sm font-medium truncate">Marketing Copy</p>
219
+ <p class="text-xs text-gray-500 dark:text-gray-400 truncate">Write a tagline for our new...</p>
220
+ </div>
221
+ <span class="text-xs text-gray-400">Tue</span>
222
+ </a>
223
+ </div>
224
+ </div>
225
+
226
+ <div class="mt-8 pt-4 border-t border-gray-200 dark:border-gray-800">
227
+ <a href="#" class="flex items-center px-3 py-2 text-sm rounded-md hover:bg-gray-100 dark:hover:bg-gray-700">
228
+ <i data-feather="play" class="w-4 h-4 mr-2"></i> Playground
229
+ </a>
230
+ <a href="#" class="flex items-center px-3 py-2 text-sm rounded-md hover:bg-gray-100 dark:hover:bg-gray-700">
231
+ <i data-feather="database" class="w-4 h-4 mr-2"></i> Datasets
232
+ </a>
233
+ <a href="#" class="flex items-center px-3 py-2 text-sm rounded-md hover:bg-gray-100 dark:hover:bg-gray-700">
234
+ <i data-feather="box" class="w-4 h-4 mr-2"></i> Vector DB
235
+ </a>
236
+ <a href="#" class="flex items-center px-3 py-2 text-sm rounded-md hover:bg-gray-100 dark:hover:bg-gray-700">
237
+ <i data-feather="zap" class="w-4 h-4 mr-2"></i> Workflows
238
+ </a>
239
+ </div>
240
+ </div>
241
+ </aside>
242
+
243
+ <!-- Chat Area -->
244
+ <main class="flex-1 flex flex-col overflow-hidden bg-gray-50 dark:bg-gray-950">
245
+ <!-- Messages -->
246
+ <div id="messages" class="flex-1 overflow-y-auto p-4 space-y-6 scrollbar-hide">
247
+ <div class="flex justify-start">
248
+ <div class="max-w-[85%] md:max-w-[75%] lg:max-w-[65%]">
249
+ <div class="chat-bubble-assistant p-4">
250
+ <div class="flex items-center space-x-2 mb-2">
251
+ <div class="w-6 h-6 rounded-full bg-secondary-500 flex items-center justify-center text-white text-xs font-medium">AI</div>
252
+ <span class="text-xs font-medium">SinapsisAI</span>
253
+ </div>
254
+ <p class="text-sm">Hello! I'm SinapsisAI, your intelligent assistant. How can I help you today?</p>
255
+ <div class="flex items-center justify-end space-x-2 mt-3 text-xs text-gray-500 dark:text-gray-400">
256
+ <span>12:45 PM</span>
257
+ <button class="hover:text-primary-500">
258
+ <i data-feather="copy" class="w-3 h-3"></i>
259
+ </button>
260
+ </div>
261
+ </div>
262
+ </div>
263
+ </div>
264
+
265
+ <div class="flex justify-end">
266
+ <div class="max-w-[85%] md:max-w-[75%] lg:max-w-[65%]">
267
+ <div class="chat-bubble-user p-4">
268
+ <div class="flex items-center space-x-2 mb-2">
269
+ <div class="w-6 h-6 rounded-full bg-primary-500 flex items-center justify-center text-white text-xs font-medium">Y</div>
270
+ <span class="text-xs font-medium text-white/90">You</span>
271
+ </div>
272
+ <p class="text-sm text-white">Can you explain how neural networks work in simple terms?</p>
273
+ <div class="flex items-center justify-end space-x-2 mt-3 text-xs text-white/70">
274
+ <span>12:46 PM</span>
275
+ <button class="hover:text-white">
276
+ <i data-feather="edit" class="w-3 h-3"></i>
277
+ </button>
278
+ </div>
279
+ </div>
280
+ </div>
281
+ </div>
282
+
283
+ <div class="flex justify-start">
284
+ <div class="max-w-[85%] md:max-w-[75%] lg:max-w-[65%]">
285
+ <div class="chat-bubble-assistant p-4">
286
+ <div class="flex items-center space-x-2 mb-2">
287
+ <div class="w-6 h-6 rounded-full bg-secondary-500 flex items-center justify-center text-white text-xs font-medium">AI</div>
288
+ <span class="text-xs font-medium">SinapsisAI</span>
289
+ </div>
290
+ <p class="text-sm">Sure! Think of a neural network like a team of workers in a factory:</p>
291
+ <ol class="text-sm list-decimal list-inside space-y-1 mt-2 ml-2">
292
+ <li>Each worker (neuron) specializes in one small task</li>
293
+ <li>They pass their work to the next station (layer)</li>
294
+ <li>The final product gets better as the team learns from mistakes</li>
295
+ </ol>
296
+ <div class="mt-3 p-3 bg-gray-100 dark:bg-gray-800 rounded-lg">
297
+ <div class="flex items-center space-x-2 text-xs text-gray-600 dark:text-gray-300">
298
+ <i data-feather="bookmark" class="w-3 h-3"></i>
299
+ <span>Source: Deep Learning Simplified (2023)</span>
300
+ </div>
301
+ </div>
302
+ <div class="flex items-center justify-end space-x-2 mt-3 text-xs text-gray-500 dark:text-gray-400">
303
+ <span>12:47 PM</span>
304
+ <button class="hover:text-primary-500">
305
+ <i data-feather="copy" class="w-3 h-3"></i>
306
+ </button>
307
+ </div>
308
+ </div>
309
+ </div>
310
+ </div>
311
+
312
+ <div class="flex justify-start">
313
+ <div class
314
+ </body>
315
+ </html>