diff --git a/apps/web/src/components/EmailEditor/Toolbar.tsx b/apps/web/src/components/EmailEditor/Toolbar.tsx
index 2e326e7..0b78b54 100644
--- a/apps/web/src/components/EmailEditor/Toolbar.tsx
+++ b/apps/web/src/components/EmailEditor/Toolbar.tsx
@@ -474,7 +474,7 @@ export function Toolbar({editor, onInsertVariable, onInsertImage, canUploadImage
type="button"
onMouseDown={e => e.preventDefault()}
onClick={handleColorClick}
- className="w-8 h-8 rounded border-2 border-neutral-300 hover:border-neutral-500 hover:scale-110 transition-all relative group"
+ className="w-8 h-8 rounded border-2 border-neutral-300 hover:border-neutral-500 hover:scale-105 transition-all relative group"
style={{backgroundColor: color}}
title={color}
>
diff --git a/apps/web/src/components/QuickStart.tsx b/apps/web/src/components/QuickStart.tsx
index 26f6b36..7509afa 100644
--- a/apps/web/src/components/QuickStart.tsx
+++ b/apps/web/src/components/QuickStart.tsx
@@ -28,16 +28,16 @@ function HelpResources() {
Need help?
-
-
+
Join Discord
-
+
@@ -237,7 +237,6 @@ export function QuickStart({setupState, isLoading}: QuickStartProps) {
{step.linkText}
diff --git a/apps/web/src/components/WorkflowBuilder.tsx b/apps/web/src/components/WorkflowBuilder.tsx
index 9388b3e..7534fcb 100644
--- a/apps/web/src/components/WorkflowBuilder.tsx
+++ b/apps/web/src/components/WorkflowBuilder.tsx
@@ -133,9 +133,9 @@ function AddStepNode({data}: {data: {label: string; onClick?: () => void}}) {
}}
/>
-
-
-
+
+
{data.label &&
{data.label}
}
@@ -192,26 +192,30 @@ function CustomNode({
{/* Action buttons - shown on hover */}
{showActions && data.type !== 'TRIGGER' && (
- {
e.stopPropagation();
data.onEdit?.();
}}
- className="p-1.5 bg-white border-2 border-neutral-300 rounded-lg shadow-md hover:border-neutral-400 hover:bg-neutral-50 transition-all"
+ variant="outline"
+ size="icon"
+ className="h-7 w-7 shadow-md"
title="Edit step"
>
-
-
-
+
+ {
e.stopPropagation();
data.onDelete?.();
}}
- className="p-1.5 bg-white border-2 border-red-300 rounded-lg shadow-md hover:border-red-400 hover:bg-red-50 transition-all"
+ variant="outline"
+ size="icon"
+ className="h-7 w-7 shadow-md hover:bg-red-50 hover:border-red-400"
title="Delete step"
>
-
-
+
+
)}
diff --git a/apps/web/src/pages/contacts/index.tsx b/apps/web/src/pages/contacts/index.tsx
index 95bdbe5..2e62298 100644
--- a/apps/web/src/pages/contacts/index.tsx
+++ b/apps/web/src/pages/contacts/index.tsx
@@ -289,7 +289,7 @@ export default function ContactsPage() {
promptDelete(contact.id)}>
-
+
@@ -334,7 +334,7 @@ export default function ContactsPage() {
promptDelete(contact.id)}>
-
+
diff --git a/apps/web/src/pages/segments/index.tsx b/apps/web/src/pages/segments/index.tsx
index c508a80..52c7bd2 100644
--- a/apps/web/src/pages/segments/index.tsx
+++ b/apps/web/src/pages/segments/index.tsx
@@ -72,147 +72,149 @@ export default function SegmentsPage() {
- {/* Header */}
-
-
-
Segments
-
- Create dynamic audience groups based on contact attributes and behaviors
-
+ {/* Header */}
+
+
+
Segments
+
+ Create dynamic audience groups based on contact attributes and behaviors
+
+
+
+
+
+ Create Segment
+ Create
+
+
-
-
-
- Create Segment
- Create
-
-
+
+ {/* Warning if too many segments */}
+ {showLimitWarning && (
+
+
+
+ Showing first {segments?.length} segments. Consider archiving old segments to improve performance.
+
+
+ )}
+
+ {/* Segments Grid */}
+ {isLoading ? (
+
+
+
+
Loading segments...
+
+
+ ) : segments?.length === 0 ? (
+
+
+
+
+
No segments yet
+
+ Create your first segment to group contacts based on attributes and behaviors
+
+
+
+
+ Create Segment
+
+
+
+
+
+ ) : (
+
+ {segments?.map(segment => (
+
+
+
+
+ {segment.name}
+ {segment.description && (
+ {segment.description}
+ )}
+
+
+
+
+
+ {/* Stats */}
+
+
+
+ Members
+
+
{segment.memberCount}
+
+
+
+
+
+ Filters
+
+
+ {countFiltersInCondition(segment.condition)}
+
+
+
+ {/* Actions */}
+
+
+
+
+ Edit
+
+
+ {
+ setSegmentToDelete(segment.id);
+ setShowDeleteDialog(true);
+ }}
+ className="text-red-600 hover:text-red-700 hover:bg-red-50"
+ >
+
+
+
+
+ {/* Metadata */}
+
+ Created {new Date(segment.createdAt).toLocaleDateString()}
+
+
+
+
+ ))}
+
+ )}
- {/* Warning if too many segments */}
- {showLimitWarning && (
-
-
-
- Showing first {segments?.length} segments. Consider archiving old segments to improve performance.
-
-
- )}
-
- {/* Segments Grid */}
- {isLoading ? (
-
-
-
-
Loading segments...
-
-
- ) : segments?.length === 0 ? (
-
-
-
-
-
No segments yet
-
- Create your first segment to group contacts based on attributes and behaviors
-
-
-
-
- Create Segment
-
-
-
-
-
- ) : (
-
- {segments?.map(segment => (
-
-
-
-
- {segment.name}
- {segment.description && {segment.description}}
-
-
-
-
-
- {/* Stats */}
-
-
-
- Members
-
-
{segment.memberCount}
-
-
-
-
-
- Filters
-
-
- {countFiltersInCondition(segment.condition)}
-
-
-
- {/* Actions */}
-
-
-
-
- Edit
-
-
- {
- setSegmentToDelete(segment.id);
- setShowDeleteDialog(true);
- }}
- className="text-red-600 hover:text-red-700 hover:bg-red-50"
- >
-
-
-
-
- {/* Metadata */}
-
- Created {new Date(segment.createdAt).toLocaleDateString()}
-
-
-
-
- ))}
-
- )}
-
-
-
-
+
+
>
);
}
diff --git a/apps/web/src/pages/settings/index.tsx b/apps/web/src/pages/settings/index.tsx
index ca49552..9c116d1 100644
--- a/apps/web/src/pages/settings/index.tsx
+++ b/apps/web/src/pages/settings/index.tsx
@@ -545,9 +545,9 @@ export default function Settings() {
setShowDeleteDialog(true)}
- className="shrink-0 bg-red-600 hover:bg-red-700 text-white shadow-sm hover:shadow-md transition-all"
+ className="shrink-0"
>
Delete Project
diff --git a/apps/web/src/pages/templates/index.tsx b/apps/web/src/pages/templates/index.tsx
index ad970de..076b3f5 100644
--- a/apps/web/src/pages/templates/index.tsx
+++ b/apps/web/src/pages/templates/index.tsx
@@ -126,39 +126,30 @@ export default function TemplatesPage() {
{/* Type Filter */}
- setTypeFilter('ALL')}
- className={`px-3 py-1.5 rounded-lg text-sm font-medium transition-colors ${
- typeFilter === 'ALL'
- ? 'bg-neutral-900 text-white'
- : 'bg-neutral-100 text-neutral-600 hover:bg-neutral-200'
- }`}
+ variant={typeFilter === 'ALL' ? 'default' : 'secondary'}
+ size="sm"
>
All Templates
-
-
+ setTypeFilter('MARKETING')}
- className={`px-3 py-1.5 rounded-lg text-sm font-medium transition-colors ${
- typeFilter === 'MARKETING'
- ? 'bg-neutral-900 text-white'
- : 'bg-neutral-100 text-neutral-600 hover:bg-neutral-200'
- }`}
+ variant={typeFilter === 'MARKETING' ? 'default' : 'secondary'}
+ size="sm"
>
Marketing
-
-
+ setTypeFilter('TRANSACTIONAL')}
- className={`px-3 py-1.5 rounded-lg text-sm font-medium transition-colors ${
- typeFilter === 'TRANSACTIONAL'
- ? 'bg-neutral-900 text-white'
- : 'bg-neutral-100 text-neutral-600 hover:bg-neutral-200'
- }`}
+ variant={typeFilter === 'TRANSACTIONAL' ? 'default' : 'secondary'}
+ size="sm"
>
Transactional
-
+
@@ -246,7 +237,7 @@ export default function TemplatesPage() {
setShowDeleteDialog(true);
}}
>
-
+
diff --git a/apps/web/src/pages/workflows/index.tsx b/apps/web/src/pages/workflows/index.tsx
index 62944f0..081711e 100644
--- a/apps/web/src/pages/workflows/index.tsx
+++ b/apps/web/src/pages/workflows/index.tsx
@@ -220,9 +220,9 @@ export default function WorkflowsPage() {
onClick={() => handleToggleEnabled(workflow.id, workflow.enabled)}
>
{workflow.enabled ? (
-
+
) : (
-
+
)}
@@ -238,7 +238,7 @@ export default function WorkflowsPage() {
setShowDeleteDialog(true);
}}
>
-
+
diff --git a/packages/ui/src/components/atoms/Button.tsx b/packages/ui/src/components/atoms/Button.tsx
index 9b55b13..75596f5 100644
--- a/packages/ui/src/components/atoms/Button.tsx
+++ b/packages/ui/src/components/atoms/Button.tsx
@@ -5,14 +5,14 @@ import * as React from 'react';
import {cn} from '../../lib';
const buttonVariants = cva(
- 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer',
+ 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer',
{
variants: {
variant: {
- default: 'bg-neutral-900 text-neutral-50 shadow hover:bg-neutral-900/90',
- destructive: 'bg-red-500 text-neutral-50 shadow-sm hover:bg-red-500/90',
- outline: 'border border-neutral-200 bg-white shadow-sm hover:bg-neutral-100 hover:text-neutral-900',
- secondary: 'bg-neutral-100 text-neutral-900 shadow-sm hover:bg-neutral-100/80',
+ default: 'bg-neutral-900 text-neutral-50 shadow hover:bg-neutral-900/90 hover:shadow-md',
+ destructive: 'bg-red-500 text-neutral-50 shadow-sm hover:bg-red-500/90 hover:shadow-md',
+ outline: 'border border-neutral-200 bg-white shadow-sm hover:bg-neutral-100 hover:text-neutral-900 hover:shadow-md',
+ secondary: 'bg-neutral-100 text-neutral-900 shadow-sm hover:bg-neutral-100/80 hover:shadow-md',
ghost: 'hover:bg-neutral-100 hover:text-neutral-900',
link: 'text-neutral-900 underline-offset-4 hover:underline',
},