From 7f53371f1785e8f2a17e3af14d099b626ae3adfc Mon Sep 17 00:00:00 2001 From: Laurence de Bruxelles Date: Wed, 1 Oct 2025 12:13:57 +0300 Subject: [PATCH 1/5] Fix typo --- diagrams/class-diagrams/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/diagrams/class-diagrams/README.md b/diagrams/class-diagrams/README.md index f1d33317c..5afa06408 100644 --- a/diagrams/class-diagrams/README.md +++ b/diagrams/class-diagrams/README.md @@ -24,7 +24,7 @@ generator="mermaid" rake erd This will create a file called `erd.mmd` in the root of the application. -## Update the diagram +## Update the diagram 1. Open the file in an editor and copy the contents (all of the `classDiagram` block). 2. Paste the contents into the corresponding diagram file, replacing everything inside the "mermaid" block: From 9a954dd67fd33c588aa1bd83e3a4c6f6a4e207e4 Mon Sep 17 00:00:00 2001 From: Laurence de Bruxelles Date: Wed, 1 Oct 2025 12:24:02 +0300 Subject: [PATCH 2/5] Update forms-admin class diagram Updated with latest output from rails-erd. --- diagrams/class-diagrams/admin.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/diagrams/class-diagrams/admin.md b/diagrams/class-diagrams/admin.md index ccef1694c..19c2d6324 100644 --- a/diagrams/class-diagrams/admin.md +++ b/diagrams/class-diagrams/admin.md @@ -33,6 +33,7 @@ classDiagram `Form` : +text declaration_text `Form` : +string external_id `Form` : +text form_slug + `Form` : +string language `Form` : +text name `Form` : +string payment_url `Form` : +text privacy_policy_url @@ -49,30 +50,28 @@ classDiagram `Form` : +text support_url `Form` : +text support_url_text `Form` : +text what_happens_next_markdown + class `FormDocument` + `FormDocument` : +jsonb content + `FormDocument` : +text tag class `FormSubmissionEmail` `FormSubmissionEmail` : +string confirmation_code `FormSubmissionEmail` : +string created_by_email `FormSubmissionEmail` : +string created_by_name - `FormSubmissionEmail` : +integer form_id `FormSubmissionEmail` : +string temporary_submission_email `FormSubmissionEmail` : +string updated_by_email `FormSubmissionEmail` : +string updated_by_name class `Group` - `Group` : +boolean branch_routing_enabled - `Group` : +boolean exit_pages_enabled `Group` : +text external_id `Group` : +string name `Group` : +string status `Group` : +boolean welsh_enabled class `GroupForm` - `GroupForm` : +integer form_id class `Membership` `Membership` : +string role class `MouSignature` class `Organisation` `Organisation` : +string abbreviation `Organisation` : +boolean closed - `Organisation` : +integer default_group_id `Organisation` : +string govuk_content_id `Organisation` : +boolean internal `Organisation` : +string name @@ -84,7 +83,6 @@ classDiagram `Page` : +text hint_text `Page` : +boolean is_optional `Page` : +boolean is_repeatable - `Page` : +integer next_page `Page` : +text page_heading `Page` : +integer position `Page` : +text question_text @@ -106,9 +104,11 @@ classDiagram `User` : +text permissions `User` : +string provider `User` : +boolean remotely_signed_out + `User` : +string research_contact_status `User` : +string role `User` : +datetime terms_agreed_at `User` : +string uid + `User` : +datetime user_research_opted_in_at `Item` --> `PaperTrail::Version` `Organisation` --> `PaperTrail::Version` `User` --> `PaperTrail::Version` @@ -123,7 +123,11 @@ classDiagram `Organisation` --> `MouSignature` `Group` --> `Membership` `Group` --> `GroupForm` + `Form` -- `GroupForm` + `Group` ..> `Form` + `Form` --> `FormDocument` `Form` --> `Page` + `Form` -- `FormSubmissionEmail` `Page` --> `Condition` `Condition` .. `Form` - ``` +``` From bbb05b2a294df910307da2cf076b18480f47a0be Mon Sep 17 00:00:00 2001 From: Laurence de Bruxelles Date: Wed, 1 Oct 2025 12:24:37 +0300 Subject: [PATCH 3/5] Remove class-diagram for forms-api The forms-api app is no longer used in any part of our system, its data and responsibilities have been moved to the forms-admin app, and this class diagram is no longer relevant and can be removed. All of the entity types that were in the forms-api class diagram are now also in the forms-admin class diagram, so nothing should be lost by this. --- diagrams/class-diagrams/api.md | 98 ---------------------------------- 1 file changed, 98 deletions(-) delete mode 100644 diagrams/class-diagrams/api.md diff --git a/diagrams/class-diagrams/api.md b/diagrams/class-diagrams/api.md deleted file mode 100644 index 5af79ddf7..000000000 --- a/diagrams/class-diagrams/api.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: GOV.UK Forms API class diagram ---- - -# GOV.UK Forms API class diagram -## 2025-05-29 - -```mermaid -classDiagram - direction RL - class `AccessToken` - `AccessToken` : +datetime deactivated_at - `AccessToken` : +string description - `AccessToken` : +datetime last_accessed_at - `AccessToken` : +string owner - `AccessToken` : +string token_digest - class `Api::V2::Form` - `Api::V2::Form` : +integer creator_id - `Api::V2::Form` : +boolean declaration_section_completed - `Api::V2::Form` : +text declaration_text - `Api::V2::Form` : +string external_id - `Api::V2::Form` : +text form_slug - `Api::V2::Form` : +text name - `Api::V2::Form` : +string payment_url - `Api::V2::Form` : +text privacy_policy_url - `Api::V2::Form` : +boolean question_section_completed - `Api::V2::Form` : +string s3_bucket_aws_account_id - `Api::V2::Form` : +string s3_bucket_name - `Api::V2::Form` : +string s3_bucket_region - `Api::V2::Form` : +boolean share_preview_completed - `Api::V2::Form` : +string state - `Api::V2::Form` : +text submission_email - `Api::V2::Form` : +string submission_type - `Api::V2::Form` : +text support_email - `Api::V2::Form` : +text support_phone - `Api::V2::Form` : +text support_url - `Api::V2::Form` : +text support_url_text - `Api::V2::Form` : +text what_happens_next_markdown - class `Api::V2::FormDocument` - `Api::V2::FormDocument` : +jsonb content - `Api::V2::FormDocument` : +text tag - class `Condition` - `Condition` : +string answer_value - `Condition` : +text exit_page_heading - `Condition` : +text exit_page_markdown - `Condition` : +boolean skip_to_end - class `Form` - `Form` : +integer creator_id - `Form` : +boolean declaration_section_completed - `Form` : +text declaration_text - `Form` : +string external_id - `Form` : +text form_slug - `Form` : +text name - `Form` : +string payment_url - `Form` : +text privacy_policy_url - `Form` : +boolean question_section_completed - `Form` : +string s3_bucket_aws_account_id - `Form` : +string s3_bucket_name - `Form` : +string s3_bucket_region - `Form` : +boolean share_preview_completed - `Form` : +string state - `Form` : +text submission_email - `Form` : +string submission_type - `Form` : +text support_email - `Form` : +text support_phone - `Form` : +text support_url - `Form` : +text support_url_text - `Form` : +text what_happens_next_markdown - class `MadeLiveForm` - `MadeLiveForm` : +json json_form_blob - class `Page` - `Page` : +jsonb answer_settings - `Page` : +text answer_type - `Page` : +text guidance_markdown - `Page` : +text hint_text - `Page` : +boolean is_optional - `Page` : +boolean is_repeatable - `Page` : +integer next_page - `Page` : +text page_heading - `Page` : +integer position - `Page` : +text question_text - class `PaperTrail::Version` - `PaperTrail::Version` : +string event - `PaperTrail::Version` : +string item_type - `PaperTrail::Version` : +jsonb object - `PaperTrail::Version` : +jsonb object_changes - `PaperTrail::Version` : +string whodunnit - `Item` --> `PaperTrail::Version` - `Condition` --> `PaperTrail::Version` - `Form` --> `PaperTrail::Version` - `Page` --> `PaperTrail::Version` - `Api::V2::Form` --> `Api::V2::FormDocument` - `Form` --> `Page` - `Page` --> `Condition` - `Form` --> `MadeLiveForm` - `Form` --> `Api::V2::FormDocument` - `Condition` .. `Form` -``` From 059fbad870c5617a7266b46c33e40ae05c96f569 Mon Sep 17 00:00:00 2001 From: Laurence de Bruxelles Date: Wed, 1 Oct 2025 12:59:42 +0300 Subject: [PATCH 4/5] Remove forms-api from sequence diagrams The forms-api app is no longer used in any part of our system, its data and responsibilities have been moved to the forms-admin app, and forms-runner retrieves form definitions from forms-admin. The sequence diagrams in this repo need to be updated to reflect that, this commit does so. This does mean that there is less detail in some sequence diagrams, however this is accurate as to our external API surface; forms-admin exposes fewer public API endpoints than forms-api did. --- diagrams/sequence-diagrams/changing-a-form.md | 17 +------- diagrams/sequence-diagrams/creating-a-form.md | 41 ++----------------- .../sequence-diagrams/filling-in-a-form.md | 18 ++++---- .../sequence-diagrams/publishing-a-form.md | 6 --- 4 files changed, 15 insertions(+), 67 deletions(-) diff --git a/diagrams/sequence-diagrams/changing-a-form.md b/diagrams/sequence-diagrams/changing-a-form.md index 1abd18e07..52e6aa4d0 100644 --- a/diagrams/sequence-diagrams/changing-a-form.md +++ b/diagrams/sequence-diagrams/changing-a-form.md @@ -8,48 +8,35 @@ sequenceDiagram participant browser as Web Browser participant admin as forms-admin link admin: GitHub repo @ https://github.com/alphagov/forms-admin - participant api as forms-api - link api: GitHub repo @ https://github.com/alphagov/forms-api note right of user: Form has already been made live user->>browser: visit live form page browser->>admin: GET /forms/{form id}/live - admin->>api: GET /api/v1/forms/{form id} - admin->>api: GET /api/v1/forms/{form id}/live browser-->>user: show live form page user->>browser: click "Create a draft to edit" button browser->>admin: GET /forms/{form id} - admin->>api: GET /forms/{form id} - admin->>api: GET /forms/{form id}/pages browser-->>user: show draft form page with task list - note over user,api: User edits the draft form (See Creating form)
until they are ready to make their changes live + note over user,admin: User edits the draft form (See Creating form)
until they are ready to make their changes live user->>browser: click "Make your changes live" task browser->>admin: GET /forms/{form id}/make-live - admin->>api: GET /api/v1/forms/{form id} browser-->>user: show "Make your changes live" page alt form creator decides not to make form live user->>browser: click "No" and submits page browser->>admin: POST /forms/{form id}/make-live
payload: {forms_make_live_form"=>
{"confirm_make_live"=>"not_made_live"},
"form_id"=>"{form id"}} - admin->>api: GET /api/v1/forms/{form id} admin-->>browser: REDIRECT 302 browser->>admin: GET /forms/{form id} - admin->>api: GET /forms/{form id} - admin->>api: GET /forms/{form id}/pages browser-->>user: show draft form page with task list else form creator decides to make form live user->>browser: click "Yes" and submits page browser->>admin: POST /forms/{form id}/make-live
payload: {forms_make_live_form"=>
{"confirm_make_live"=>"made_live"},
"form_id"=>"{form id"}} - admin->>api: POST /api/v1/forms/{form id}/make-live
payload: {includes all form attributes and values}
Controller Action doesn't use any - note over admin,api: Creates a new record in published_forms table,
with a copy of the form and all its pages
+ note over admin,admin: Creates a new record in published forms table,
with a copy of the form and all its pages
browser-->>user: show "Your form is live" confirmation page user->>browser: click "Continue to form details" link browser->>admin: GET /forms/{form id}/live - admin->>api: GET /api/v1/forms/{form id} - admin->>api: GET /api/v1/forms/{form id}/live browser-->>user: show live form page end ``` diff --git a/diagrams/sequence-diagrams/creating-a-form.md b/diagrams/sequence-diagrams/creating-a-form.md index ebe85e320..aa35a3aff 100644 --- a/diagrams/sequence-diagrams/creating-a-form.md +++ b/diagrams/sequence-diagrams/creating-a-form.md @@ -7,8 +7,6 @@ sequenceDiagram participant browser as Web Browser participant admin as forms-admin link admin: GitHub repo @ https://github.com/alphagov/forms-admin - participant api as forms-api - link api: GitHub repo @ https://github.com/alphagov/forms-api note right of user: user has already logged in @@ -17,13 +15,9 @@ sequenceDiagram browser-->>user: show "What is the name of your form?" page user->>browser: Give the form a name
click "Save and continue" button browser->>admin: POST /forms/new
payload: forms_change_name_form%5Bname%5D={form name} - admin->>api: POST /forms
{"name":"{form name}",
"submission_email":"",
"organisation_id":{user organisation id}} - api->>api: Create form - api-->>admin: {"id":{form id}} + admin->>admin: Create form admin-->>browser: 302 browser->>admin: GET /forms/{form id} - admin->>api: GET /forms/{form id} - admin->>api: GET /forms/{form id}/pages browser-->>user: show "Create a form" page ``` @@ -36,15 +30,11 @@ sequenceDiagram participant browser as Web Browser participant admin as forms-admin link admin: GitHub repo @ https://github.com/alphagov/forms-admin - participant api as forms-api - link api: GitHub repo @ https://github.com/alphagov/forms-api note right of user: On the "Create a form" page user->>browser: click "Add and edit your questions" link browser->>admin: GET /forms/1/pages/new/type-of-answer - admin->>api: GET /forms/{form id} - admin->>api: GET /forms/{form id}/pages browser-->>user: show "What kind of answer do you need to this question?" page @@ -59,9 +49,7 @@ sequenceDiagram user->>browser: Provide Question text, Hint text (optional), Question settings user->>browser: Click "Save and add next question" OR "Save question" button browser->>admin: POST /forms/{form id}/pages/new/question - admin->>api: POST /forms/{form id}/pages
{"question_text":,
"hint_text":,
"answer_type":,
"is_optional":,
"answer_settings":{"input_type":} - api->>api: create page - api-->>admin: 201 + admin->>admin: create page alt "Save and add next question" clicked admin-->>browser: 302 @@ -83,25 +71,18 @@ sequenceDiagram participant browser as Web Browser participant admin as forms-admin link admin: GitHub repo @ https://github.com/alphagov/forms-admin - participant api as forms-api - link api: GitHub repo @ https://github.com/alphagov/forms-api note right of user: form already created user->>browser: click "Add a declaration for people to agree to" link browser->>admin: GET /forms/{form id}/declaration - admin->>api: GET /forms/{form id} browser-->>user: show "Add a declaration" page user->>browser: Provide declaration
click "Save and continue" button browser->>admin: POST /forms/{form id}/declaration - admin->>api: GET /forms/{form id} - admin->>api: PUT /forms/{form id} - api->>api: Update form + admin->>admin: Update form admin-->>browser: 302 browser->>admin: GET /forms/{form id} - admin->>api: GET /forms/{form id} - admin->>api: GET /forms/{form id}/pages browser-->>user: show "Create a form" page ``` @@ -120,8 +101,6 @@ sequenceDiagram participant browser as Web Browser participant admin as forms-admin link admin: GitHub repo @ https://github.com/alphagov/forms-admin - participant api as forms-api - link api: GitHub repo @ https://github.com/alphagov/forms-api participant notify as GOV.UK Notify participant inbox as shared email inbox actor processor as form processor @@ -130,7 +109,6 @@ sequenceDiagram user->>browser: click "Set the email address for completed forms" link browser->>admin: GET /forms/{form id}/submission-email - admin->>api: GET /forms/{form id} browser-->>user: show "Set the email address for completed forms" page user->>browser: Provide email address
click "Save and continue" button browser->>admin: POST /forms/{form id}/submission-email @@ -139,7 +117,6 @@ sequenceDiagram notify->>inbox: Send email admin-->>browser: 302 browser->>admin: GET /forms/{form id}/email-code-sent - admin->>api: GET /forms/{form id} browser-->>user: show "Confirmation code sent" page inbox--)processor: read email @@ -147,12 +124,10 @@ sequenceDiagram user->>browser: click "Enter the email address confirmation code" link browser->>admin: GET /forms/{form id}/confirm-submission-email - admin->>api: GET /forms/{form id} browser-->>user: show "Enter the confirmation code" page user->>browser: enter code, click "Save and continue" button browser->>admin: POST /forms/{form id}/confirm-submission-email - admin->>api: GET /forms/{form id} admin->>admin: check code opt wrong code entered @@ -160,15 +135,12 @@ sequenceDiagram browser-->>user: show "Enter the confirmation code" page with error user->>browser: enter code, click "Save and continue" button browser->>admin: POST /forms/{form id}/confirm-submission-email - admin->>api: GET /forms/{form id} admin->>admin: check code end - admin->>api: PUT /forms/{form id} - api->>api: update form + admin->>admin: update form admin-->>browser: 302 browser->>admin: GET /forms/{form id}/submission-email-confirmed - admin->>api: GET /forms/{form id} browser-->>user: show "Email address confirmed" page ``` @@ -183,20 +155,15 @@ sequenceDiagram link admin: GitHub repo @ https://github.com/alphagov/forms-admin participant runner as forms-runner link runner: GitHub repo @ https://github.com/alphagov/forms-runner - participant api as forms-api - link api: GitHub repo @ https://github.com/alphagov/forms-api note right of user: At least one question has been added admin-->>user: show "Create a form" page user->>browser: Click "Preview this form in a new tab" link browser->>runner: GET /preview-form/{form id}/{form slug} - runner->>api: GET /forms/{form id} runner->>runner: determine start page runner-->>browser: 302 browser->>runner: GET /forms/{form id}/{form slug}/{start page id} - runner->>api: GET /forms/{form id} - runner->>api: GET /forms/{form id}/pages runner-->>browser: render form start page browser-->>user: show form preview in new tab ``` diff --git a/diagrams/sequence-diagrams/filling-in-a-form.md b/diagrams/sequence-diagrams/filling-in-a-form.md index 11eadcaa6..c4406bf69 100644 --- a/diagrams/sequence-diagrams/filling-in-a-form.md +++ b/diagrams/sequence-diagrams/filling-in-a-form.md @@ -6,7 +6,7 @@ sequenceDiagram participant browser as Web Browser participant govuk as GOV.UK website participant runner as forms-runner - participant api as forms-api + participant admin as forms-admin participant notify as GOV.UK Notify participant inbox as shared email inbox actor processor as Form processor @@ -18,21 +18,21 @@ sequenceDiagram user->>browser: Click link to form browser->>runner: GET /form/{form id}/{form slug} note over browser,runner: Start - runner->>api: GET /api/v1/forms/{form id}/live + runner->>admin: GET /api/v2/forms/{form id}/live runner->>runner: determine start page runner-->>browser: 302 browser->>runner: GET /form/{form id}/{form slug}/{start page id} - runner->>api: GET /api/v1/forms/{form id}/live + runner->>admin: GET /api/v2/forms/{form id}/live browser-->>user: show form loop for each form question user->>browser: Provide answer, click "Continue" browser->>runner: POST /form/{form id}/{form slug}/{page id} - runner->>api: GET /api/v1/forms/{form id}/live + runner->>admin: GET /api/v2/forms/{form id}/live runner->>runner: Save user session runner-->>browser: 302 browser->>runner: GET /form/{form id}/{form slug}/{next page id} - runner->>api: GET /api/v1/forms/{form id}/live + runner->>admin: GET /api/v2/forms/{form id}/live browser-->>user: Show next question end @@ -40,12 +40,12 @@ sequenceDiagram browser-->>user: Show check your answers page user->>browser: Click "Submit" browser->>runner: POST /form/{form id}/{form slug}/submit-answers - runner->>api: GET /api/v1/forms/{form id}/live + runner->>admin: GET /api/v2/forms/{form id}/live runner->>notify: client.send_email() runner->>runner: Delete user session runner-->>browser: 302 browser->>runner: GET /form/{form id}/{form slug}/submitted - runner->>api: GET /api/v1/forms/{form id}/live + runner->>admin: GET /api/v2/forms/{form id}/live browser-->>user: Show confirmation page notify->>inbox: Send email inbox->>processor: Read email @@ -60,12 +60,12 @@ sequenceDiagram actor user as Form filler participant browser as Web Browser participant runner as forms-runner - participant api as forms-api + participant admin as forms-admin participant notify as GOV.UK Notify user->>browser: Click link to form browser->>runner: GET /form/{form id}/{form slug} - runner->>api: GET /api/v1/forms/{form id}/live + runner->>admin: GET /api/v2/forms/{form id}/live runner-->browser: REDIRECT 302 (includes first page id) browser->>runner: GET /form/{form id}/{forms slug}/{page id} Note over browser,runner: A new session has started diff --git a/diagrams/sequence-diagrams/publishing-a-form.md b/diagrams/sequence-diagrams/publishing-a-form.md index 68d21de1e..41732da83 100644 --- a/diagrams/sequence-diagrams/publishing-a-form.md +++ b/diagrams/sequence-diagrams/publishing-a-form.md @@ -7,22 +7,16 @@ sequenceDiagram participant browser as Web Browser participant admin as forms-admin link admin: GitHub repo @ https://github.com/alphagov/forms-admin - participant api as forms-api - link api: GitHub repo @ https://github.com/alphagov/forms-api note right of user: All tasks except "Make your form live" have been completed admin-->>user: show "Create a form" page user->>browser: Click "Make your form live" link browser->>admin: GET /forms/{form id}/make-live - admin->>api: GET /api/v1/forms/{form id} browser-->>user: show "Make your form live" page user->>browser: Confirm making form live
click "Save and continue" button browser->>admin: POST /forms/{form id}/make-live - admin->>api: GET /api/v1/forms/{form id} - admin->>api: GET /api/v1/forms/{form id}/pages - admin->>api: POST /api/v1/forms/{form id}/make-live
payload: {includes all form attributes and values}
Controller Action doesn't use any browser-->>user: show "Your form is live" page user->>user: Copy URL for the form From a679155fc33dd7420c5452e048abde00f61b91e7 Mon Sep 17 00:00:00 2001 From: Laurence de Bruxelles Date: Wed, 1 Oct 2025 13:03:08 +0300 Subject: [PATCH 5/5] Remove deprecated forms-api from READMEs --- README.md | 1 - diagrams/sequence-diagrams/README.md | 7 +++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index aafd32369..fa801bc6e 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ We also have: You can find our code in the following repositories: - [forms-admin](https://github.com/alphagov/forms-admin) - our application for building forms. -- [forms-api](https://github.com/alphagov/forms-api) - our application for storing and serving form definitions. - [forms-runner](https://github.com/alphagov/forms-runner) - our application for hosting forms, so that they can be filled in by members of the public. - [forms-e2e-tests](https://github.com/alphagov/forms-e2e-tests) - end-to-end tests for the service. - [forms-product-page](https://github.com/alphagov/forms-product-page) - our product pages, as seen at [https://forms.service.gov.uk](https://forms.service.gov.uk) diff --git a/diagrams/sequence-diagrams/README.md b/diagrams/sequence-diagrams/README.md index 2ea582a22..c480c997b 100644 --- a/diagrams/sequence-diagrams/README.md +++ b/diagrams/sequence-diagrams/README.md @@ -2,7 +2,7 @@ ## Introduction -The diagrams in this folder (created using [Mermaid](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-diagrams#creating-mermaid-diagrams)) show the interactions between users and GOV.UK Forms, including the 3 applications [forms-admin](https://github.com/alphagov/forms-admin), [forms-api](https://github.com/alphagov/forms-api), and [forms-runner](https://github.com/alphagov/forms-runner). +The diagrams in this folder (created using [Mermaid](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/creating-diagrams#creating-mermaid-diagrams)) show the interactions between users and GOV.UK Forms, including the two main applications [forms-admin](https://github.com/alphagov/forms-admin) and [forms-runner](https://github.com/alphagov/forms-runner). The diagram below is to provide an overview of the different users and systems that interact with each other. For clarity, not all interactions are shown. Please refer to individual sequence diagrams for detailed interactions. @@ -28,15 +28,14 @@ graph TD subgraph sg1 [GOV.UK Forms] admin(forms-admin) - api(forms-api) runner(forms-runner) end editor---runner - auth0 --- admin --- api + auth0 --- admin filler --- govuk - filler --- runner --- api + filler --- runner --- admin notify(GOV.UK Notify)