diff --git a/tools/patman/review.py b/tools/patman/review.py
index a850ec180df..92fbcfa8a2d 100644
--- a/tools/patman/review.py
+++ b/tools/patman/review.py
@@ -32,6 +32,7 @@ from u_boot_pylib import tout
 from patman import database
 from patman import gmail
 from patman import patchstream
+from patman import workflow
 
 try:
     from claude_agent_sdk import ClaudeAgentOptions
@@ -1821,6 +1822,7 @@ def do_review(args, pwork, cser):
         ctx.comments_path = _write_comments_file(series_data, pwork)
 
         _run_and_store_reviews(ctx, args)
+        workflow.reviewed(cser, ctx.series_id, ctx.svid)
 
         _git_restore(orig_branch, had_stash, ctx.repo_path)
         orig_branch = None
diff --git a/tools/patman/workflow.py b/tools/patman/workflow.py
index 299686e3269..97e3b1bbafc 100644
--- a/tools/patman/workflow.py
+++ b/tools/patman/workflow.py
@@ -13,6 +13,7 @@ class Wtype(str, enum.Enum):
     """Types of workflow entry"""
     SENT = 'sent'
     TODO = 'todo'
+    REVIEWED = 'reviewed'
 
 
 def friendly_time(now, when):
@@ -61,6 +62,24 @@ def sent(cser, series_id, ser_ver_id=None):
     cser.commit()
 
 
+def reviewed(cser, series_id, ser_ver_id=None):
+    """Record that a series was reviewed and create a follow-up todo
+
+    Args:
+        cser (CseriesHelper): Series helper with open database
+        series_id (int): ID of the series that was reviewed
+        ser_ver_id (int or None): ID of the ser_ver record
+    """
+    ts = cser.get_now().strftime('%Y-%m-%d %H:%M:%S')
+    cser.db.workflow_archive(Wtype.REVIEWED, series_id)
+    cser.db.workflow_add(Wtype.REVIEWED, series_id, ts, ser_ver_id=ser_ver_id)
+    when = cser.get_now() + timedelta(days=7)
+    todo_ts = when.strftime('%Y-%m-%d %H:%M:%S')
+    cser.db.workflow_archive(Wtype.TODO, series_id)
+    cser.db.workflow_add(Wtype.TODO, series_id, todo_ts)
+    cser.commit()
+
+
 def todo(cser, series, days):
     """Mark a series as a todo item after a number of days
 
