From 82d464764aea4e348b9cc3f8ae01e7e89408ed62 Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Thu, 19 Mar 2026 18:08:03 -0700
Subject: [PATCH 1/3] Rebrand from Notify.gov to Flexion Messaging and remove
federal government references
---
.../app/content/get-started.md | 12 +++---
notifications-admin/app/main/views/index.py | 34 +++++++--------
notifications-admin/app/main/views/pricing.py | 2 +-
.../app/main/views/sign_out.py | 9 +++-
notifications-admin/app/templates/base.html | 1 -
.../app/templates/components/footer.html | 2 +-
.../app/templates/components/header.html | 2 +-
.../views/guides/best-practices.html | 12 +++---
.../templates/views/guides/clear-goals.html | 11 -----
.../views/guides/rules-and-regulations.html | 9 +---
.../app/templates/views/pricing/index.html | 5 ---
.../app/templates/views/privacy.html | 9 ----
.../app/templates/views/send.html | 4 +-
.../app/templates/views/signed-out.html | 32 ++++++++++++++
.../app/templates/views/signedout.html | 40 ++++++++----------
notifications-admin/backstop.config.js | 2 +-
notifications-admin/urls.js | 30 ++++++-------
.../app/config_files/templates.json | 12 +++---
.../versions/0419_rename_service_flexion.py | 42 +++++++++++++++++++
19 files changed, 153 insertions(+), 117 deletions(-)
create mode 100644 notifications-admin/app/templates/views/signed-out.html
create mode 100644 notifications-api/migrations/versions/0419_rename_service_flexion.py
diff --git a/notifications-admin/app/content/get-started.md b/notifications-admin/app/content/get-started.md
index 00444d5..b7bad4c 100644
--- a/notifications-admin/app/content/get-started.md
+++ b/notifications-admin/app/content/get-started.md
@@ -1,21 +1,21 @@
# Get started
-1. ## Everyone starts in [Trial Mode](/using-notify/trial-mode)
-Explore Notify, add team members, and practice [sending messages to teammates](/using-notify/trial-mode).
+1. ## Everyone starts in [Trial Mode](/using-flexion-messaging/trial-mode)
+Explore Flexion Messaging, add team members, and practice [sending messages to teammates](/using-flexion-messaging/trial-mode).
2. ## Personalize content
-Learn how to [personalize messages](/using-notify/how-to) to increase response.
+Learn how to [personalize messages](/using-flexion-messaging/how-to) to increase response.
3. ## Check delivery status
-[Analyze the delivery](/using-notify/delivery-status) of your messages and download reports
+[Analyze the delivery](/using-flexion-messaging/delivery-status) of your messages and download reports
4. ## View messaging limits
-Learn about message _parts_ and [how limits are calculated](/using-notify/pricing).
+Learn about message _parts_ and [how limits are calculated](/using-flexion-messaging/pricing).
5. ## Start sending messages
To remove the restrictions of Trial Mode and begin sending messages to people complete the Go-Live Form.
We'll respond within one business day.
### Questions?
-[Contact the Notify team](/support)
+[Contact the Flexion Messaging team](/support)
diff --git a/notifications-admin/app/main/views/index.py b/notifications-admin/app/main/views/index.py
index 59c6b7e..9b9995a 100644
--- a/notifications-admin/app/main/views/index.py
+++ b/notifications-admin/app/main/views/index.py
@@ -45,10 +45,6 @@ def error(status_code):
abort(status_code)
-@main.route("/privacy")
-@user_is_logged_in
-def privacy():
- return render_template("views/privacy.html")
@main.route("/accessibility-statement")
@@ -82,7 +78,7 @@ def callbacks():
return redirect(url_for("main.documentation"), 301)
-@main.route("/using-notify/delivery-status")
+@main.route("/using-flexion-messaging/delivery-status")
@user_is_logged_in
def message_status():
return render_template(
@@ -97,7 +93,7 @@ def get_started_old():
return redirect(url_for(".get_started"), 301)
-@main.route("/using-notify/get-started")
+@main.route("/using-flexion-messaging/get-started")
@user_is_logged_in
def get_started():
markdown = convert_markdown_template("get-started")
@@ -117,7 +113,7 @@ def get_started():
)
-@main.route("/using-notify/who-its-for")
+@main.route("/using-flexion-messaging/who-its-for")
def who_its_for():
return redirect(url_for(".features"), 301)
@@ -128,7 +124,7 @@ def trial_mode():
return redirect(url_for(".trial_mode_new"), 301)
-@main.route("/using-notify/trial-mode")
+@main.route("/using-flexion-messaging/trial-mode")
def trial_mode_new():
return render_template(
"views/trial-mode.html",
@@ -136,7 +132,7 @@ def trial_mode_new():
)
-@main.route("/using-notify/best-practices")
+@main.route("/using-flexion-messaging/best-practices")
@user_is_logged_in
def best_practices():
return render_template(
@@ -145,7 +141,7 @@ def best_practices():
)
-@main.route("/using-notify/best-practices/clear-goals")
+@main.route("/using-flexion-messaging/best-practices/clear-goals")
@user_is_logged_in
def clear_goals():
return render_template(
@@ -154,7 +150,7 @@ def clear_goals():
)
-@main.route("/using-notify/best-practices/rules-and-regulations")
+@main.route("/using-flexion-messaging/best-practices/rules-and-regulations")
@user_is_logged_in
def rules_and_regulations():
return render_template(
@@ -163,7 +159,7 @@ def rules_and_regulations():
)
-@main.route("/using-notify/best-practices/establish-trust")
+@main.route("/using-flexion-messaging/best-practices/establish-trust")
@user_is_logged_in
def establish_trust():
return render_template(
@@ -172,7 +168,7 @@ def establish_trust():
)
-@main.route("/using-notify/best-practices/write-for-action")
+@main.route("/using-flexion-messaging/best-practices/write-for-action")
@user_is_logged_in
def write_for_action():
return render_template(
@@ -181,7 +177,7 @@ def write_for_action():
)
-@main.route("/using-notify/best-practices/multiple-languages")
+@main.route("/using-flexion-messaging/best-practices/multiple-languages")
@user_is_logged_in
def multiple_languages():
return render_template(
@@ -190,7 +186,7 @@ def multiple_languages():
)
-@main.route("/using-notify/best-practices/benchmark-performance")
+@main.route("/using-flexion-messaging/best-practices/benchmark-performance")
@user_is_logged_in
def benchmark_performance():
return render_template(
@@ -199,7 +195,7 @@ def benchmark_performance():
)
-@main.route("/using-notify/how-to")
+@main.route("/using-flexion-messaging/how-to")
@user_is_logged_in
def how_to():
return render_template(
@@ -248,7 +244,7 @@ def notify_service_ending():
)
-@main.route("/using-notify/how-to/create-and-send-messages")
+@main.route("/using-flexion-messaging/how-to/create-and-send-messages")
@user_is_logged_in
def create_and_send_messages():
return render_template(
@@ -257,7 +253,7 @@ def create_and_send_messages():
)
-@main.route("/using-notify/how-to/edit-and-format-messages")
+@main.route("/using-flexion-messaging/how-to/edit-and-format-messages")
@user_is_logged_in
def edit_and_format_messages():
return render_template(
@@ -266,7 +262,7 @@ def edit_and_format_messages():
)
-@main.route("/using-notify/how-to/send-files-by-email")
+@main.route("/using-flexion-messaging/how-to/send-files-by-email")
@user_is_logged_in
def send_files_by_email():
return render_template(
diff --git a/notifications-admin/app/main/views/pricing.py b/notifications-admin/app/main/views/pricing.py
index 5969534..059e27b 100644
--- a/notifications-admin/app/main/views/pricing.py
+++ b/notifications-admin/app/main/views/pricing.py
@@ -9,7 +9,7 @@
CURRENT_SMS_RATE = "1.72"
-@main.route("/using-notify/pricing")
+@main.route("/using-flexion-messaging/pricing")
@user_is_logged_in
def pricing():
return render_template(
diff --git a/notifications-admin/app/main/views/sign_out.py b/notifications-admin/app/main/views/sign_out.py
index 58cbe24..4c6c8dd 100644
--- a/notifications-admin/app/main/views/sign_out.py
+++ b/notifications-admin/app/main/views/sign_out.py
@@ -1,7 +1,7 @@
import os
from urllib.parse import urlencode
-from flask import current_app, redirect, session, url_for
+from flask import current_app, redirect, render_template, session, url_for
from flask_login import current_user
from app.main import main
@@ -31,4 +31,9 @@ def sign_out():
if okta_logout_url:
current_app.config["SESSION_PERMANENT"] = False
return redirect(_build_okta_logout_url())
- return redirect(url_for("main.index"))
+ return redirect(url_for("main.signed_out"))
+
+
+@main.route("/signed-out")
+def signed_out():
+ return render_template("views/signed-out.html")
diff --git a/notifications-admin/app/templates/base.html b/notifications-admin/app/templates/base.html
index 232babb..86d2de2 100644
--- a/notifications-admin/app/templates/base.html
+++ b/notifications-admin/app/templates/base.html
@@ -34,7 +34,6 @@
{% block header %}
- {% include 'components/usa_banner.html' %}
{% include 'components/header.html' %}
{% endblock %}
diff --git a/notifications-admin/app/templates/components/footer.html b/notifications-admin/app/templates/components/footer.html
index b5b3b14..8beeb13 100644
--- a/notifications-admin/app/templates/components/footer.html
+++ b/notifications-admin/app/templates/components/footer.html
@@ -18,7 +18,7 @@ Support links
- © 2025 Flexion Inc. All rights reserved. Flexion® is a registered trademark of Flexion Inc. See our Privacy Policy.
+ © 2026 Flexion Inc. All rights reserved. Flexion® is a registered trademark of Flexion Inc.
diff --git a/notifications-admin/app/templates/components/header.html b/notifications-admin/app/templates/components/header.html
index 9a35a4a..42200f1 100644
--- a/notifications-admin/app/templates/components/header.html
+++ b/notifications-admin/app/templates/components/header.html
@@ -1,7 +1,7 @@
{% if current_user.is_authenticated %}
{% set navigation = [
{"href": url_for("main.show_accounts_or_dashboard"), "text": "Current service", "active": request.path.startswith('/accounts') or request.path.startswith('/services') or request.path.startswith('/activity/services') or request.path.startswith('/user-profile')},
- {"href": url_for('main.get_started'), "text": "Using Flexion Messaging", "active": request.path.startswith('/using-notify')},
+ {"href": url_for('main.get_started'), "text": "Using Flexion Messaging", "active": request.path.startswith('/using-flexion-messaging')},
{"href": url_for('main.support'), "text": "Contact us", "active": header_navigation.is_selected('support')}
] %}
diff --git a/notifications-admin/app/templates/views/guides/best-practices.html b/notifications-admin/app/templates/views/guides/best-practices.html
index 1f46d45..4417b22 100644
--- a/notifications-admin/app/templates/views/guides/best-practices.html
+++ b/notifications-admin/app/templates/views/guides/best-practices.html
@@ -24,37 +24,37 @@
"svg_src": "goal",
"card_heading": "Establish clear goals",
"p_text": "Start with a singular purpose. Make explicit what you want to achieve.",
- "link": "/using-notify/best-practices/clear-goals"
+ "link": "/using-flexion-messaging/best-practices/clear-goals"
},
{
"svg_src": "compliant",
"card_heading": "Follow rules & regulations",
"p_text": "Understand what is required when texting the public.",
- "link": "/using-notify/best-practices/rules-and-regulations"
+ "link": "/using-flexion-messaging/best-practices/rules-and-regulations"
},
{
"svg_src": "trust",
"card_heading": "Establish trust",
"p_text": "Help your audience anticipate and welcome your texts.",
- "link": "/using-notify/best-practices/establish-trust"
+ "link": "/using-flexion-messaging/best-practices/establish-trust"
},
{
"svg_src": "runner",
"card_heading": "Write texts that provoke action",
"p_text": "Help your audience know what to do with the information you send.",
- "link": "/using-notify/best-practices/write-for-action"
+ "link": "/using-flexion-messaging/best-practices/write-for-action"
},
{
"svg_src": "language",
"card_heading": "Send texts in multiple languages",
"p_text": "What to know as you plan translated texts.",
- "link": "/using-notify/best-practices/multiple-languages"
+ "link": "/using-flexion-messaging/best-practices/multiple-languages"
},
{
"svg_src": "chart",
"card_heading": "Measure performance with benchmarking",
"p_text": "Learn how effective your texting program can be.",
- "link": "/using-notify/best-practices/benchmark-performance"
+ "link": "/using-flexion-messaging/best-practices/benchmark-performance"
}
] %}
diff --git a/notifications-admin/app/templates/views/guides/clear-goals.html b/notifications-admin/app/templates/views/guides/clear-goals.html
index f3a1887..352b7e5 100644
--- a/notifications-admin/app/templates/views/guides/clear-goals.html
+++ b/notifications-admin/app/templates/views/guides/clear-goals.html
@@ -83,9 +83,6 @@
{
"list_content": "We will be calling you about…at…",
},
- {
- "list_content": "We will be calling you about…at…",
- },
] %}
{% for item in list_item_dos %}
@@ -139,14 +136,6 @@
Think of text messages as complementary to your existing communications. Review how well you are currently reaching
your audience. Are there methods or gaps that could be supplemented with a text message?
-
- The Department of Veterans Affairs provides a helpful flow-chart that can help you decide if a text message is needed
- for the communication problem you are trying to solve.
-
Use a hypothesis framework to plan your campaign
Think of your texting campaign as a scientific experiment, and try to articulate what you hope to improve as a
diff --git a/notifications-admin/app/templates/views/guides/rules-and-regulations.html b/notifications-admin/app/templates/views/guides/rules-and-regulations.html
index 7f86248..6d282b7 100644
--- a/notifications-admin/app/templates/views/guides/rules-and-regulations.html
+++ b/notifications-admin/app/templates/views/guides/rules-and-regulations.html
@@ -54,14 +54,7 @@
What to know about consent and opting out
"is_downloadable": true,
"p_text": 'It provides a baseline
interpretation to aid your legal counsel in getting up to speed with what might be needed for your program or use
- case.
- For additional questions about the enforcement of the TCPA, you can watch a recorded training on public
- benefits texting provided by the FCC.'
+ case.'
},
] %}
Complying with the Telephone Consumer Protection Act (TCPA)
diff --git a/notifications-admin/app/templates/views/pricing/index.html b/notifications-admin/app/templates/views/pricing/index.html
index 2a777fe..bce2f65 100644
--- a/notifications-admin/app/templates/views/pricing/index.html
+++ b/notifications-admin/app/templates/views/pricing/index.html
@@ -13,11 +13,6 @@
Message parts
-{{ content_metadata(
-data={
-"Last updated": "April 10, 2024"
-}
-) }}
During the pilot period, each service has an allowance of 250,000 message parts. Once this allowance is met, the
application will stop delivering messages. There's no monthly charge, no setup fee, and no procurement cost. You'll use
diff --git a/notifications-admin/app/templates/views/privacy.html b/notifications-admin/app/templates/views/privacy.html
index c6bca9c..c600d74 100644
--- a/notifications-admin/app/templates/views/privacy.html
+++ b/notifications-admin/app/templates/views/privacy.html
@@ -193,15 +193,6 @@
Changes to this notice
to you and your data as of that revision date. We encourage you to periodically review this privacy notice to be informed
about how we are protecting your data.
- Questions and complaints
-
- Contact the TTS Public Benefits Studio if you either:
-
-
- - have questions about anything in this document
- - think that your personal data has been misused or mishandled
-
-
diff --git a/notifications-admin/app/templates/views/send.html b/notifications-admin/app/templates/views/send.html
index b887a4d..12fd9c2 100644
--- a/notifications-admin/app/templates/views/send.html
+++ b/notifications-admin/app/templates/views/send.html
@@ -41,7 +41,7 @@
},
{
"svg_src": "#check_circle",
- "card_heading": "Label each additional personalized placeholder separately",
+ "card_heading": "Label each additional personalized placeholder separately",
},
{
"svg_src": "#check_circle",
@@ -53,7 +53,7 @@
},
{
"svg_src": "#check_circle",
- "card_heading": "Fill in each conditional placeholder column with a Yes (Y) or No (N) to “answer” whether the recipient meets its criteria",
+ "card_heading": "Fill in each conditional placeholder column with a Yes (Y) or No (N) to “answer” whether the recipient meets its criteria",
}
]
%}
diff --git a/notifications-admin/app/templates/views/signed-out.html b/notifications-admin/app/templates/views/signed-out.html
new file mode 100644
index 0000000..700f323
--- /dev/null
+++ b/notifications-admin/app/templates/views/signed-out.html
@@ -0,0 +1,32 @@
+{% extends "base.html" %}
+{% from "components/components/button/macro.njk" import usaButton %}
+
+{% block pageTitle %}You've been signed out – Flexion Messaging{% endblock %}
+
+{% block main %}
+{% block beforeContent %}{% endblock %}
+
+
+ {% block content %}
+
+
+
+
+
+ You've been signed out
+
+
+ Thank you for using Flexion Messaging.
+
+ {{ usaButton({
+ "element": "a",
+ "href": url_for('main.sign_in'),
+ "text": "Sign in again"
+ }) }}
+
+
+
+
+ {% endblock %}
+
+{% endblock %}
diff --git a/notifications-admin/app/templates/views/signedout.html b/notifications-admin/app/templates/views/signedout.html
index 3a314e0..fdc5567 100644
--- a/notifications-admin/app/templates/views/signedout.html
+++ b/notifications-admin/app/templates/views/signedout.html
@@ -1,13 +1,17 @@
-{% extends "base.html" %} {% from "components/components/button/macro.njk"
-import usaButton %} {% block meta %}
+{% extends "base.html" %}
+{% from "components/components/button/macro.njk" import usaButton %}
+
+{% block meta %}
{% endblock %}
-{% block pageTitle %} Flexion Messaging
+
+{% block pageTitle %}Flexion Messaging
{% if is_api_down %} - There's currently a technical issue {% endif %}
{% endblock %}
+
{% block main %}
{% block beforeContent %}{% endblock %}
@@ -21,26 +25,30 @@
- Sunsetting Flexion Messaging
+ Flexion Messaging
- This beta product is no longer in service as of June 9, 2025.
+ Send text messages to your users. Built for government.
-
+
- Text messaging services
+ Text messaging for government
- Though the Flexion Messaging service is no longer available, government programs can continue to explore text messaging services.
+ Flexion Messaging makes it easy to keep people updated by helping you send text messages.
-
Commercial messaging providers may support government use cases. For agencies with the resources to set up and support it, the notifications service codebase that runs Flexion Messaging is open source and can be reused.
+
+ - Send one-off or batch text messages
+ - Personalize messages with recipient data
+ - Track delivery status and download reports
+
-
-
-
-
-
- To our partners
-
-
- Thank you to our users and partners for their support, participation, and contributions in developing Flexion Messaging.
-
-
-
-
-
{% endif %}
{% endblock %}
diff --git a/notifications-admin/backstop.config.js b/notifications-admin/backstop.config.js
index e431cc2..479020b 100644
--- a/notifications-admin/backstop.config.js
+++ b/notifications-admin/backstop.config.js
@@ -37,7 +37,7 @@ module.exports = {
// example page with script
{
label: 'Get Started Page - Highlight Trial Mode',
- url: `${baseUrl}/using-notify/get-started`,
+ url: `${baseUrl}/using-flexion-messaging/get-started`,
selectors: ['document'],
misMatchThreshold: MISMATCH_THRESHOLD,
requireSameDimensions: true,
diff --git a/notifications-admin/urls.js b/notifications-admin/urls.js
index ee5ec8d..a32d2bb 100644
--- a/notifications-admin/urls.js
+++ b/notifications-admin/urls.js
@@ -117,27 +117,27 @@ const routes = {
documentation: [
{ label: 'Documentation', path: '/documentation' },
- { label: 'Create Messages', path: '/using-notify/how-to/create-and-send-messages' },
- { label: 'Edit Messages', path: '/using-notify/how-to/edit-and-format-messages' },
- { label: 'Send Files by Email', path: '/using-notify/how-to/send-files-by-email' },
+ { label: 'Create Messages', path: '/using-flexion-messaging/how-to/create-and-send-messages' },
+ { label: 'Edit Messages', path: '/using-flexion-messaging/how-to/edit-and-format-messages' },
+ { label: 'Send Files by Email', path: '/using-flexion-messaging/how-to/send-files-by-email' },
],
usingNotify: [
- { label: 'Get Started', path: '/using-notify/get-started' },
- { label: 'Trial Mode', path: '/using-notify/trial-mode' },
- { label: 'Pricing', path: '/using-notify/pricing' },
- { label: 'Delivery Status', path: '/using-notify/delivery-status' },
- { label: 'How To', path: '/using-notify/how-to' },
- { label: 'Best Practices', path: '/using-notify/best-practices' },
+ { label: 'Get Started', path: '/using-flexion-messaging/get-started' },
+ { label: 'Trial Mode', path: '/using-flexion-messaging/trial-mode' },
+ { label: 'Pricing', path: '/using-flexion-messaging/pricing' },
+ { label: 'Delivery Status', path: '/using-flexion-messaging/delivery-status' },
+ { label: 'How To', path: '/using-flexion-messaging/how-to' },
+ { label: 'Best Practices', path: '/using-flexion-messaging/best-practices' },
],
bestPractices: [
- { label: 'Clear Goals', path: '/using-notify/best-practices/clear-goals' },
- { label: 'Rules and Regulations', path: '/using-notify/best-practices/rules-and-regulations' },
- { label: 'Establish Trust', path: '/using-notify/best-practices/establish-trust' },
- { label: 'Write for Action', path: '/using-notify/best-practices/write-for-action' },
- { label: 'Multiple Languages', path: '/using-notify/best-practices/multiple-languages' },
- { label: 'Benchmark Performance', path: '/using-notify/best-practices/benchmark-performance' },
+ { label: 'Clear Goals', path: '/using-flexion-messaging/best-practices/clear-goals' },
+ { label: 'Rules and Regulations', path: '/using-flexion-messaging/best-practices/rules-and-regulations' },
+ { label: 'Establish Trust', path: '/using-flexion-messaging/best-practices/establish-trust' },
+ { label: 'Write for Action', path: '/using-flexion-messaging/best-practices/write-for-action' },
+ { label: 'Multiple Languages', path: '/using-flexion-messaging/best-practices/multiple-languages' },
+ { label: 'Benchmark Performance', path: '/using-flexion-messaging/best-practices/benchmark-performance' },
],
about: [
diff --git a/notifications-api/app/config_files/templates.json b/notifications-api/app/config_files/templates.json
index a1aa86c..7b1fb6e 100644
--- a/notifications-api/app/config_files/templates.json
+++ b/notifications-api/app/config_files/templates.json
@@ -10,7 +10,7 @@
},
{
"id": "4f46df42-f795-4cc4-83bb-65ca312f49cc",
- "name": "Notify invitation email",
+ "name": "Flexion Messaging invitation email",
"type": "email",
"subject": "((user_name)) has invited you to collaborate on ((service_name)) on Flexion Messaging",
"content": [
@@ -34,14 +34,14 @@
},
{
"id": "36fb0730-6259-4da1-8a80-c8de22ad4246",
- "name": "Notify SMS verify code",
+ "name": "Flexion Messaging SMS verify code",
"type": "sms",
"subject": "",
"content": ["((verify_code)) is your Flexion Messaging authentication code."]
},
{
"id": "474e9242-823b-4f99-813d-ed392e7f1201",
- "name": "Notify password reset email",
+ "name": "Flexion Messaging password reset email",
"type": "email",
"subject": "Reset your Flexion Messaging password",
"content": [
@@ -62,7 +62,7 @@
},
{
"id": "299726d2-dba6-42b8-8209-30e1d66ea164",
- "name": "Notify email verify code",
+ "name": "Flexion Messaging email verify code",
"type": "email",
"subject": "Sign in to Flexion Messaging",
"content": [
@@ -77,7 +77,7 @@
},
{
"id": "ece42649-22a8-4d06-b87f-d52d5d3f0a27",
- "name": "Notify email verification code",
+ "name": "Flexion Messaging email verification code",
"type": "email",
"subject": "Confirm Flexion Messaging registration",
"content": [
@@ -153,7 +153,7 @@
},
{
"id": "203566f0-d835-47c5-aa06-932439c86573",
- "name": "Notify organization invitation email",
+ "name": "Flexion Messaging organization invitation email",
"type": "email",
"subject": "((user_name)) has invited you to collaborate on ((organization_name)) on Flexion Messaging",
"content": [
diff --git a/notifications-api/migrations/versions/0419_rename_service_flexion.py b/notifications-api/migrations/versions/0419_rename_service_flexion.py
new file mode 100644
index 0000000..4d061bc
--- /dev/null
+++ b/notifications-api/migrations/versions/0419_rename_service_flexion.py
@@ -0,0 +1,42 @@
+"""
+
+Revision ID: 0419_rename_service_flexion
+Revises: 0418_user_state_enum
+Create Date: 2026-03-19 00:00:00.000000
+
+"""
+
+from alembic import op
+from flask import current_app
+from sqlalchemy import text
+
+revision = "0419_rename_service_flexion"
+down_revision = "0418_user_state_enum"
+
+service_id = current_app.config["NOTIFY_SERVICE_ID"]
+
+
+def upgrade():
+ conn = op.get_bind()
+ input_params = {"service_id": service_id}
+ conn.execute(
+ text("update services set name='Flexion Messaging' where id =:service_id"),
+ input_params,
+ )
+ conn.execute(
+ text("update services_history set name='Flexion Messaging' where id =:service_id"),
+ input_params,
+ )
+
+
+def downgrade():
+ conn = op.get_bind()
+ input_params = {"service_id": service_id}
+ conn.execute(
+ text("update services set name='Notify.gov' where id =:service_id"),
+ input_params,
+ )
+ conn.execute(
+ text("update services_history set name='Notify.gov' where id =:service_id"),
+ input_params,
+ )
From 23f54bb9870f4954b563234f93dd57e2dd341a8a Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Fri, 20 Mar 2026 11:31:28 -0700
Subject: [PATCH 2/3] fix test
---
notifications-admin/app/main/views/index.py | 1 -
notifications-admin/tests/app/main/test_errorhandlers.py | 6 +++---
notifications-admin/tests/app/main/views/test_index.py | 1 -
notifications-admin/tests/app/test_navigation.py | 2 +-
4 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/notifications-admin/app/main/views/index.py b/notifications-admin/app/main/views/index.py
index 9b9995a..bc5c098 100644
--- a/notifications-admin/app/main/views/index.py
+++ b/notifications-admin/app/main/views/index.py
@@ -46,7 +46,6 @@ def error(status_code):
-
@main.route("/accessibility-statement")
@user_is_logged_in
def accessibility_statement():
diff --git a/notifications-admin/tests/app/main/test_errorhandlers.py b/notifications-admin/tests/app/main/test_errorhandlers.py
index 29c7b76..d2c1e3d 100644
--- a/notifications-admin/tests/app/main/test_errorhandlers.py
+++ b/notifications-admin/tests/app/main/test_errorhandlers.py
@@ -50,7 +50,7 @@ def test_csrf_returns_400(client_request, mocker):
mocker.patch("app.main.views.index.render_template", side_effect=csrf_err)
page = client_request.get_url(
- "/privacy",
+ "/about",
_expected_status=400,
_test_page_title=False,
)
@@ -72,8 +72,8 @@ def test_csrf_redirects_to_sign_in_page_if_not_signed_in(client_request, mocker)
mocker.patch("app.notify_client.user_api_client.UserApiClient.deactivate_user")
client_request.logout()
client_request.get_url(
- "/privacy",
- _expected_redirect=url_for("main.sign_in", next="/privacy"),
+ "/about",
+ _expected_redirect=url_for("main.sign_in", next="/about"),
)
diff --git a/notifications-admin/tests/app/main/views/test_index.py b/notifications-admin/tests/app/main/views/test_index.py
index fa5ef41..7289d2d 100644
--- a/notifications-admin/tests/app/main/views/test_index.py
+++ b/notifications-admin/tests/app/main/views/test_index.py
@@ -87,7 +87,6 @@ def test_hiding_pages_from_search_engines(
@pytest.mark.parametrize(
"view",
[
- "privacy",
"pricing",
"documentation",
"best_practices",
diff --git a/notifications-admin/tests/app/test_navigation.py b/notifications-admin/tests/app/test_navigation.py
index c00b2fc..b1d59bc 100644
--- a/notifications-admin/tests/app/test_navigation.py
+++ b/notifications-admin/tests/app/test_navigation.py
@@ -148,7 +148,7 @@
"preview_job",
"preview_notification",
"pricing",
- "privacy",
+ "signed_out",
"received_text_messages_callback",
"redact_template",
"register",
From f243822ef70c5346456e97a4531257ee614d065d Mon Sep 17 00:00:00 2001
From: Beverly Nguyen
Date: Fri, 20 Mar 2026 11:41:33 -0700
Subject: [PATCH 3/3] fix test
---
notifications-admin/app/main/views/index.py | 1 -
.../tests/end_to_end/test_landing_and_sign_in_pages.py | 5 ++---
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/notifications-admin/app/main/views/index.py b/notifications-admin/app/main/views/index.py
index bc5c098..27031fc 100644
--- a/notifications-admin/app/main/views/index.py
+++ b/notifications-admin/app/main/views/index.py
@@ -45,7 +45,6 @@ def error(status_code):
abort(status_code)
-
@main.route("/accessibility-statement")
@user_is_logged_in
def accessibility_statement():
diff --git a/notifications-admin/tests/end_to_end/test_landing_and_sign_in_pages.py b/notifications-admin/tests/end_to_end/test_landing_and_sign_in_pages.py
index f1dc2f9..f465f5b 100644
--- a/notifications-admin/tests/end_to_end/test_landing_and_sign_in_pages.py
+++ b/notifications-admin/tests/end_to_end/test_landing_and_sign_in_pages.py
@@ -23,7 +23,7 @@ def test_landing_page(end_to_end_context):
# Retrieve some prominent elements on the page for testing.
main_header = page.get_by_role(
"heading",
- name="Sunsetting Flexion Messaging",
+ name="Flexion Messaging",
)
# Check to make sure the main header is visible.
@@ -32,8 +32,7 @@ def test_landing_page(end_to_end_context):
# Retrieve all other main content headers and check that they're
# visible.
content_headers = [
- "Text messaging services",
- "To our partners",
+ "Text messaging for government",
]
for content_header in content_headers: