diff --git a/.dockerignore b/.dockerignore
index 771c8d7d..509fe74a 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -9,3 +9,8 @@ scripts/
TODO.md
*.md
!README.md
+# Sibling projects / test harness - not part of the webmail image
+examples/
+integration/
+e2e/
+**/node_modules
diff --git a/components/email/email-composer.tsx b/components/email/email-composer.tsx
index 4e022d29..bc6f873f 100644
--- a/components/email/email-composer.tsx
+++ b/components/email/email-composer.tsx
@@ -2041,7 +2041,7 @@ export function EmailComposer({
};
return (
-
+
@@ -2227,7 +2228,7 @@ export function EmailComposer({
{/* To field */}
-
+
{t('to')}:
{t('subject_label')}
handleSend()}
disabled={!canSend || isSending}
title={getSendTooltip()}
+ data-testid="composer-send"
className="rounded-e-none border-e border-primary-foreground/20"
>
@@ -2632,6 +2635,7 @@ export function EmailComposer({
onClick={() => handleSend()}
disabled={!canSend || isSending}
title={getSendTooltip()}
+ data-testid="composer-send"
className="hidden md:inline-flex"
>
diff --git a/components/email/thread-list-item.tsx b/components/email/thread-list-item.tsx
index 7b60bd80..e93e37f4 100644
--- a/components/email/thread-list-item.tsx
+++ b/components/email/thread-list-item.tsx
@@ -166,6 +166,10 @@ const SingleEmailItem = React.forwardRef(
ref={ref}
{...dragHandlers}
{...longPressHandlers}
+ data-testid="email-list-item"
+ data-email-id={email.id}
+ data-subject={email.subject || ''}
+ data-unread={isUnread ? 'true' : 'false'}
className={cn(
"relative group cursor-pointer select-none transition-shadow duration-200 border-b border-border overflow-hidden",
resolvedColorTag ? resolvedColorTag : (
diff --git a/components/layout/account-switcher.tsx b/components/layout/account-switcher.tsx
index 8264c991..179aeddd 100644
--- a/components/layout/account-switcher.tsx
+++ b/components/layout/account-switcher.tsx
@@ -151,6 +151,8 @@ export function AccountSwitcher({ variant = "rail", className }: AccountSwitcher