diff --git a/app/helpers/flashes_helper.rb b/app/helpers/flashes_helper.rb
new file mode 100644
index 0000000000000000000000000000000000000000..6c5e937098069ff66aa8eb4203ddfab59f40b312
--- /dev/null
+++ b/app/helpers/flashes_helper.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+module FlashesHelper
+  def user_facing_flashes
+    flash.to_hash.slice('alert', 'error', 'notice', 'success')
+  end
+end
diff --git a/app/views/application/_flashes.html.haml b/app/views/application/_flashes.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..63587e77792bafaecf8d7345c7bc254cc69d2231
--- /dev/null
+++ b/app/views/application/_flashes.html.haml
@@ -0,0 +1,3 @@
+- user_facing_flashes.each do |key, value|
+  .flash-message{class: key}
+    %strong= value
diff --git a/app/views/layouts/admin.html.haml b/app/views/layouts/admin.html.haml
index 892bcd596d3ff3ff8bd34d3d6c0fa0fc0a3f0311..d2cff5e303a95989234025635cf1ae2d539e656a 100644
--- a/app/views/layouts/admin.html.haml
+++ b/app/views/layouts/admin.html.haml
@@ -13,13 +13,7 @@
       .content
         %h2= yield :page_title
 
-        - if flash[:notice]
-          .flash-message.notice
-            %strong= flash[:notice]
-
-        - if flash[:alert]
-          .flash-message.alert
-            %strong= flash[:alert]
+        = render 'flashes'
 
         = yield
 
diff --git a/app/views/layouts/auth.html.haml b/app/views/layouts/auth.html.haml
index 899690419528a2d1c88fa0d59c082f3a4c5645ca..b2ceed12a9c2be937752fdcb6496cc23ab31dcc3 100644
--- a/app/views/layouts/auth.html.haml
+++ b/app/views/layouts/auth.html.haml
@@ -9,13 +9,7 @@
           = image_tag 'logo.png'
 
     .form-container
-      - if flash[:notice]
-        .flash-message.notice
-          %strong= flash[:notice]
-
-      - if flash[:alert]
-        .flash-message.alert
-          %strong= flash[:alert]
+      = render 'flashes'
 
       = yield