From ba44ff5e8e2754595e89c93e4987ccec736c194a Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Thu, 14 Nov 2024 09:58:04 -0800
Subject: [PATCH 01/17] content added
---
app/assets/images/calendar.svg | 9 ++
app/assets/images/checklist.svg | 9 ++
app/assets/images/reminder.svg | 10 ++
app/main/views/index.py | 10 ++
app/main/views/sub_navigation_dictionaries.py | 9 ++
.../views/about/why-text-messaging.html | 148 ++++++++++++++++++
tests/app/test_navigation.py | 1 +
7 files changed, 196 insertions(+)
create mode 100644 app/assets/images/calendar.svg
create mode 100644 app/assets/images/checklist.svg
create mode 100644 app/assets/images/reminder.svg
create mode 100644 app/templates/views/about/why-text-messaging.html
diff --git a/app/assets/images/calendar.svg b/app/assets/images/calendar.svg
new file mode 100644
index 000000000..68ef9c102
--- /dev/null
+++ b/app/assets/images/calendar.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/assets/images/checklist.svg b/app/assets/images/checklist.svg
new file mode 100644
index 000000000..54757ba12
--- /dev/null
+++ b/app/assets/images/checklist.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/assets/images/reminder.svg b/app/assets/images/reminder.svg
new file mode 100644
index 000000000..97cf8f3f5
--- /dev/null
+++ b/app/assets/images/reminder.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/main/views/index.py b/app/main/views/index.py
index 28ede59d1..2804b91f5 100644
--- a/app/main/views/index.py
+++ b/app/main/views/index.py
@@ -10,6 +10,7 @@
from app.main import main
from app.main.views.pricing import CURRENT_SMS_RATE
from app.main.views.sub_navigation_dictionaries import (
+ about_notify_nav,
best_practices_nav,
features_nav,
using_notify_nav,
@@ -270,6 +271,15 @@ def benchmark_performance():
)
+@main.route("/about/why-text-messaging")
+@user_is_logged_in
+def why_text_messaging():
+ return render_template(
+ "views/about/why-text-messaging.html",
+ navigation_links=about_notify_nav(),
+ )
+
+
@main.route("/using-notify/guidance")
@user_is_logged_in
def guidance_index():
diff --git a/app/main/views/sub_navigation_dictionaries.py b/app/main/views/sub_navigation_dictionaries.py
index 0689c198d..e7001c95e 100644
--- a/app/main/views/sub_navigation_dictionaries.py
+++ b/app/main/views/sub_navigation_dictionaries.py
@@ -101,3 +101,12 @@ def best_practices_nav():
"link": "main.benchmark_performance",
},
]
+
+
+def about_notify_nav():
+ return [
+ {
+ "name": "Why text messaging",
+ "link": "main.why_text_messaging",
+ },
+ ]
diff --git a/app/templates/views/about/why-text-messaging.html b/app/templates/views/about/why-text-messaging.html
new file mode 100644
index 000000000..4c9ae2a62
--- /dev/null
+++ b/app/templates/views/about/why-text-messaging.html
@@ -0,0 +1,148 @@
+{% extends "base.html" %}
+
+{% set page_title = "Why text messaging" %}
+
+{% block per_page_title %}
+{{page_title}}
+{% endblock %}
+
+{% block content_column_content %}
+
+
+ {{page_title}}
+
+ Reach people using a common method
+
+ Confusing or unreceived notifications are one of the largest barriers to people getting and keeping
+ benefits. The typical ways the government communicates with people often fall short. Low income households are more
+ likely to experience housing instability, which means paper mail, already slow, can easily be missed.
+
+
+
+ Pew Research shows that nearly all adults in the US have a cell phone. Reliance on smartphones
+ for online access is especially common among Americans with lower household incomes and those with lower levels of
+ formal education. Of those earning less than $30,000 a year, 28% say their mobile phone is the sole method to
+ digitally connect.
+
+
+ This means that for many people who rely on government services, cell phones may be the most reliable place to meet
+ people where they already are.
+
+ Improve customer experience
+
+ Text messages can deliver concise information and drive an audience to take action quickly. Timely reminders sent
+ via text message have been proven to decrease re-enrollment churn and save money for administering agencies.
+
+
+ Texting not only helps programs reach people using a nearly-universal communication method, it is a cost effective
+ way to do so. With Notify.gov you can get started for free , allowing you to try out
+ texting to complement your existing communications and outreach strategies.
+
+ What texting is best for
+ Agencies, like you, are already using Notify.gov to text about the following programs.
+ {% set card_contents = [
+ {
+ "svg_src": "calendar",
+ "card_heading": "Reminders",
+ "p_text": "In a text bubble // Your Quality Control food phone interview is on ((date)) at ((time)). Failure to
+ attend may lead
+ to closure of your benefits. Call 1-800-222-3333 with questions.",
+ "link": "/best-practices/clear-goals"
+ },
+ {
+ "svg_src": "reminder",
+ "card_heading": "Alerts to take action",
+ "p_text": " In a text bubble // Your household's Medicaid coverage is expiring. To keep getting Medicaid, you must
+ complete your renewal by ((date)). You can renew online at dhs.state.gov…",
+ "link": "/best-practices/rules-and-regulations"
+ },
+ {
+ "svg_src": "checklist",
+ "card_heading": "Important status updates",
+ "p_text": "In a text bubble // Your passport has been issued at the Los Angeles Passport Agency. Please come to the
+ desk
+ between
+ 1:30pm and 2:30pm today to pick up your passport…",
+ "link": "/best-practices/establish-trust"
+ },
+ ] %}
+ {% for item in card_contents %}
+
+
{{item.card_heading}}
+
{{item.p_text}}
+
+
+
+
+ {% endfor %}
+
+
+
+
+{% endblock %}
diff --git a/tests/app/test_navigation.py b/tests/app/test_navigation.py
index 8bf52d803..03f8e8c86 100644
--- a/tests/app/test_navigation.py
+++ b/tests/app/test_navigation.py
@@ -256,6 +256,7 @@
"view_template_version",
"view_template_versions",
"who_its_for",
+ "why_text_messaging",
"write_for_action",
},
)
From ff4ee646ca0ed02839a853aecb6f4ea8b63d3290 Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Thu, 14 Nov 2024 14:00:05 -0800
Subject: [PATCH 02/17] content change
---
.../views/about/why-text-messaging.html | 73 +------------------
1 file changed, 4 insertions(+), 69 deletions(-)
diff --git a/app/templates/views/about/why-text-messaging.html b/app/templates/views/about/why-text-messaging.html
index 4c9ae2a62..68548bce2 100644
--- a/app/templates/views/about/why-text-messaging.html
+++ b/app/templates/views/about/why-text-messaging.html
@@ -10,70 +10,6 @@
{{page_title}}
-
Reach people using a common method
Confusing or Improve customer experience
texting to complement your existing communications and outreach strategies.
What texting is best for
- Agencies, like you, are already using Notify.gov to text about the following programs.
+
+ Agencies, like you, are already using Notify.gov to text about the following programs.
+
{% set card_contents = [
{
"svg_src": "calendar",
@@ -113,14 +51,12 @@ What texting is best for
"p_text": "In a text bubble // Your Quality Control food phone interview is on ((date)) at ((time)). Failure to
attend may lead
to closure of your benefits. Call 1-800-222-3333 with questions.",
- "link": "/best-practices/clear-goals"
},
{
"svg_src": "reminder",
"card_heading": "Alerts to take action",
"p_text": " In a text bubble // Your household's Medicaid coverage is expiring. To keep getting Medicaid, you must
complete your renewal by ((date)). You can renew online at dhs.state.gov…",
- "link": "/best-practices/rules-and-regulations"
},
{
"svg_src": "checklist",
@@ -129,7 +65,6 @@ What texting is best for
desk
between
1:30pm and 2:30pm today to pick up your passport…",
- "link": "/best-practices/establish-trust"
},
] %}
{% for item in card_contents %}
@@ -137,7 +72,7 @@ What texting is best for
{{item.card_heading}}
{{item.p_text}}
-
+
{% endfor %}
From 523c00f3a695ad4c28add023cbd7f04a36fe7e2f Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Thu, 14 Nov 2024 15:45:27 -0800
Subject: [PATCH 03/17] update images
---
app/assets/images/calendar.png | Bin 0 -> 5515 bytes
app/assets/images/calendar.svg | 9 -----
app/assets/images/checklist.png | Bin 0 -> 6790 bytes
app/assets/images/checklist.svg | 9 -----
app/assets/images/reminder.png | Bin 0 -> 2025 bytes
app/assets/images/reminder.svg | 10 ------
.../views/about/why-text-messaging.html | 34 ++++++++++--------
7 files changed, 19 insertions(+), 43 deletions(-)
create mode 100644 app/assets/images/calendar.png
delete mode 100644 app/assets/images/calendar.svg
create mode 100644 app/assets/images/checklist.png
delete mode 100644 app/assets/images/checklist.svg
create mode 100644 app/assets/images/reminder.png
delete mode 100644 app/assets/images/reminder.svg
diff --git a/app/assets/images/calendar.png b/app/assets/images/calendar.png
new file mode 100644
index 0000000000000000000000000000000000000000..20bf82540ad96bb766585beda3d44cf0fd00839f
GIT binary patch
literal 5515
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
N002ovPDHLkV1gqFOxXYc
literal 0
HcmV?d00001
diff --git a/app/assets/images/calendar.svg b/app/assets/images/calendar.svg
deleted file mode 100644
index 68ef9c102..000000000
--- a/app/assets/images/calendar.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/app/assets/images/checklist.png b/app/assets/images/checklist.png
new file mode 100644
index 0000000000000000000000000000000000000000..e86e2f6700ef5c51de88a1a08032826ec7cbbbf8
GIT binary patch
literal 6790
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
-
-
-
-
-
-
-
-
diff --git a/app/assets/images/reminder.png b/app/assets/images/reminder.png
new file mode 100644
index 0000000000000000000000000000000000000000..a93d3c1a90882445283b7c62d79869626323a443
GIT binary patch
literal 2025
zcmVG0@m1ix3gWB4Tm^9lA{E4`z)A&|tH4SHNe3bo#2w@qBQC22TLOW!
z1M|H%&jJes?2r93JG*&Hei_(6U_N%8o
z&`mrkkbBuvis#d`V^W}`pRNmv(H)1Ua|${CPX=s;_oV5sXJHS51cr&gFcBD-2n|bv#Xxccop>ov&2h%HpLjEg06%
z?di{Y;A=Uxt?7>+_*xd>$;0B{9-aPqqdPf4&RUBgBXNJUF*sRixALK`6D*=HNY9`2
zb`^9(PWqm4c!NF;DFR+X(&mnCNL^3T=O)-E>3%07kjk73{vn}Ef6J*OsTxMv~H)o~bkbWT4;
z#jq&t4~FsZX&rPDk~2(BR+RQ9BX~}SE)Hr6Dqnv_<*Ro4ANo{mh*wLp(iPJnFKxN`
zD{&fKDu@MD-D1f|t&OonP_x{aQ6*+Zf|#GcFcBCg0s|9)fr-GNy>)QGVNt?H+FZmt
z+C-3HL8r6AiUY$$V6+zpE1JQG#&ozMs`IspKm?FuOqHBS1XdgvCIZ7mU|=FJ7(bpM
zRV1iGV*kQv=Ou7M0$B=Xh-X?ceY=pve<=oX!L-RaLX2U`JPpO>XK6T0gGd;hB%e(6L(x
zYo@a(=U&XsV^~l%1wXg^PqIcCJv`KiYE^jV)pt;nv3=heGsU`+4HLmk@l-j!lZ`pX
z6G$t;(OlF+_KBZhs{Vl*xyOgiXYq|ZO&so-ex1Nmt-t(@{hEm1HsAM5kDMr;V9Gf`
z9X)hQ_dbBjjmfbEm1F5M6Kyq2u}&ZfzMyLF=N#S%9@lG02HTpw&+x#Xy+l7aadhl;4X3
zQ}0oTMiFFecl$~lKpZZ94C=7;@OM25UCkOr5Vz0!tmHZr1IVY*-IrCs98nZmncD#2(F^-)WX14(e_)Eph*OAe?V#?D57o42}ZyLp9|8Y
z2tJS1i8VMDa&DLi3=@HYiNL@_U|=FJFcBD-2nV
z3`_(DI;N}frM+W2Qm1X)pG5pVHyWv)$7t+mpZFSO$hxdOomx)uaVO6>h*U+8(J$d-SX$eFloS@Qa3ng3
zw$ussT_5O}yo=6M3F-9cxK7G3OJG{nrONg=r?$XS$}P
z-sMPF2%1Upd9Hb(;w@RmE#2GaW1D7DdX8&`ne_W8JTOfWJdhyPcVL(Z3_T)HGt65f
zsrDlNh_>(9o)bt5SJ8HXu{WNyYSlxTs#(oaV2Q2--eq?fy^sf|DWO#gK!Z=-(dhLtnW=Y6wkK@)Y$9fEv#Kl4=hMcOr_f*1I@O(gOj-i^I!)o@o7?Z%$
zJyv3k6#`!&bz9fG6sBh
-
-
-
-
-
-
-
-
-
diff --git a/app/templates/views/about/why-text-messaging.html b/app/templates/views/about/why-text-messaging.html
index 68548bce2..efb2df873 100644
--- a/app/templates/views/about/why-text-messaging.html
+++ b/app/templates/views/about/why-text-messaging.html
@@ -46,34 +46,38 @@ What texting is best for
{% set card_contents = [
{
- "svg_src": "calendar",
+ "image_src": asset_url('images/calendar.png'),
"card_heading": "Reminders",
"p_text": "In a text bubble // Your Quality Control food phone interview is on ((date)) at ((time)). Failure to
- attend may lead
- to closure of your benefits. Call 1-800-222-3333 with questions.",
+ attend may lead to closure of your benefits. Call 1-800-222-3333 with questions.",
+ "alt_text": "reminder text example"
},
{
- "svg_src": "reminder",
+ "image_src": asset_url('images/reminder.png'),
"card_heading": "Alerts to take action",
- "p_text": " In a text bubble // Your household's Medicaid coverage is expiring. To keep getting Medicaid, you must
+ "p_text": "In a text bubble // Your household's Medicaid coverage is expiring. To keep getting Medicaid, you must
complete your renewal by ((date)). You can renew online at dhs.state.gov…",
+ "alt_text": "alerts text example"
},
{
- "svg_src": "checklist",
+ "image_src": asset_url('images/checklist.png'),
"card_heading": "Important status updates",
"p_text": "In a text bubble // Your passport has been issued at the Los Angeles Passport Agency. Please come to the
- desk
- between
- 1:30pm and 2:30pm today to pick up your passport…",
+ desk between 1:30pm and 2:30pm today to pick up your passport…",
+ "alt_text": "status update text example"
},
] %}
{% for item in card_contents %}
-
-
{{item.card_heading}}
-
{{item.p_text}}
-
-
-
+
+
+
+
{{item.card_heading}}
+
{{item.p_text}}
+
+ {% if item.image_src %}
+
+ {% endif %}
+
{% endfor %}
From 0138930172e1b31f5940069218b2d48706854e1b Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Fri, 15 Nov 2024 13:31:14 -0800
Subject: [PATCH 04/17] assets
---
app/assets/images/alarm.svg | 1 +
app/assets/images/alert.svg | 1 +
app/assets/images/calendar.png | Bin 5515 -> 0 bytes
app/assets/images/calendar.svg | 1 +
app/assets/images/checklist.png | Bin 6790 -> 0 bytes
app/assets/images/reminder.png | Bin 2025 -> 0 bytes
.../views/about/why-text-messaging.html | 14 ++++++--------
7 files changed, 9 insertions(+), 8 deletions(-)
create mode 100644 app/assets/images/alarm.svg
create mode 100644 app/assets/images/alert.svg
delete mode 100644 app/assets/images/calendar.png
create mode 100644 app/assets/images/calendar.svg
delete mode 100644 app/assets/images/checklist.png
delete mode 100644 app/assets/images/reminder.png
diff --git a/app/assets/images/alarm.svg b/app/assets/images/alarm.svg
new file mode 100644
index 000000000..57e6180bc
--- /dev/null
+++ b/app/assets/images/alarm.svg
@@ -0,0 +1 @@
+
diff --git a/app/assets/images/alert.svg b/app/assets/images/alert.svg
new file mode 100644
index 000000000..d0d516d8f
--- /dev/null
+++ b/app/assets/images/alert.svg
@@ -0,0 +1 @@
+
diff --git a/app/assets/images/calendar.png b/app/assets/images/calendar.png
deleted file mode 100644
index 20bf82540ad96bb766585beda3d44cf0fd00839f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5515
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
N002ovPDHLkV1gqFOxXYc
diff --git a/app/assets/images/calendar.svg b/app/assets/images/calendar.svg
new file mode 100644
index 000000000..9b755e9fd
--- /dev/null
+++ b/app/assets/images/calendar.svg
@@ -0,0 +1 @@
+
diff --git a/app/assets/images/checklist.png b/app/assets/images/checklist.png
deleted file mode 100644
index e86e2f6700ef5c51de88a1a08032826ec7cbbbf8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 6790
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
+
+
{{page_title}}
Reach people using a common method
@@ -46,21 +47,21 @@ What texting is best for
{% set card_contents = [
{
- "image_src": asset_url('images/calendar.png'),
+ "image_src": asset_url('images/calendar.svg'),
"card_heading": "Reminders",
"p_text": "In a text bubble // Your Quality Control food phone interview is on ((date)) at ((time)). Failure to
attend may lead to closure of your benefits. Call 1-800-222-3333 with questions.",
"alt_text": "reminder text example"
},
{
- "image_src": asset_url('images/reminder.png'),
+ "image_src": asset_url('images/alert.svg'),
"card_heading": "Alerts to take action",
"p_text": "In a text bubble // Your household's Medicaid coverage is expiring. To keep getting Medicaid, you must
complete your renewal by ((date)). You can renew online at dhs.state.gov…",
"alt_text": "alerts text example"
},
{
- "image_src": asset_url('images/checklist.png'),
+ "image_src": asset_url('images/alarm.svg'),
"card_heading": "Important status updates",
"p_text": "In a text bubble // Your passport has been issued at the Los Angeles Passport Agency. Please come to the
desk between 1:30pm and 2:30pm today to pick up your passport…",
@@ -80,8 +81,5 @@ What texting is best for
{% endfor %}
-
-
-
{% endblock %}
From 0b81ed024795d8f39a1c8f02cc4516d969ce69a6 Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Mon, 18 Nov 2024 11:49:39 -0800
Subject: [PATCH 05/17] changes to nav
---
app/main/views/sub_navigation_dictionaries.py | 12 +++++++++++-
app/templates/base.html | 15 ++++++++++++++-
app/templates/views/about/about.html | 2 +-
app/templates/views/about/why-text-messaging.html | 4 ++--
4 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/app/main/views/sub_navigation_dictionaries.py b/app/main/views/sub_navigation_dictionaries.py
index 1f7725228..cc92af303 100644
--- a/app/main/views/sub_navigation_dictionaries.py
+++ b/app/main/views/sub_navigation_dictionaries.py
@@ -110,12 +110,22 @@ def best_practices_nav():
def about_notify_nav():
return [
{
- "name": "About notify",
+ "name": "About Notify",
"link": "main.about_notify",
"sub_navigation_items": [
{
"name": "Why text messaging",
"link": "main.why_text_messaging",
+ "sub_sub_navigation_items": [
+ {
+ "name": "Reach people using a common method",
+ "link": "main.why_text_messaging#reach-people-using-a-common-method",
+ },
+ {
+ "name": "Improve customer experience",
+ "link": "main.why_text_messaging#improve-customer-experience",
+ },
+ ],
},
],
},
diff --git a/app/templates/base.html b/app/templates/base.html
index 369e62b81..b2b6639e9 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -66,7 +66,20 @@
diff --git a/app/templates/views/about/about.html b/app/templates/views/about/about.html
index 39dfce671..bed63cfa7 100644
--- a/app/templates/views/about/about.html
+++ b/app/templates/views/about/about.html
@@ -1,6 +1,6 @@
{% extends "base.html" %}
-{% set page_title = "About notify" %}
+{% set page_title = "About Notify" %}
{% block per_page_title %}
{{page_title}}
diff --git a/app/templates/views/about/why-text-messaging.html b/app/templates/views/about/why-text-messaging.html
index bdb63701d..ff8e4f909 100644
--- a/app/templates/views/about/why-text-messaging.html
+++ b/app/templates/views/about/why-text-messaging.html
@@ -11,7 +11,7 @@
{{page_title}}
- Reach people using a common method
+ Reach people using a common method
Confusing or Reach people using a common method
This means that for many people who rely on government services, cell phones may be the most reliable place to meet
people where they already are.
- Improve customer experience
+ Improve customer experience
Text messages can deliver concise information and drive an audience to take action quickly. Timely reminders sent
via text message have been proven to decrease re-enrollment churn and save money for administering agencies.
From 655ecb60e9f07f2ff3abd7febc6dff32135e2ce2 Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Mon, 18 Nov 2024 11:59:00 -0800
Subject: [PATCH 06/17] update sub links
---
app/main/views/sub_navigation_dictionaries.py | 4 ++++
app/templates/views/about/why-text-messaging.html | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/main/views/sub_navigation_dictionaries.py b/app/main/views/sub_navigation_dictionaries.py
index cc92af303..16aef0c17 100644
--- a/app/main/views/sub_navigation_dictionaries.py
+++ b/app/main/views/sub_navigation_dictionaries.py
@@ -125,6 +125,10 @@ def about_notify_nav():
"name": "Improve customer experience",
"link": "main.why_text_messaging#improve-customer-experience",
},
+ {
+ "name": "What texting is best for",
+ "link": "main.why_text_messaging#what-texting-is-best-for",
+ },
],
},
],
diff --git a/app/templates/views/about/why-text-messaging.html b/app/templates/views/about/why-text-messaging.html
index ff8e4f909..9b354479c 100644
--- a/app/templates/views/about/why-text-messaging.html
+++ b/app/templates/views/about/why-text-messaging.html
@@ -41,7 +41,7 @@ Improve customer experience
way to do so. With Notify.gov you can get started for free , allowing you to try out
texting to complement your existing communications and outreach strategies.
- What texting is best for
+ What texting is best for
Agencies, like you, are already using Notify.gov to text about the following programs.
From 2ba369100c1bde2d02980d08df0b58fd99cfecf2 Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Mon, 18 Nov 2024 13:35:24 -0800
Subject: [PATCH 07/17] content
---
app/main/views/index.py | 8 +++
app/main/views/sub_navigation_dictionaries.py | 4 ++
app/templates/views/about/security.html | 61 +++++++++++++++++++
3 files changed, 73 insertions(+)
create mode 100644 app/templates/views/about/security.html
diff --git a/app/main/views/index.py b/app/main/views/index.py
index 974e29211..79d4365f4 100644
--- a/app/main/views/index.py
+++ b/app/main/views/index.py
@@ -295,6 +295,14 @@ def about_notify():
)
+@main.route("/about/security")
+def about_security():
+ return render_template(
+ "views/about/security.html",
+ navigation_links=about_notify_nav(),
+ )
+
+
@main.route("/using-notify/guidance/create-and-send-messages")
@user_is_logged_in
def create_and_send_messages():
diff --git a/app/main/views/sub_navigation_dictionaries.py b/app/main/views/sub_navigation_dictionaries.py
index b9fb7f8ae..f043955de 100644
--- a/app/main/views/sub_navigation_dictionaries.py
+++ b/app/main/views/sub_navigation_dictionaries.py
@@ -113,4 +113,8 @@ def about_notify_nav():
"name": "About notify",
"link": "main.about_notify",
},
+ {
+ "name": "Security",
+ "link": "main.about_security",
+ },
]
diff --git a/app/templates/views/about/security.html b/app/templates/views/about/security.html
new file mode 100644
index 000000000..b03e593a4
--- /dev/null
+++ b/app/templates/views/about/security.html
@@ -0,0 +1,61 @@
+{% extends "base.html" %}
+
+{% set page_title = "Security" %}
+
+{% block per_page_title %}
+{{page_title}}
+{% endblock %}
+
+{% block content_column_content %}
+
+
+ {{page_title}}
+ Notify.gov is built for the needs of government agencies with fundamental system
+ security processes in place to:
+
+
+ protect user data
+ keep systems secure
+ manage risks around information
+
+
+ Notify.gov operates under a full three-year Authority-to-Operate (ATO) . This federal security authorization process leverages security
+ controls provided by National Institute of Standards and Technology (NIST).
+
+
+
+ Our infrastructure runs on cloud.gov and utilizes several
+ services through Amazon Web
+ Services (AWS), including AWS SNS for sending SMS
+ messages.
+
+ For more information about the Notify.gov infrastructure, contact us at notify-support@gsa.gov .
+ Data
+
+ On Notify.gov, data is encrypted both in transit and at rest. To send a message, agencies upload a spreadsheet of
+ phone numbers and other necessary data from their existing data management system.
+
+
+ Notify.gov is not a system of record, so it does not have a System of Records Notice (SORN). Agencies are
+ responsible for managing their data outside of Notify.gov.
+
+ Data retention
+
+ Any data uploads that have recipient data are held for seven calendar days; personally identifiable information
+ (PII) is never stored in Notify’s database.
+
+ Multi-Factor Authentication
+
+ Notify.gov uses Login.gov for enhanced security.
+ Login.gov is an extra layer of security created by the government that uses multi-factor authentication and stronger
+ passwords to protect your account.
+
+
+ To access Notify.gov, users will use a Login.gov account associated with their agency (.gov) email with one of the
+ multi-factor authentication
+ methods offered through Login.gov.
+
+
+{% endblock %}
From de8c4b7204177f862cc35e6111d77c80819c6d99 Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Mon, 18 Nov 2024 13:41:32 -0800
Subject: [PATCH 08/17] test
---
tests/app/test_navigation.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/app/test_navigation.py b/tests/app/test_navigation.py
index 15be17081..910364cee 100644
--- a/tests/app/test_navigation.py
+++ b/tests/app/test_navigation.py
@@ -18,6 +18,7 @@
Navigation.get_endpoint_with_blueprint,
{
"about_notify",
+ "about_security",
"accept_invite",
"accept_org_invite",
"accessibility_statement",
From 942489dc57f8dce8eaaa768308fdd551f8d5a4aa Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Wed, 20 Nov 2024 09:43:12 -0800
Subject: [PATCH 09/17] updated external links
---
app/main/views/sub_navigation_dictionaries.py | 10 ++++++----
app/templates/views/about/security.html | 17 +++++++++++------
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/app/main/views/sub_navigation_dictionaries.py b/app/main/views/sub_navigation_dictionaries.py
index f043955de..0aba6069b 100644
--- a/app/main/views/sub_navigation_dictionaries.py
+++ b/app/main/views/sub_navigation_dictionaries.py
@@ -112,9 +112,11 @@ def about_notify_nav():
{
"name": "About notify",
"link": "main.about_notify",
- },
- {
- "name": "Security",
- "link": "main.about_security",
+ "sub_navigation_items": [
+ {
+ "name": "Security",
+ "link": "main.about_security",
+ },
+ ],
},
]
diff --git a/app/templates/views/about/security.html b/app/templates/views/about/security.html
index b03e593a4..9ebc0420f 100644
--- a/app/templates/views/about/security.html
+++ b/app/templates/views/about/security.html
@@ -19,15 +19,18 @@ {{page_title}}
manage risks around information
- Notify.gov operates under a full three-year Authority-to-Operate (ATO) . This federal security authorization process leverages security
+ Notify.gov operates under a full three-year Authority-to-Operate (ATO) . This
+ federal security authorization process leverages security
controls provided by National Institute of Standards and Technology (NIST).
- Our infrastructure runs on cloud.gov and utilizes several
+ Our infrastructure runs on cloud.gov and utilizes several
services through Amazon Web
- Services (AWS), including AWS SNS for sending SMS
+ Services (AWS), including
+ AWS SNS for sending SMS
messages.
For more information about the Notify.gov infrastructure, contact us at Data retention
Multi-Factor Authentication
- Notify.gov uses Login.gov for enhanced security.
+ Notify.gov uses Login.gov for enhanced security.
Login.gov is an extra layer of security created by the government that uses multi-factor authentication and stronger
passwords to protect your account.
To access Notify.gov, users will use a Login.gov account associated with their agency (.gov) email with one of the
- multi-factor authentication
+ multi-factor authentication
methods offered through Login.gov.
From a318b2dd0f4ede746c54fc3f77fdf093e8174591 Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Wed, 20 Nov 2024 09:49:52 -0800
Subject: [PATCH 10/17] updated external links
---
app/templates/views/about/about.html | 15 +++++++--------
app/templates/views/about/why-text-messaging.html | 7 ++++---
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/app/templates/views/about/about.html b/app/templates/views/about/about.html
index bed63cfa7..cd52709c2 100644
--- a/app/templates/views/about/about.html
+++ b/app/templates/views/about/about.html
@@ -17,8 +17,9 @@ {{page_title}}
Meet people where they are
More effectively deliver program outcomes
Save administrative costs
- Implement 21st Century IDEA and other directives
+ Implement 21st Century
+ IDEA and other directives
Notify.gov is an easy-to-use, web-based platform. It requires no technical expertise or system integration — users
can create an account and get started within minutes. We take the security and privacy of messaging data seriously
@@ -56,9 +57,9 @@
Product Highlights
{% for item in product_highlights %}
-
+
-
+
{{item.card_heading}}
@@ -68,10 +69,8 @@ Product Highlights
{% endfor %}
- See if Notify is right for you
- Notify.gov is a product of the Public Benefits Studio , a product accelerator inside
+
See if Notify is right for you
+ Notify.gov is a product of the Public Benefits Studio , a product accelerator inside
the federal government.
-
-
{% endblock %}
diff --git a/app/templates/views/about/why-text-messaging.html b/app/templates/views/about/why-text-messaging.html
index 9b354479c..6aa0887cb 100644
--- a/app/templates/views/about/why-text-messaging.html
+++ b/app/templates/views/about/why-text-messaging.html
@@ -13,7 +13,7 @@
{{page_title}}
Reach people using a common method
- Confusing or unreceived notifications are one of the largest barriers to people getting and keeping
benefits. The typical ways the government communicates with people often fall short. Low income households are more
@@ -21,7 +21,8 @@
Reach people using a common method
- Pew Research shows that nearly all adults in the US have a cell phone. Reliance on smartphones
for online access is especially common among Americans with lower household incomes and those with lower levels of
formal education. Of those earning less than $30,000 a year, 28% say their mobile phone is the sole method to
@@ -38,7 +39,7 @@
Improve customer experience
Texting not only helps programs reach people using a nearly-universal communication method, it is a cost effective
- way to do so. With Notify.gov you can get started for free , allowing you to try out
+ way to do so. With Notify.gov you can get started for free , allowing you to try out
texting to complement your existing communications and outreach strategies.
What texting is best for
From a8ecb57e519d59dfe3d16943d08542836e22b443 Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Wed, 20 Nov 2024 10:25:39 -0800
Subject: [PATCH 11/17] removed logged in
---
.../sass/uswds/_uswds-theme-custom-styles.scss | 6 +-----
app/main/views/index.py | 17 ++++++++---------
2 files changed, 9 insertions(+), 14 deletions(-)
diff --git a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss
index da5d77bf2..cec48e82b 100644
--- a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss
+++ b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss
@@ -898,7 +898,7 @@ li.linked-card:hover svg,
display: block;
}
-.about-icon-list {
+.icon-list {
display: flex;
width: 24px;
height: 24px;
@@ -908,10 +908,6 @@ li.linked-card:hover svg,
margin-right: 4px;
}
-.usa-icon-list__content{
- padding-left: 0;
-}
-
.indented-paragraph {
margin-left: calc(24px + 4px);
margin-top: 4px;
diff --git a/app/main/views/index.py b/app/main/views/index.py
index c677b3524..7050adcde 100644
--- a/app/main/views/index.py
+++ b/app/main/views/index.py
@@ -275,15 +275,6 @@ def benchmark_performance():
)
-@main.route("/about/why-text-messaging")
-@user_is_logged_in
-def why_text_messaging():
- return render_template(
- "views/about/why-text-messaging.html",
- navigation_links=about_notify_nav(),
- )
-
-
@main.route("/using-notify/guidance")
@main.route("/guides/using-notify/guidance")
@user_is_logged_in
@@ -305,6 +296,14 @@ def about_notify():
)
+@main.route("/about/why-text-messaging")
+def why_text_messaging():
+ return render_template(
+ "views/about/why-text-messaging.html",
+ navigation_links=about_notify_nav(),
+ )
+
+
@main.route("/using-notify/guidance/create-and-send-messages")
@user_is_logged_in
def create_and_send_messages():
From 598a9af6f11f2905b0cc78d7c953ef48383132e3 Mon Sep 17 00:00:00 2001
From: Andrew Shumway
Date: Thu, 21 Nov 2024 11:42:30 -0700
Subject: [PATCH 12/17] Add redis ID to ignore vulnerability list in audit/no
current fix
---
.github/workflows/checks.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index f002bb3fc..c3ef5dcbb 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -144,6 +144,7 @@ jobs:
inputs: requirements.txt
ignore-vulns: |
PYSEC-2024-60
+ PYSEC-2022-43162
- name: Run npm audit
run: make npm-audit
From 8f30064f508e2fa0acb0dad7f5115522457626d2 Mon Sep 17 00:00:00 2001
From: Kenneth Kehl <@kkehl@flexion.us>
Date: Thu, 21 Nov 2024 15:08:49 -0800
Subject: [PATCH 13/17] add carrier column to reports
---
.ds.baseline | 4 ++--
app/config.py | 4 +---
app/main/views/index.py | 10 ++++------
app/navigation.py | 2 +-
app/utils/csv.py | 4 ++++
tests/app/utils/test_csv.py | 15 +++++++++++----
6 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/.ds.baseline b/.ds.baseline
index c64d22627..56c3afc7d 100644
--- a/.ds.baseline
+++ b/.ds.baseline
@@ -161,7 +161,7 @@
"filename": "app/config.py",
"hashed_secret": "577a4c667e4af8682ca431857214b3a920883efc",
"is_verified": false,
- "line_number": 125,
+ "line_number": 123,
"is_secret": false
}
],
@@ -684,5 +684,5 @@
}
]
},
- "generated_at": "2024-11-14T15:53:44Z"
+ "generated_at": "2024-11-21T23:08:45Z"
}
diff --git a/app/config.py b/app/config.py
index f40b46dea..146230047 100644
--- a/app/config.py
+++ b/app/config.py
@@ -91,9 +91,7 @@ class Config(object):
getenv("FEATURE_BEST_PRACTICES_ENABLED", "false") == "true"
)
- FEATURE_ABOUT_PAGE_ENABLED = (
- getenv("FEATURE_ABOUT_PAGE_ENABLED", "false") == "true"
- )
+ FEATURE_ABOUT_PAGE_ENABLED = getenv("FEATURE_ABOUT_PAGE_ENABLED", "false") == "true"
def _s3_credentials_from_env(bucket_prefix):
diff --git a/app/main/views/index.py b/app/main/views/index.py
index 9982a8b74..fbf7979a3 100644
--- a/app/main/views/index.py
+++ b/app/main/views/index.py
@@ -30,15 +30,13 @@
# Hook to check for feature flags
@main.before_request
def check_feature_flags():
- if (
- request.path.startswith("/guides/best-practices")
- and not current_app.config.get("FEATURE_BEST_PRACTICES_ENABLED", False)
+ if request.path.startswith("/guides/best-practices") and not current_app.config.get(
+ "FEATURE_BEST_PRACTICES_ENABLED", False
):
abort(404)
- if (
- request.path.startswith("/about")
- and not current_app.config.get("FEATURE_ABOUT_PAGE_ENABLED", False)
+ if request.path.startswith("/about") and not current_app.config.get(
+ "FEATURE_ABOUT_PAGE_ENABLED", False
):
abort(404)
diff --git a/app/navigation.py b/app/navigation.py
index a02df484d..271d6848b 100644
--- a/app/navigation.py
+++ b/app/navigation.py
@@ -53,7 +53,7 @@ class HeaderNavigation(Navigation):
"establish_trust",
"write_for_action",
"multiple_languages",
- "benchmark_performance"
+ "benchmark_performance",
},
"using_notify": {
"get_started",
diff --git a/app/utils/csv.py b/app/utils/csv.py
index 4ed6d16b5..79e3535c8 100644
--- a/app/utils/csv.py
+++ b/app/utils/csv.py
@@ -103,6 +103,7 @@ def generate_notifications_csv(**kwargs):
"Carrier Response",
"Status",
"Time",
+ "Carrier",
]
for header in original_column_headers:
if header.lower() != "phone number":
@@ -118,6 +119,7 @@ def generate_notifications_csv(**kwargs):
"Carrier Response",
"Status",
"Time",
+ "Carrier",
]
yield ",".join(fieldnames) + "\n"
@@ -140,6 +142,7 @@ def generate_notifications_csv(**kwargs):
notification["provider_response"],
notification["status"],
preferred_tz_created_at,
+ notification["carrier"],
]
for header in original_column_headers:
if header.lower() != "phone number":
@@ -158,6 +161,7 @@ def generate_notifications_csv(**kwargs):
notification["provider_response"],
notification["status"],
preferred_tz_created_at,
+ notification["carrier"],
]
yield Spreadsheet.from_rows([map(str, values)]).as_csv_data
diff --git a/tests/app/utils/test_csv.py b/tests/app/utils/test_csv.py
index d603fcd0e..db4b6a0ec 100644
--- a/tests/app/utils/test_csv.py
+++ b/tests/app/utils/test_csv.py
@@ -58,6 +58,7 @@ def _get(
"to": recipient,
"recipient": recipient,
"client_reference": "ref 1234",
+ "carrier": "AT&T Mobility",
}
for i in range(rows)
],
@@ -88,15 +89,15 @@ def get_notifications_csv_mock(
(
None,
[
- "Phone Number,Template,Sent by,Batch File,Carrier Response,Status,Time\n",
- "8005555555,foo,,,Did not like it,Delivered,1943-04-19 08:00:00 AM US/Eastern\r\n",
+ "Phone Number,Template,Sent by,Batch File,Carrier Response,Status,Time,Carrier\n",
+ "8005555555,foo,,,Did not like it,Delivered,1943-04-19 08:00:00 AM US/Eastern,AT&T Mobility\r\n",
],
),
(
"Anne Example",
[
- "Phone Number,Template,Sent by,Batch File,Carrier Response,Status,Time\n",
- "8005555555,foo,Anne Example,,Did not like it,Delivered,1943-04-19 08:00:00 AM US/Eastern\r\n", # noqa
+ "Phone Number,Template,Sent by,Batch File,Carrier Response,Status,Time,Carrier\n",
+ "8005555555,foo,Anne Example,,Did not like it,Delivered,1943-04-19 08:00:00 AM US/Eastern,AT&T Mobility\r\n", # noqa
],
),
],
@@ -135,6 +136,7 @@ def test_generate_notifications_csv_without_job(
"Carrier Response",
"Status",
"Time",
+ "Carrier",
],
[
"8005555555",
@@ -144,6 +146,7 @@ def test_generate_notifications_csv_without_job(
"Did not like it",
"Delivered",
"1943-04-19 08:00:00 AM US/Eastern",
+ "AT&T Mobility",
],
),
(
@@ -159,6 +162,7 @@ def test_generate_notifications_csv_without_job(
"Carrier Response",
"Status",
"Time",
+ "Carrier",
"a",
"b",
"c",
@@ -171,6 +175,7 @@ def test_generate_notifications_csv_without_job(
"Did not like it",
"Delivered",
"1943-04-19 08:00:00 AM US/Eastern",
+ "AT&T Mobility",
"🐜",
"🐝",
"🦀",
@@ -189,6 +194,7 @@ def test_generate_notifications_csv_without_job(
"Carrier Response",
"Status",
"Time",
+ "Carrier",
"a",
"b",
"c",
@@ -201,6 +207,7 @@ def test_generate_notifications_csv_without_job(
"Did not like it",
"Delivered",
"1943-04-19 08:00:00 AM US/Eastern",
+ "AT&T Mobility",
"🐜,🐜",
"🐝,🐝",
"🦀",
From d4c646a788ec66ed4d139044255b45f523cc1c58 Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Tue, 26 Nov 2024 13:45:43 -0800
Subject: [PATCH 14/17] making sub nav items conditional on feature flag
---
app/main/views/index.py | 1 -
app/main/views/sub_navigation_dictionaries.py | 55 ++++++-------------
2 files changed, 16 insertions(+), 40 deletions(-)
diff --git a/app/main/views/index.py b/app/main/views/index.py
index 983099a4f..49eeae427 100644
--- a/app/main/views/index.py
+++ b/app/main/views/index.py
@@ -292,7 +292,6 @@ def benchmark_performance():
)
-@main.route("/using-notify/guidance")
@main.route("/guides/using-notify/guidance")
@user_is_logged_in
def guidance_index():
diff --git a/app/main/views/sub_navigation_dictionaries.py b/app/main/views/sub_navigation_dictionaries.py
index 3c81dc7ed..0cf436424 100644
--- a/app/main/views/sub_navigation_dictionaries.py
+++ b/app/main/views/sub_navigation_dictionaries.py
@@ -1,3 +1,7 @@
+from flask import (
+ current_app,
+)
+
def features_nav():
return [
{
@@ -22,46 +26,19 @@ def features_nav():
def using_notify_nav():
- return [
- {
- "name": "Get started",
- "link": "main.get_started",
- },
- {
- "name": "Guides",
- "link": "main.best_practices",
- },
- {
- "name": "Trial mode",
- "link": "main.trial_mode_new",
- },
- {
- "name": "Tracking usage",
- "link": "main.pricing",
- },
- {
- "name": "Delivery status",
- "link": "main.message_status",
- },
- {
- "name": "Guidance",
- "link": "main.guidance_index",
- # "sub_navigation_items": [
- # {
- # "name": "Formatting",
- # "link": "main.edit_and_format_messages",
- # },
- # {
- # "name": "Send files by email",
- # "link": "main.send_files_by_email",
- # },
- # ]
- # {
- # "name": "API documentation",
- # "link": "main.documentation",
- # },
- },
+ nav_items = [
+ {"name": "Get started", "link": "main.get_started"},
+ {"name": "Guides", "link": "main.best_practices"},
+ {"name": "Trial mode", "link": "main.trial_mode_new"},
+ {"name": "Tracking usage", "link": "main.pricing"},
+ {"name": "Delivery Status", "link": "main.message_status"},
+ {"name": "Guidance", "link": "main.guidance_index"},
+
]
+ if not current_app.config.get("FEATURE_BEST_PRACTICES_ENABLED"):
+ nav_items = [item for item in nav_items if item["link"] != "main.best_practices"]
+
+ return nav_items
def best_practices_nav():
From e638eb4ad13cf2a88a10c975674df8e5312b8122 Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Tue, 26 Nov 2024 13:50:00 -0800
Subject: [PATCH 15/17] isort fix
---
app/main/views/sub_navigation_dictionaries.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/app/main/views/sub_navigation_dictionaries.py b/app/main/views/sub_navigation_dictionaries.py
index 0cf436424..bd44c1319 100644
--- a/app/main/views/sub_navigation_dictionaries.py
+++ b/app/main/views/sub_navigation_dictionaries.py
@@ -1,6 +1,5 @@
-from flask import (
- current_app,
-)
+from flask import current_app
+
def features_nav():
return [
From a5c65439b601389d7e7a7325405117389f7a232e Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Tue, 26 Nov 2024 14:38:15 -0800
Subject: [PATCH 16/17] update e2e
---
app/main/views/sub_navigation_dictionaries.py | 5 +++--
tests/end_to_end/test_best_practices_content_pages.py | 4 ++--
urls.js | 2 +-
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/app/main/views/sub_navigation_dictionaries.py b/app/main/views/sub_navigation_dictionaries.py
index bd44c1319..603094cd1 100644
--- a/app/main/views/sub_navigation_dictionaries.py
+++ b/app/main/views/sub_navigation_dictionaries.py
@@ -32,10 +32,11 @@ def using_notify_nav():
{"name": "Tracking usage", "link": "main.pricing"},
{"name": "Delivery Status", "link": "main.message_status"},
{"name": "Guidance", "link": "main.guidance_index"},
-
]
if not current_app.config.get("FEATURE_BEST_PRACTICES_ENABLED"):
- nav_items = [item for item in nav_items if item["link"] != "main.best_practices"]
+ nav_items = [
+ item for item in nav_items if item["link"] != "main.best_practices"
+ ]
return nav_items
diff --git a/tests/end_to_end/test_best_practices_content_pages.py b/tests/end_to_end/test_best_practices_content_pages.py
index 962100de3..031e4baef 100644
--- a/tests/end_to_end/test_best_practices_content_pages.py
+++ b/tests/end_to_end/test_best_practices_content_pages.py
@@ -11,7 +11,7 @@
def test_best_practices_side_menu(authenticated_page):
page = authenticated_page
- page.goto(f"{E2E_TEST_URI}/best-practices")
+ page.goto(f"{E2E_TEST_URI}/guides/best-practices")
page.wait_for_load_state("domcontentloaded")
check_axe_report(page)
@@ -58,7 +58,7 @@ def test_best_practices_side_menu(authenticated_page):
def test_breadcrumbs_best_practices(authenticated_page):
page = authenticated_page
- page.goto(f"{E2E_TEST_URI}/best-practices")
+ page.goto(f"{E2E_TEST_URI}/guides/best-practices")
page.wait_for_load_state("domcontentloaded")
check_axe_report(page)
diff --git a/urls.js b/urls.js
index 0440430ec..2279b5a79 100644
--- a/urls.js
+++ b/urls.js
@@ -8,7 +8,7 @@ const sublinks = [
{ label: 'Trial Mode', path: '/using-notify/trial-mode' },
{ label: 'Pricing', path: '/using-notify/pricing' },
{ label: 'Delivery Status', path: '/using-notify/delivery-status' },
- { label: 'Guidance', path: '/using-notify/guidance' },
+ { label: 'Guidance', path: '/guides/using-notify/guidance' },
{ label: 'Features', path: '/features' },
{ label: 'Roadmap', path: '/features/roadmap' },
{ label: 'Security', path: '/features/security' },
From 3dd8d2508977242b0593c2d9f6d1c8f2859b56c9 Mon Sep 17 00:00:00 2001
From: Carlo Costino
Date: Tue, 26 Nov 2024 21:02:45 -0500
Subject: [PATCH 17/17] Bump admin production memory to 2GB per instance
This changeset bumps the admin production memory to 2GB per instance. We were noticing that the admin app was consuming almost all of the 1.5GB memory currently.
Signed-off-by: Carlo Costino
---
deploy-config/production.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/deploy-config/production.yml b/deploy-config/production.yml
index 42a681cb4..9f5cffc89 100644
--- a/deploy-config/production.yml
+++ b/deploy-config/production.yml
@@ -1,6 +1,6 @@
env: production
instances: 2
-memory: 1.5G
+memory: 2G
command: newrelic-admin run-program gunicorn -c /home/vcap/app/gunicorn_config.py application
public_admin_route: beta.notify.gov
cloud_dot_gov_route: notify.app.cloud.gov