From a09563ec628f98dc8d30df747e7ee37216fc281a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 1 Jul 2025 15:17:50 +0100 Subject: [PATCH] Enhance VibeTunnel web interface with modern visual design - Implement modern color scheme with cyan/teal primary colors - Redesign sidebar with card-based sessions and enhanced status indicators - Create unified header design with gradient backgrounds - Add JetBrains Mono font and improve typography throughout - Implement smooth micro-interactions and animations - Enhance terminal area with better focus states and loading overlays - Update all buttons and inputs with consistent hover/focus effects --- web/src/client/components/session-card.ts | 6 + web/src/client/components/session-list.ts | 72 +++--- web/src/client/components/session-view.ts | 25 +- .../components/session-view/session-header.ts | 33 ++- web/src/client/styles.css | 219 +++++++++++++++--- web/tailwind.config.js | 116 ++++++++-- 6 files changed, 360 insertions(+), 111 deletions(-) diff --git a/web/src/client/components/session-card.ts b/web/src/client/components/session-card.ts index bf529488..9b7846fe 100644 --- a/web/src/client/components/session-card.ts +++ b/web/src/client/components/session-card.ts @@ -365,6 +365,9 @@ export class SessionCard extends LitElement { } private getStatusColor(): string { + if (this.killing) { + return 'text-status-error'; + } if (this.session.active === false) { return 'text-dark-text-muted'; } @@ -372,6 +375,9 @@ export class SessionCard extends LitElement { } private getStatusDotColor(): string { + if (this.killing) { + return 'bg-status-error animate-pulse'; + } if (this.session.active === false) { return 'bg-dark-text-muted'; } diff --git a/web/src/client/components/session-list.ts b/web/src/client/components/session-list.ts index ba3a9f4a..e1351ef7 100644 --- a/web/src/client/components/session-list.ts +++ b/web/src/client/components/session-list.ts @@ -237,45 +237,57 @@ export class SessionList extends LitElement { ${ this.compactMode ? html` - +
this.handleSessionSelect({ detail: session } as CustomEvent)} > - -
+ +
+
+ + ${ + session.status === 'running' && session.activityStatus?.isActive + ? html`
` + : '' + } +
- -
+ +
{ e.stopPropagation(); // Kill the session diff --git a/web/src/client/components/session-view.ts b/web/src/client/components/session-view.ts index adc1eeea..334bce2f 100644 --- a/web/src/client/components/session-view.ts +++ b/web/src/client/components/session-view.ts @@ -1064,30 +1064,30 @@ export class SessionView extends LitElement { }} > - +
${ this.loadingAnimationManager.isLoading() ? html` - +
-
${this.loadingAnimationManager.getLoadingText()}
+
${this.loadingAnimationManager.getLoadingText()}
Connecting to session...
` : '' } - + @@ -1114,9 +1114,12 @@ export class SessionView extends LitElement { class="fixed inset-0 flex items-center justify-center pointer-events-none z-[25]" >
- SESSION EXITED + + + SESSION EXITED +
` diff --git a/web/src/client/components/session-view/session-header.ts b/web/src/client/components/session-view/session-header.ts index f87b588f..722a2a1c 100644 --- a/web/src/client/components/session-view/session-header.ts +++ b/web/src/client/components/session-view/session-header.ts @@ -75,10 +75,10 @@ export class SessionHeader extends LitElement { if (!this.session) return null; return html` - +
@@ -87,7 +87,7 @@ export class SessionHeader extends LitElement { ? html`
- +