diff --git a/reviewboard/static/rb/css/defs.less b/reviewboard/static/rb/css/defs.less
index d50d5b6e464712b50d565331e9a42000825a334c..d6e0679c33c0193e16a2b67a1869ee670f8785f2 100644
--- a/reviewboard/static/rb/css/defs.less
+++ b/reviewboard/static/rb/css/defs.less
@@ -29,6 +29,10 @@
 @headerbar-padding: 5px;
 @headerbar-menu-min-width: 9em;
 
+@read-only-banner-bg: #FFFA99;
+@read-only-banner-border-bottom: 1px darken(@read-only-banner-bg, 55%) solid;
+@read-only-banner-padding-left: @headerbar-padding-left;
+
 @box-border-color: #888A85;
 @box-border-radius: 6px;
 @box-inner-border-radius: @box-border-radius - 1px;
diff --git a/reviewboard/static/rb/css/pages/base.less b/reviewboard/static/rb/css/pages/base.less
index 59da627fdf6671a597b2cf731b07c0be6bac9f98..53115f197d862b0c4bb9d9334c5ffc6cbc1f1edb 100644
--- a/reviewboard/static/rb/css/pages/base.less
+++ b/reviewboard/static/rb/css/pages/base.less
@@ -707,6 +707,18 @@ textarea {
   });
 }
 
+#read-only-banner {
+  background: @read-only-banner-bg;
+  border-bottom: @read-only-banner-border-bottom;
+  font-size: 110%;
+  padding: @headerbar-padding;
+  padding-left: @read-only-banner-padding-left;
+}
+
+#read-only-banner-message {
+  vertical-align: middle;
+}
+
 #topbar {
   margin: 0 0 @page-container-padding 0;
 }
diff --git a/reviewboard/templates/base.html b/reviewboard/templates/base.html
index 303240d29c492dd9671145972551c199fee0fa23..7c965704bdc18dcbe9270bae0660d2d06a4f58ec 100644
--- a/reviewboard/templates/base.html
+++ b/reviewboard/templates/base.html
@@ -66,6 +66,13 @@
 {%   include "base/navbar.html" %}
 {%  endblock %}
 {%  template_hook_point "base-after-navbar" %}
+{%  block read_only_banner %}
+{%   if siteconfig_settings.site_read_only %}
+      <div id="read-only-banner">
+       <span id="read-only-banner-message">{% trans "Review Board is in read-only mode." %}</span>
+      </div>
+{%   endif %}
+{%  endblock read_only_banner %}
 {%  block navbar_post %}{% endblock %}
     </div>
 {% endblock %}
