diff --git a/scipost_django/submissions/templates/submissions/_hx_submission_workflow_diagram.html b/scipost_django/submissions/templates/submissions/_hx_submission_workflow_diagram.html
index 5a2b5c11bd88e3fd422a109f03067f2bf9a08ab3..b9e9a293f927db80ccc5666ad5df550133ef10c6 100644
--- a/scipost_django/submissions/templates/submissions/_hx_submission_workflow_diagram.html
+++ b/scipost_django/submissions/templates/submissions/_hx_submission_workflow_diagram.html
@@ -1,39 +1,58 @@
 <div class="border m-2 p-2">
-  <strong class="m-2">Workflow graphs{% if submission %} for <a href="{{ submission.get_absolute_url }}">{{ submission }}</a>{% else %}: Submission processing{% endif %}</strong>
-<div class="m-4">
-  <strong class="mt-2">Pre-screening</strong>
-  <pre class="mermaid">
+  <p><strong class="m-2">Workflow graphs{% if submission %} for <a href="{{ submission.get_absolute_url }}">{{ submission }}</a>{% else %}: Submission processing{% endif %}</strong></p>
+  <details class="m-2 p-2 border">
+    <summary><strong>Legend</strong></summary>
+    <ul class="m-2 list list-unstyled">
+      <li>✉=email sent</li>
+      <li>S=SciPost EdAdmin</li>
+      <li>A=submitting Author</li>
+      <li>F=Fellow(s)</li>
+      <li>E=Editor-in-charge</li>
+      <li>R=Referee(s)</li>
+      <li>C=Contributor/commenter</li>
+    </ul>
+    <p>Examples:
+      <ul>
+	<li>✉<small>A</small> signifies email from SciPost to submitting author</li>
+	<li>✉<small>E,R?C?</small> signifies emails to Editor-in-charge, Referee (if ∃), Commenter (if ∃)</li>
+      </ul>
+    </p>
+  </details>
+  <div class="m-4">
+    <strong class="mt-2">Pre-screening</strong>
+    <pre class="mermaid">
 flowchart LR
     Sub([Submission{% if submission %}<br>{{ submission.submission_date }}<br>{{ submission.submission_date|timesince }} ago{% endif %}])
     subgraph Pre-screening
         Admiss(Admissibility<br>and plagiarism<br>checks) --pass--> PreTop(Topics<br>specification)
         PreTop --> PreCOI(Conflict<br>of interest<br>checks)
-        PreCOI --> PrePa(Pre-assignments)
+        PreCOI --> PrePa(Listing of<br>potential<br>Editors-in-charge)
     end
-    Admiss --fail--> PreFailed([Pre-screening<br>failed])
+    Admiss --fail--> PreFailed(["Pre-screening<br>failed ✉<small>A</small>"])
     Sub --> Admiss
-    PrePa --> PrePass([Pre-screening<br>passed]) --> Screening[[Goto:<br>Screening]]
-</pre>
-</div>
-<div class="m-4">
-  <strong class="mt-2">Screening</strong>
-  <pre class="mermaid">
+    PrePa --> PrePass(["Pre-screening<br>passed ✉<small>A</small>"]) --> Screening[[Goto:<br>Screening]]
+    </pre>
+  </div>
+  <div class="m-4">
+    <strong class="mt-2">Screening</strong>
+    <pre class="mermaid">
 flowchart LR
     subgraph Screening
-        ScrInv([Fellows invited<br>to take charge]) --> ScrDecl(Fellows decline)
+        ScrInv(["Fellows invited<br>to take charge ✉<small>F</small>"]) --> ScrDecl(Fellows decline)
         ScrInv --> ScrNoAns(Fellows unresponsive)
+        ScrDecl --> NoEiC(No Editor-in-charge<br>found)
+        ScrNoAns --> NoEiC
         ScrInv --> ScrAcc(A Fellow accepts)
-        ScrAcc --> ScrEiC(Editor-in-charge<br>appointed)
+        ScrAcc --> ScrEiC("Editor-in-charge<br>appointed ✉<small>E</small>")
         ScrVol(A Fellow<br>volunteers) --> ScrEiC
     end
-    ScrDecl --> DeskRej([Screening failed])
-    ScrNoAns --> DeskRej
-    ScrEiC --> ScrPassed([Screening<br>passed]) --> RefPrep[[Goto:<br>Refereeing setup]]
-  </pre>
-</div>
-<div class="m-4">
-  <strong class="mt-2">Refereeing setup</strong>
-  <pre class="mermaid">
+    NoEiC --> DeskRej(["Screening<br>failed ✉<small>A</small>"])
+    ScrEiC --> ScrPassed(["Screening<br>passed ✉<small>A</small>"]) --> RefPrep[[Goto:<br>Refereeing setup]]
+    </pre>
+  </div>
+  <div class="m-4">
+    <strong class="mt-2">Refereeing setup</strong>
+    <pre class="mermaid">
 flowchart LR
     subgraph ChooseCycle [Choose refereeing cycle]
         DirectRec(Direct recommendation)
