diff --git a/app/src/main/kotlin/org/cru/godtools/ui/login/LoginLayout.kt b/app/src/main/kotlin/org/cru/godtools/ui/login/LoginLayout.kt
index 84ebe66d08..f74a0bf9c0 100644
--- a/app/src/main/kotlin/org/cru/godtools/ui/login/LoginLayout.kt
+++ b/app/src/main/kotlin/org/cru/godtools/ui/login/LoginLayout.kt
@@ -11,6 +11,7 @@ import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Close
+import androidx.compose.material3.AlertDialog
 import androidx.compose.material3.Button
 import androidx.compose.material3.ButtonDefaults
 import androidx.compose.material3.ExperimentalMaterial3Api
@@ -19,6 +20,7 @@ import androidx.compose.material3.IconButton
 import androidx.compose.material3.LocalContentColor
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Text
+import androidx.compose.material3.TextButton
 import androidx.compose.material3.TopAppBar
 import androidx.compose.material3.TopAppBarDefaults
 import androidx.compose.runtime.Composable
@@ -55,6 +57,8 @@ fun LoginLayout(createAccount: Boolean = false, onEvent: (event: LoginLayoutEven
         }
     }
 
+    LoginError(loginError, onDismiss = { loginError = null })
+
     Column(
         horizontalAlignment = Alignment.CenterHorizontally,
         modifier = Modifier
@@ -138,3 +142,28 @@ fun LoginLayout(createAccount: Boolean = false, onEvent: (event: LoginLayoutEven
         }
     }
 }
+
+@Composable
+private fun LoginError(error: LoginResponse.Error?, onDismiss: () -> Unit) {
+    if (error != null) {
+        AlertDialog(
+            text = {
+                Text(
+                    stringResource(
+                        when (error) {
+                            LoginResponse.Error.UserAlreadyExists -> R.string.account_error_user_already_exists
+                            LoginResponse.Error.UserNotFound -> R.string.account_error_user_not_found
+                            else -> R.string.account_error_unknown
+                        }
+                    )
+                )
+            },
+            confirmButton = {
+                TextButton(onClick = { onDismiss() }) {
+                    Text(stringResource(R.string.account_error_dialog_dismiss))
+                }
+            },
+            onDismissRequest = { onDismiss() },
+        )
+    }
+}
diff --git a/app/src/main/res/values/strings_account.xml b/app/src/main/res/values/strings_account.xml
index 578dda81c9..490b6fe52b 100644
--- a/app/src/main/res/values/strings_account.xml
+++ b/app/src/main/res/values/strings_account.xml
@@ -9,6 +9,10 @@
     <string name="account_create_description">Create an account to have real stories, encouragement, and practical tips at your fingertips.</string>
     <string name="account_login_heading">Sign in</string>
     <string name="account_login_description">Log in to your account to have real stories, encouragement, and practical tips at your fingertips.</string>
+    <string name="account_error_user_already_exists">User account already exists.</string>
+    <string name="account_error_user_not_found">User account not found.</string>
+    <string name="account_error_unknown">Error logging in.</string>
+    <string name="account_error_dialog_dismiss">OK</string>
 
     <!-- Activity -->
     <eat-comment />