Skip to main content

Application: frontend

Serves the homepage, transactions and some index pages on GOV.UK

AWS, on the draft_frontend machine class
Continuously deployed?
Rake tasks
Integration, Staging or ⚠️ Production ⚠️

Example pages published by frontend

Example pages rendered by frontend


<!– raw HTML omitted –> <!– raw HTML omitted –>

Live examples


Simple smart answer

Transaction start pages:

Hard-coded routes

Licence finders

Some examples:

Transaction done pages

Transaction done with survey pages

Standard survey:

Assisted digital satisfaction surveys:



URL Related views<!– raw HTML omitted –><!– raw HTML omitted –><!– raw HTML omitted –><!– raw HTML omitted –><!– raw HTML omitted –><!– raw HTML omitted –> _base_page <!– raw HTML omitted –>local_transaction/search<!– raw HTML omitted –><!– raw HTML omitted –><!– raw HTML omitted –> _base_page<!– raw HTML omitted –>place/show publication_metadata<!– raw HTML omitted –>_base_page<!– raw HTML omitted –>show flow _publication_metadata<!– raw HTML omitted –>_base_page<!– raw HTML omitted –>transaction/show <!– raw HTML omitted –> <!– raw HTML omitted –> <!– raw HTML omitted –> <!– raw HTML omitted –> _base_page<!– raw HTML omitted –>transaction/show


  • format: our phrase for a type of content
  • scope: each type of calendar (eg daylight saving, bank holidays) is known as a scope. A scope has its own view templates, JSON data source and primary route.

Technical documentation

Frontend is a Ruby on Rails application that renders the citizen-facing part of formats stored in the Content Store. It looks up the passed-in slug in the Content Store.

It also serves the homepage as a hard-coded route.

Calendar JSON data files are stored in lib/data/<scope>.json, with a divisions hash for separate data per region (united-kingdom, england-and-wales, scotland or northern-ireland).

Each scope’s data file contains a list of divisions, containing a list of years, each with a list of events:

  "title": "UK bank holidays",
  "description": "UK bank holidays calendar - see UK bank holidays and public holidays for 2012 and 2013",
  "divisions": {
    "england-and-wales": {
      "title": "England and Wales",
      "2011": [{
        "title": "New Year's Day",
        "date": "02/01/2011",
        "notes": "Substitute day"

The division title attribute is optional. If this is not present the slug will be humanized and used instead.


Running the application

If you are using docker to run the application (which is advised) it will be available on the host at

To run the application standalone, run static and execute the following command:


which uses a local copy of static and content from production.

Note that you will have to have GOV.UK Mapit running locally. A valid dataset will have to be loaded for Mapit or postcode lookups will not succeed. This is part of the standard GOV.UK data replication steps.

To run in a full development stack (with DNS, all apps running etc.) use./

Running the test suite

bundle exec rake runs the test suite.

Additional information for calendars

Send the calendars to the publishing-api:

bundle exec rake publishing_api:publish_calendars

If you’re using govuk-docker, you may need to govuk-docker-up on publishing-api in a separate shell. You may also need to run the rake task a couple of times if you encounter timeouts.

Search indexing is performed automatically on data sent to publishing api.

A rake task has been created to generate the bank holidays JSON for a given year. They need to be then inserted, and modified to take into account any additions/modifications made by proclamation.

Run the rake task like this:

bundle exec rake bank_holidays:generate_json[2016]

Canonical sources


MIT Licence