@@ -42,34 +61,34 @@ flowchart LR
     end
     ScrPassed --> DirectRec
     ScrPassed([Screening passed]) --> RegCycle
-    Resub([Resubmission or<br>restart refereeing]) --> RegCycle
+    Resub([Resubmission received<br>or restart refereeing]) --> RegCycle
     Resub --> ShortCycle
     Resub --> DirectRec
     DirectRec ----> EdRec[[Goto:<br>Editorial Recommendation]]
     RegCycle ----> Refereeing[[Goto:<br>Refereeing]]
     ShortCycle ----> Refereeing
-  </pre>
-</div>
-<div class="m-4">
-<strong class="mt-2">Refereeing</strong>
-<pre class="mermaid">
+    </pre>
+  </div>
+  <div class="m-4">
+    <strong class="mt-2">Refereeing</strong>
+    <pre class="mermaid">
 flowchart LR
     subgraph Ref [Refereeing]
-        RefOpen([Refereeing<br>round open]) --> RefInv(Referees<br>invited)
-        RefInv--> RepSub(Reports<br>submitted)
+        RefOpen([Refereeing<br>round open]) --> RefInv("Referees<br>invited ✉<small>R</small>")
+        RefInv--> RepSub("Reports<br>submitted ✉<small>E</small>")
         RefCont(Contributed<br>Reports) --> RepSub
-        RepSub --vetting--> RepPub(Reports<br>published)
-        RepPub --> AuthResp(Author<br>response)
-        ContCom(Contributed<br>Comments) --vetting--> ComPub(Comments<br>published)
+        RepSub --vetting--> RepPub("Reports<br>published ✉<small>A</small>")
+        RepPub --> AuthResp("Author response<br> ✉<small>E,R?C?</small>")
+        ContCom("Contributed<br>Comments ✉<small>E</small>") --vetting--> ComPub("Comments<br>published ✉<small>A</small>")
         ComPub --> AuthResp
         AuthResp --> RefClosed(Refereeing round<br>closed)
     end
     RefClosed --> EiCRec[[Goto:<br>Editorial recommendation]]
-</pre>
-</div>
-<div class="m-4">
-  <strong>Recommendation, voting and decision</strong>
-  <pre class="mermaid">
+    </pre>
+  </div>
+  <div class="m-4">
+    <strong>Recommendation, voting and decision</strong>
+    <pre class="mermaid">
 flowchart LR
     subgraph EiCRec [Editorial recommendation]
         RefClosed([Refereeing round<br>closed]) --> EiCRecForm{% verbatim %}{{EiC Rec<br>Formulation}}{% endverbatim %}
@@ -79,10 +98,10 @@ flowchart LR
         VotePrep(Voting<br>preparation) --> VotingInv(Fellows<br>invited to vote)
         VotingInv --> Voting(Fellows voting)
     end
-    EiCRecForm --minor/major revision--> Resub(Resubmission)
+    EiCRecForm --minor/major revision--> Resub(Resubmission<br>required)
     EiCRecForm --accept/reject--> EdColVote
-    Resub --> Refereeing[[Goto: Screening:<br>Resubmission or restart refereeing]]
-    subgraph EdDec [Editorial decision]
+    Resub --> Refereeing[[Goto: Refereeing setup:<br>Resubmission or restart refereeing]]
+    subgraph EdDec ["Editorial decision ✉<small>A</small>"]
         AcceptTarget(Accept<br>in target<br>Journal)
         AcceptAlt(Accept<br>in alternative<br>Journal)
         Reject
@@ -90,11 +109,11 @@ flowchart LR
     end
     EdColVote --> EdDec
     AcceptTarget --> Production([Production])
-    AcceptAlt --> PubOffer(Publication<br>offer)
-    PubOffer --accept--> Production
+    AcceptAlt --> PubOffer("Publication<br>offer ✉<small>A</small>")
+    PubOffer --accept--> Production[[Production stream<br>started]]
     PubOffer --decline--> Close([Processing<br>closed])
     RestartRef(Restart<br>refereeing) --> Refereeing
     Reject --> Close
-  </pre>
-</div>
+    </pre>
+  </div>
 </div>