diff --git a/.ds.baseline b/.ds.baseline index 56c3afc7d..df4be33a6 100644 --- a/.ds.baseline +++ b/.ds.baseline @@ -161,7 +161,7 @@ "filename": "app/config.py", "hashed_secret": "577a4c667e4af8682ca431857214b3a920883efc", "is_verified": false, - "line_number": 123, + "line_number": 120, "is_secret": false } ], @@ -555,7 +555,7 @@ "filename": "tests/app/main/views/test_register.py", "hashed_secret": "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8", "is_verified": false, - "line_number": 201, + "line_number": 200, "is_secret": false }, { @@ -563,7 +563,7 @@ "filename": "tests/app/main/views/test_register.py", "hashed_secret": "bb5b7caa27d005d38039e3797c3ddb9bcd22c3c8", "is_verified": false, - "line_number": 274, + "line_number": 273, "is_secret": false } ], @@ -684,5 +684,5 @@ } ] }, - "generated_at": "2024-11-21T23:08:45Z" + "generated_at": "2025-01-13T20:16:58Z" } diff --git a/app/__init__.py b/app/__init__.py index 6f9f15e83..54248bda0 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -168,20 +168,12 @@ def _csp(config): def create_app(application): - application.config["FEATURE_BEST_PRACTICES_ENABLED"] = ( - os.getenv("FEATURE_BEST_PRACTICES_ENABLED", "false").lower() == "true" - ) - @application.context_processor def inject_feature_flags(): - feature_best_practices_enabled = application.config.get( - "FEATURE_BEST_PRACTICES_ENABLED", False - ) feature_about_page_enabled = application.config.get( "FEATURE_ABOUT_PAGE_ENABLED", False ) return dict( - FEATURE_BEST_PRACTICES_ENABLED=feature_best_practices_enabled, FEATURE_ABOUT_PAGE_ENABLED=feature_about_page_enabled, ) diff --git a/app/assets/javascripts/sidenav.js b/app/assets/javascripts/sidenav.js new file mode 100644 index 000000000..24c9f2c5b --- /dev/null +++ b/app/assets/javascripts/sidenav.js @@ -0,0 +1,57 @@ +document.addEventListener('DOMContentLoaded', () => { + const sidenavItems = document.querySelectorAll('.usa-sidenav__item > .parent-link'); + let lastPath = window.location.pathname; + let debounceTimeout = null; + + sidenavItems.forEach((link) => { + const parentItem = link.parentElement; + const sublist = parentItem.querySelector('.usa-sidenav__sublist'); + const targetHref = link.getAttribute('href'); + + // initialize the menu to open the correct submenu based on the current route + if (window.location.pathname.startsWith(targetHref)) { + parentItem.classList.add('open'); + link.setAttribute('aria-expanded', 'true'); + } + + link.addEventListener('click', (event) => { + const currentPath = window.location.pathname; + + // prevent default behavior only if navigating to the same route + if (currentPath === targetHref) { + event.preventDefault(); + return; + } + + if (sublist && !parentItem.classList.contains('open')) { + // debounce the menu update to avoid flickering + clearTimeout(debounceTimeout); + debounceTimeout = setTimeout(() => { + parentItem.classList.add('open'); + link.setAttribute('aria-expanded', 'true'); + }, 50); + } + }); + }); + + // handle browser back/forward navigation + window.addEventListener('popstate', () => { + const currentPath = window.location.pathname; + + // sync menu state + sidenavItems.forEach((link) => { + const parentItem = link.parentElement; + const targetHref = link.getAttribute('href'); + + if (currentPath.startsWith(targetHref)) { + parentItem.classList.add('open'); + link.setAttribute('aria-expanded', 'true'); + } else { + parentItem.classList.remove('open'); + link.setAttribute('aria-expanded', 'false'); + } + }); + + lastPath = currentPath; + }); + }); diff --git a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss index afe67dd14..0bb1aab7e 100644 --- a/app/assets/sass/uswds/_uswds-theme-custom-styles.scss +++ b/app/assets/sass/uswds/_uswds-theme-custom-styles.scss @@ -198,8 +198,8 @@ td.table-empty-message { word-wrap: break-word; } - border: 1px solid color('gray-cool-10'); - padding: units(2); + // border: 1px solid color('gray-cool-10'); + // padding: units(2); .tick-cross-list-permissions { margin: units(1) 0; @@ -852,21 +852,36 @@ $do-dont-top-bar-width: 1; } } -.linked-content:hover { - cursor: pointer; - transform: scale(1.05); - transition: transform 0.3s ease, background-color 0.3s ease; -} +.linked-card a { + text-decoration: none; + .usa-card__header, .usa-card__media { + @include at-media('tablet') { + padding-top: units(1); + } + } + &:visited { + color: color('ink'); + } + &:focus .usa-card__container { + outline: units(2px) solid color('blue-40v'); + outline-offset: 0.3rem; + } + &:hover .usa-card__container, &:focus .usa-card__container { + border-color: color('blue-60v'); + background: color('blue-60v'); + p, h3 { + color: white; + } + svg { + filter: brightness(0) invert(1); + } + } -li.linked-card:hover > div:first-child:hover { - border-color: #005ea2; -} + &.linked-content:hover, &.linked-content:focus { + cursor: pointer; + transition: transform 0.3s ease, background-color 0.3s ease; + } -li.linked-card:hover h4, -li.linked-card:hover p, -li.linked-card:hover svg, -.best-practices_card_img:hover { - color: #005ea2; } .best-practices_card_img { @@ -876,10 +891,6 @@ li.linked-card:hover svg, margin: 0 auto; } -.best-practices_link { - text-decoration: none; -} - .usa-link--downloadable { position: relative; } @@ -914,17 +925,25 @@ li.linked-card:hover svg, mask-size: 1.75ex 1.75ex; } +nav.nav { + position: sticky; + top: units(3); +} + .usa-sidenav__sublist { display: none; } -.usa-sidenav__item:hover .usa-sidenav__sublist, -.usa-sidenav__item:focus-within .usa-sidenav__sublist { +.usa-sidenav__item.open .usa-sidenav__sublist { display: block; } -.usa-sidenav__item a { - display: block; +.usa-sidenav__sublist .bold { + font-weight: bold; +} + +.usa-sidenav__sublist li[role="menuitem"] { + border-top: 1px solid #dfe1e2; } .icon-list { diff --git a/app/config.py b/app/config.py index 146230047..a82c9a1ab 100644 --- a/app/config.py +++ b/app/config.py @@ -87,9 +87,6 @@ class Config(object): "tts-benefits-studio@gsa.gov", ], } - FEATURE_BEST_PRACTICES_ENABLED = ( - getenv("FEATURE_BEST_PRACTICES_ENABLED", "false") == "true" - ) FEATURE_ABOUT_PAGE_ENABLED = getenv("FEATURE_ABOUT_PAGE_ENABLED", "false") == "true" diff --git a/app/main/validators.py b/app/main/validators.py index 1dfc97c48..e1292b959 100644 --- a/app/main/validators.py +++ b/app/main/validators.py @@ -41,14 +41,8 @@ class ValidGovEmail: if field.data == "": return - from flask import url_for + message = "Enter a public sector email address." - message = """ - Enter a public sector email address or - find out who can use Notify - """.format( - url_for("main.features") - ) if not is_gov_user(field.data.lower()): raise ValidationError(message) diff --git a/app/main/views/index.py b/app/main/views/index.py index fa18b0998..466a2dea5 100644 --- a/app/main/views/index.py +++ b/app/main/views/index.py @@ -15,8 +15,6 @@ 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, ) from app.utils.user import user_is_logged_in @@ -25,11 +23,6 @@ from app.utils.user import user_is_logged_in # Hook to check for feature flags @main.before_request def check_feature_flags(): - if request.path.startswith("/guides") 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 ): @@ -40,8 +33,8 @@ def check_feature_flags(): def test_feature_flags(): return jsonify( { - "FEATURE_BEST_PRACTICES_ENABLED": current_app.config[ - "FEATURE_BEST_PRACTICES_ENABLED" + "FEATURE_ABOUT_PAGE_ENABLED": current_app.config[ + "FEATURE_ABOUT_PAGE_ENABLED" ] } ) @@ -111,44 +104,6 @@ def callbacks(): return redirect(url_for("main.documentation"), 301) -# --- Features page set --- # - - -@main.route("/features") -@user_is_logged_in -def features(): - return render_template("views/features.html", navigation_links=features_nav()) - - -@main.route("/features/roadmap", endpoint="roadmap") -@user_is_logged_in -def roadmap(): - return render_template("views/roadmap.html", navigation_links=features_nav()) - - -@main.route("/features/sms") -@user_is_logged_in -def features_sms(): - return render_template( - "views/features/text-messages.html", navigation_links=features_nav() - ) - - -@main.route("/features/security", endpoint="security") -@user_is_logged_in -def security(): - return render_template("views/security.html", navigation_links=features_nav()) - - -@main.route("/features/using_notify") -@user_is_logged_in -def using_notify(): - return ( - render_template("views/using-notify.html", navigation_links=features_nav()), - 410, - ) - - @main.route("/using-notify/delivery-status") @user_is_logged_in def message_status(): @@ -203,78 +158,75 @@ def trial_mode_new(): ) -@main.route("/guides/best-practices") +@main.route("/using-notify/best-practices") @user_is_logged_in def best_practices(): return render_template( "views/guides/best-practices.html", - navigation_links=best_practices_nav(), + navigation_links=using_notify_nav(), ) -@main.route("/guides/clear-goals") +@main.route("/using-notify/best-practices/clear-goals") @user_is_logged_in def clear_goals(): return render_template( "views/guides/clear-goals.html", - navigation_links=best_practices_nav(), + navigation_links=using_notify_nav(), ) -@main.route("/guides/rules-and-regulations") +@main.route("/using-notify/best-practices/rules-and-regulations") @user_is_logged_in def rules_and_regulations(): return render_template( "views/guides/rules-and-regulations.html", - navigation_links=best_practices_nav(), + navigation_links=using_notify_nav(), ) -@main.route("/guides/establish-trust") +@main.route("/using-notify/best-practices/establish-trust") @user_is_logged_in def establish_trust(): return render_template( "views/guides/establish-trust.html", - navigation_links=best_practices_nav(), + navigation_links=using_notify_nav(), ) -@main.route("/guides/write-for-action") +@main.route("/using-notify/best-practices/write-for-action") @user_is_logged_in def write_for_action(): return render_template( "views/guides/write-for-action.html", - navigation_links=best_practices_nav(), + navigation_links=using_notify_nav(), ) -@main.route("/guides/multiple-languages") +@main.route("/using-notify/best-practices/multiple-languages") @user_is_logged_in def multiple_languages(): return render_template( "views/guides/multiple-languages.html", - navigation_links=best_practices_nav(), + navigation_links=using_notify_nav(), ) -@main.route("/guides/benchmark-performance") +@main.route("/using-notify/best-practices/benchmark-performance") @user_is_logged_in def benchmark_performance(): return render_template( "views/guides/benchmark-performance.html", - navigation_links=best_practices_nav(), + navigation_links=using_notify_nav(), ) -@main.route("/guides/using-notify/guidance") +@main.route("/using-notify/guidance") @user_is_logged_in def guidance_index(): return render_template( "views/guidance/index.html", navigation_links=using_notify_nav(), - feature_best_practices_enabled=current_app.config[ - "FEATURE_BEST_PRACTICES_ENABLED" - ], ) @@ -357,14 +309,12 @@ def studio(): # --- Redirects --- # -@main.route("/roadmap", endpoint="old_roadmap") @main.route("/information-security", endpoint="information_security") @main.route("/using_notify", endpoint="old_using_notify") @main.route("/information-risk-management", endpoint="information_risk_management") @main.route("/integration_testing", endpoint="old_integration_testing") def old_page_redirects(): redirects = { - "main.old_roadmap": "main.roadmap", "main.information_security": "main.using_notify", "main.old_using_notify": "main.using_notify", "main.information_risk_management": "main.security", diff --git a/app/main/views/sub_navigation_dictionaries.py b/app/main/views/sub_navigation_dictionaries.py index 0e896b64e..3b2cf84c1 100644 --- a/app/main/views/sub_navigation_dictionaries.py +++ b/app/main/views/sub_navigation_dictionaries.py @@ -1,89 +1,45 @@ -from flask import current_app - - -def features_nav(): - return [ - { - "name": "Features", - "link": "main.features", - "sub_navigation_items": [ - # { - # "name": "Text messages", - # "link": "main.features_sms", - # }, - ], - }, - { - "name": "Roadmap", - "link": "main.roadmap", - }, - { - "name": "Security", - "link": "main.security", - }, - ] - - def using_notify_nav(): nav_items = [ {"name": "Get started", "link": "main.get_started"}, - {"name": "Guides", "link": "main.best_practices"}, + { + "name": "Best Practices", + "link": "main.best_practices", + "sub_navigation_items": [ + { + "name": "Clear goals", + "link": "main.clear_goals", + }, + { + "name": "Rules and regulations", + "link": "main.rules_and_regulations", + }, + { + "name": "Establish trust", + "link": "main.establish_trust", + }, + { + "name": "Write for action", + "link": "main.write_for_action", + }, + { + "name": "Multiple languages", + "link": "main.multiple_languages", + }, + { + "name": "Benchmark performance", + "link": "main.benchmark_performance", + }, + ], + }, {"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(): - return [ - { - "name": "Best Practices", - "link": "main.best_practices", - }, - { - "name": "Clear goals", - "link": "main.clear_goals", - }, - { - "name": "Rules and regulations", - "link": "main.rules_and_regulations", - }, - { - "name": "Establish trust", - "link": "main.establish_trust", - "sub_navigation_items": [ - { - "name": "Get the word out", - "link": "main.establish_trust#get-the-word-out", - }, - { - "name": "As people receive texts", - "link": "main.establish_trust#as-people-receive-texts", - }, - ], - }, - { - "name": "Write for action", - "link": "main.write_for_action", - }, - { - "name": "Multiple languages", - "link": "main.multiple_languages", - }, - { - "name": "Benchmark performance", - "link": "main.benchmark_performance", - }, - ] - - def about_notify_nav(): return [ { @@ -93,20 +49,6 @@ def about_notify_nav(): { "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", - }, - { - "name": "What texting is best for", - "link": "main.why_text_messaging#what-texting-is-best-for", - }, - ], }, { "name": "Security", diff --git a/app/navigation.py b/app/navigation.py index 271d6848b..424d03ae3 100644 --- a/app/navigation.py +++ b/app/navigation.py @@ -40,12 +40,6 @@ class HeaderNavigation(Navigation): "support": { "support", }, - "features": { - "features", - "features_sms", - "roadmap", - "security", - }, "best_practices": { "best_practices", "clear_goals", @@ -57,7 +51,6 @@ class HeaderNavigation(Navigation): }, "using_notify": { "get_started", - "using_notify", "pricing", "trial_mode_new", "message_status", diff --git a/app/templates/base.html b/app/templates/base.html index 0348832bd..1d2778a9e 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -56,28 +56,19 @@ {% for item in navigation_links %}
If you work for the government, you can use Notify.gov to keep your users updated.
-Notify makes it easy to create, customize, and send text messages.
- +Notify makes it easy to create, customize, and send text messages
. +You do not need any technical knowledge to use Notify.
{% if not current_user.is_authenticated %}Create an account for free and try it yourself.
diff --git a/app/templates/views/guidance/index.html b/app/templates/views/guidance/index.html index 2e63c6212..062bae555 100644 --- a/app/templates/views/guidance/index.html +++ b/app/templates/views/guidance/index.html @@ -8,245 +8,103 @@ {% endblock %} {% block content_column_content %} +Notify allows you to easily create templates for messages for your recipients. You can customize messages to encourage +your recipient to manage their benefits and increase follow-through.
+Below we explain how to:
-Notify allows you easily to create templates for messages for your recipients. You can customize messages to encourage - your recipient to manage their benefits and increase follow through.
-Below we explain how to:
+ -Effective texts will help your message recipients take the steps needed to secure and keep the benefits and services - they depend on. To craft an effective text:
- -When composing a text message, links to websites or online applications can help your recipient respond quickly.
- -We do not recommend using a third-party link-shortening service because:
-Personalizing your content can increase response rates and help the recipient know the text is legitimate.
-To personalize with the recipient's first name and include a reference number:
-State WIC: Hello ((first name)), your reference is ((ref number)). Please provide this number when you call 555-123-1234 to make an appointment.
- -Note that variations in the length of personalized content can impact the length of specific messages, and may affect - the number of parts used.
- - {# Add conditional content #} -Conditional (or optional) content appears only when a recipient meets certain criteria. This feature allows you to make - all or part of the message contingent upon specific criteria associated with the recipient.
- -State SNAP: Renewal applications are due by March 15. ((under18??Please get your application signed by a parent or - guardian.))
-State Medicaid: Please call 555-123-1234 to schedule an appointment. ((homebound??Virtual visits are available.))
-((English??We’ve identified unauthorized use on your EBT account. Call the phone number on the back of your card to - cancel or go to your local CSO for immediate replacement.))((Spanish??Hemos identificado un uso no autorizado en su - cuenta EBT. Llame al número de teléfono que aparece en el reverso de su tarjeta para cancelarla o diríjase a su CSO - local para que se la sustituyan inmediatamente.))
-You can help your recipients identify your texts as legitimate by customizing your messages to clearly state who they - are from. Consider using the program or benefit name that is most familiar to your recipients.
+To change the text message sender from the default service name:
-When composing a text message, links to websites or online applications can help your recipient respond quickly.
- {# Prepare your data #} -The easiest and most efficient way to personalize your content is by uploading a spreadsheet. Notify can accommodate - many file formats and structures.
+Notify can accept files in the following formats: CSV, TSV, ODS, and Microsoft Excel.
+We do not recommend using a third-party link-shortening service because:
+Personalizing your content can increase response rates and help the recipient know the text is legitimate.
+If you are sending a message with personalized content, such as the first name of the recipient or the appointment time - and location, the names of the column headings have to match the indicator included in the message template.
-For example, if the personalized content is the first name of the recipient, and we are using the spreadsheet below, the - indicator in the message needs to be ((First name)), not ((firstname)) or ((name)).
+If you are sending messages with conditional content, such as content based on the recipient’s preferred language or - location, the flag to receive the content needs to be captured in its own column with a Yes or No (Y/N) flag.
+To personalize with the recipient's first name and include a reference number:
+State WIC: Hello ((first name)), your reference is ((ref number)). Please provide this number when you call 555-123-1234 to make an appointment.
-| Phone number | -First name | -Last name | -Spanish | -English | -Date | -Time | -Location | -
|---|---|---|---|---|---|---|---|
| 123-456-7890 | -Lulu | -Praether | -N | -Y | -November 2, 2023 | -3:25 | -123 Ford Rd. | -
| 234-567-8901 | -Sela | -Appel | -Y | -N | -November 2, 2023 | -4:00 | -123 Ford Rd. | -
| 123-456-7890 | -Dexter | -Moseley | -N | -Y | -November 2, 2023 | -2:00 | -123 Ford Rd. | -
Note that variations in the length of personalized content can impact the length of specific messages, and may affect +the number of parts used.
- {% if not feature_best_practices_enabled %} - {# Preventing fraud #} -Texting fraud is ever prevalent and while we can’t eliminate the risk, we can reduce the chances that recipients will - fall victim to fraud.
-Conditional (or optional) content appears only when a recipient meets certain criteria. This feature allows you to make +all or part of the message contingent upon specific criteria associated with the recipient.
+ +State SNAP: Renewal applications are due by March 15. ((under18??Please get your application signed by a parent or + guardian.))
+State Medicaid: Please call 555-123-1234 to schedule an appointment. ((homebound??Virtual visits are available.))
+((English??We’ve identified unauthorized use on your EBT account. Call the phone number on the back of your card to + cancel or go to your local CSO for immediate replacement.))((Spanish??Hemos identificado un uso no autorizado en su + cuenta EBT. Llame al número de teléfono que aparece en el reverso de su tarjeta para cancelarla o diríjase a su CSO + local para que se la sustituyan inmediatamente.))
+State Transit Dept: We're piloting a new way to get important reminders to our staff. Save this number to your phone, - you'll receive updates from us here.
-State Agency: This number is unmonitored. To contact us, call us at 555-123-1234. We will never ask for personal details - in a text. If you have questions about how to protect your privacy, see statename.gov/privacy.
-Benchmark: 80% of texts are +
Benchmark: 80% of texts are successfully delivered
-- You may discover that some numbers are temporarily or permanently unavailable due to service being - discontinued, - numbers changing, or being a landline. -
-+ You may discover that some numbers are temporarily or permanently unavailable due to service being + discontinued, + numbers changing, or being a landline. +
+Benchmark: Engagement rates with texts ranged from 17% + to 26%
++ The highest rate of engagement with a text comes within hours of sending. Engagement rates include any kind + of + action taken due to a text, including replying “STOP” to prevent future texts. +
+Benchmark: Engagement rates with texts ranged from 17% - to 26%
-- The highest rate of engagement with a text comes within hours of sending. Engagement rates include any kind - of - action taken due to a text, including replying “STOP” to prevent future texts. -
-Benchmark: Requesting appointments after receiving texts ranged +
Benchmark: Requesting appointments after receiving texts ranged from 4% to 9%
-- Requesting appointments is a specific type of engagement. Provide a phone number or link to an online - appointment - request form. -
-+ Requesting appointments is a specific type of engagement. Provide a phone number or link to an online + appointment + request form. +
+Benchmark: Clients were 79% more - likely - to keep - their appointment after receiving a text reminder.
-You will likely see more completed appointments.
-Benchmark: Clients were 79% more + likely to keep their appointment after receiving a text reminder.
+You will likely see more completed appointments.
+Benchmark: Clients were 55% more + likely to complete an interview after receiving an interview reminder
+You will likely see more completed interviews.
+Benchmark: Clients were 55% more - likely - to complete - an interview after receiving an interview reminder
-You will likely see more completed interviews.
-+
Benchmark: Clients were 6% more likely to complete document submission after receiving a customized list of required documents via text
-To encourage response, provide a custom list of the needed documents and information about how to submit - them. -
-To encourage response, provide a custom list of the needed documents and information about how to submit + them. +
+Benchmark: Text reminders improved case maintenance rates by 21%
-You may see less turnover in your case rates.
-Benchmark: Text reminders improved case maintenance rates by 21%
+You may see less turnover in your case rates.
+This set of best practices will help you get an effective texting initiative up and running.
-Review your drafted hypothesis with your team to make sure everyone is aligned on your desired goals. A clear and - concise hypothesis can help you decide how to write text message + concise hypothesis can help you decide how to write text message content that provokes action.
diff --git a/app/templates/views/guides/establish-trust.html b/app/templates/views/guides/establish-trust.html index 3383315ba..0ab95c73a 100644 --- a/app/templates/views/guides/establish-trust.html +++ b/app/templates/views/guides/establish-trust.html @@ -10,7 +10,7 @@ {% endblock %} {% block content_column_content %} -{{ breadcrumbs.breadcrumb(page_title, "Guides", "main.best_practices") }} +{{ breadcrumbs.breadcrumb(page_title, "Best Practices", "main.best_practices") }}There is no policy requirement for senders to communicate opt-out options, but including instructions in introductory and/or + href="../best-practices/establish-trust#as-people-receive-texts"> including instructions in introductory and/or auto-response texts on how to opt out and opt back in are effective ways to establish trust with your audience.
diff --git a/app/templates/views/guides/write-for-action.html b/app/templates/views/guides/write-for-action.html index d3019596c..ff382864a 100644 --- a/app/templates/views/guides/write-for-action.html +++ b/app/templates/views/guides/write-for-action.html @@ -9,7 +9,7 @@ {% endblock %} {% block content_column_content %} -{{ breadcrumbs.breadcrumb(page_title, "Guides", "main.best_practices") }} +{{ breadcrumbs.breadcrumb(page_title, "Best Practices", "main.best_practices") }}Sometimes Notify receives more detailed information from the carriers on the status of messages, and these can be found in the downloadable reports. Not all carriers provide the same level of detail regarding delivery and some delivery statutes have a slight variation in word choice. Notify includes this information in the reports to provide you as much - detail as possible. Remember, for security purposes, detailed information is only available for seven days after a + detail as possible. Remember, for security purposes, detailed information is only available for seven days after a message has been sent.
The Notify roadmap shows what we’re working on and what we're planning to do next.
-This roadmap is only a guide. It does not cover everything we do, and some things may change.
-You can contact us if you have any questions about the roadmap or suggestions for new features.
- -We are investigating the Notify concept, building on the notifications tool pioneered by the UK.
-To do this, we are convening a pilot with a small set of partners.
-Goals during this stage:
- -Features prioritized during this stage:
- -If the pilot is successful, we hope to recruit additional partners to improve outcomes for low-income individuals and families.
- -Goals during this stage:
- -Features prioritized during this stage:
- -In the future, we may decide to expand beyond SMS, or to offer the service government-wide.
- -Features to be considered during this stage:
- -