Serves contact pages on GOV.UK
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
app Render warning callout body in bold Jul 26, 2018
bin Update Rails to 5.1 Nov 3, 2017
config Remove Help with Universal Jobmatch Jul 5, 2018
db Blank Rails 3.2.8 app Aug 30, 2012
docs Improve README Nov 21, 2017
lib Remove content_id from body of redirect publisher due to failing tests Oct 30, 2017
log Blank Rails 3.2.8 app Aug 30, 2012
public Changed css to go to 'asset pipeline' Sep 20, 2012
script Autocorrects style violations Sep 23, 2015
spec Fix #success? deprecation warning Sep 5, 2018
vendor Update details tag polyfill for jQuery 1.10+ Jul 15, 2015
.gitignore Authenticate with google via env vars not JSON files Nov 3, 2016
.rspec Modernise rspec infrastructure Oct 27, 2016
.rubocop.yml Bump govuk-lint, re-configure, fix outstanding violations Oct 27, 2016
.ruby-version Bump to ruby-2.5.1 May 29, 2018 Define contributing guide Nov 29, 2013
Dockerfile Bump to ruby-2.5.1 May 29, 2018
Gemfile Bump govuk_publishing_components from 9.24.0 to 9.25.0 Sep 20, 2018
Gemfile.lock Bump govuk_publishing_components from 9.24.0 to 9.25.0 Sep 20, 2018
Jenkinsfile Enable Brakeman Aug 2, 2018 Add LICENCE file Nov 21, 2017 Improve README Nov 21, 2017
Rakefile Fix Rakefile Feb 8, 2017
app.json Update app.json to fix Heroku review apps Jul 11, 2018 Autocorrects style violations Sep 23, 2015 Add govuk-content-schemas repo for jenkins Jan 16, 2017 Replace travis with jenkins Jun 27, 2014 Add --live and --dummy flags Mar 21, 2018


This app collects feedback from users via contact forms rendered on GOV.UK. This data is then sent to the support app or support-api app to be dealt with.

Contact Page on GOV.UK

Contact Page on GOV.UK

Contact Form on GOV.UK

Contact Form on GOV.UK


  • Feedback: All the data received from contact forms is considered to be "feedback" of some form or other and relates to pages published on GOV.UK.
  • Anonymous Contact: Part of the feedback collected by this app is anonymous, when it's submitted via an anonymous contact form in the [feedback app][feedback].
  • Named Contact: In contrast with the Anonymous Contact feedback, this is submitted via a form that will require you to identify yourself. This data is sent directly to the support app.

Technical documentation

This is a public facing Ruby on Rails application that collects feedback from users in multiple ways:

  1. Renders a contact page on GOV.UK:
  2. Collects feedback from other contact forms. Pages using the static app will have a link at the bottom of the page asking: Is there anything wrong with this page?. Clicking this link will show you a form. The data from the form will be submitted to the feedback app.
  3. Sends feedback either to the support app or the support-api app. If the feedback is sent to the support app, it will in turn create a ticket in Zendesk. If it's sent to the support-api app then it will either be stored in a database or a Zendesk ticket will be created.
  4. A certain subset of tickets ('assisted digital') have a special workflow: they're sent once to a Google spreadsheet via the Google API, and then a subset of the data is sent to support-api which will save them in its database. More documentation about that here: docs/
  5. Handles email survey signups. A banner that shows up on will ask you to provide an email to signup to a survey. feedback will then email you a link to the survey. However, it does not collect the answers. More documentation about that here: docs/


  • support-api - provides an API for storing and fetching anonymous feedback about pages on GOV.UK. Data comes in from the [feedback app][feedback] on the public-facing frontend and is read by [the support app][support] on the admin-facing backend.
  • support - receives feedback from the feedback app and creates Zendesk tickets from it.
  • static - renders contact forms that will collect information that will be sent to the feedback app.

Running the application

To start the app using bowler:

bowl feedback

To start the app directly:


This will start the app on port 3028.

Running the test suite

To run unit tests, execute the following:

bundle exec rake

Manual testing with a mock signon strategy

Launch using bowl from the development directory:

development> bowl feedback

Manual testing with real authorisation

For the feedback that is sent to the support app the feedback app needs a bearer token for authorization because support is a backend app protected by signon. The same is not true for the feedback that is sent to support-api because it's not protected by signon.

You can read more about how to obtain authorization in the docs: docs/testing_with_real_authorization.

Assisted Digital Feedback

Assisted Digital feedback is stored twice. The standard service feedback component is sent to support-api like other tickets, but the rest of the feedback specifically about assisted digital support is stored in a google spreadsheet.

A more thorough explanation about how assisted digital feedback works can be found in the docs: docs/

Email Survey Signups

This type of feedback is not actually feedback, it's a response from a banner displayed by static asking users to provide an email address where we can send them a link to a survey. The survey will then be emailed to them via the feedback app. Please be aware that the answers we get back on the survey will NOT be stored in feedback.

A more thorough explanation of how email surveys work can be found in the docs: docs/