Day 3 Community Design Challenges
How do I get started?
Pick out a challenge from below and start building! All the challenges require that Ignition is installed, so download and install Ignition 8.3.6 or newer. There's also a gateway backup that you can download here that will be required for many of the challenges. It contains Tags and other resources that you'll find necessary to complete some of the prompts. It's best to load this backup before you start any challenges since a Gateway Restore will wipe out any work you already have.
The login credentials for this Gateway are:
- username: admin
- password: password
If you already have Ignition installed, make a backup of your Gateway before starting.
Download the CDC Gateway backup here.
Easy Challenges - 5 XP each
Take the ICC 2026 Training Survey!
Give us feedback regarding our training content.
Prompt:
Complete the survey linked to the QR code on the home page, /.
Implement Dynamic Navigation
Implement dynamic role-based navigation in either Vision or Perspective.
Prompt:
In the DynamicNavigation project, there are some displays that only users with certain roles should be able to access:
- Operators should only be able to navigate to the Operator window or the /operator page.
- Engineers should only be able to navigate to the same displays as an Operator, as well as the Engineer window or /engineer page.
- Managers should be able to access every display.
This project uses the User Source and Identity Provider named dynamic-nav.
- All users have the password: password
Troubleshoot a Broken Overview Screen
Troubleshoot a page that appears broken in a Perspective Session.
Prompt:
In the /motors page you will find the following issues:
- Motor 6 is showing information for Motor 1.
- LED Displays are broken.
- The motor graphics all have an error overlay.
Find and fix these problems. Be ready to explain the cause and show your solution to the trainer.
Symbol Factory Artist
Show off your artistic talent using the Symbol Factory and Vision drawing tools.
Prompt:
In a new Main Window, recreate a famous painting using only Symbol Factory elements and Vision drawing tools.
Show the art that influenced your creation in a web browser alongside the Vision window containing your masterpiece.
Use an Inherited Project Library Script
Write some Python functions to read and write to tags.
Prompt:
Create a new project that other projects may inherit from. Set this project as the parent to any other projects in the Gateway.
In the parent project, create a project scripting library called unleashed.
Write a function that does the following:
- Read a tag at a given tag path.
- Print the tag value.
Write a second function that does the following:
- Write a given value to a tag at a given path.
- Call the first function you wrote and pass it the given tag path.
You can use the tags in the Tag Read Write folder in the default Tag Provider for testing.
Open a child project and leave the Script Console up on the screen for a trainer to check your work.
Medium Challenges - 10 XP each
Repeat a Dynamic View
Use indirection to display a dynamic amount of dynamic data.
Prompt:
Create a parameterized view to display the following gizmo information.
- Gizmo name
- Gizmo category
- Gizmo category description
The view should display information for a single gizmo based on some parameter passed in.
All values must be labeled.
Create a second view with a Flex Repeater component.
- The Flex Repeater should show a dynamic number of instances of the parameterized view you created.
Add some input component to control the number of instances being repeated.
Create a Taffy Puller UDT
Design a complex, multi-layered data template.
Prompt:
In the Briny Sweets Saltwater Taffy device connection, there are 5 taffy pullers among 3 production lines. Each taffy puller device has 2 arms.
Define a UDT to represent a single arm on a taffy puller.
Define a UDT to represent an entire taffy puller.
- The arms of the TaffyPuller UDT definition must use instances of the Arm UDT.
- All of the OPC Item Paths must be dynamic.
- The TaffyPuller UDT must have no more than 2 parameters.
- Create instances for each taffy puller on the Briny Sweets device connection.
Hard Challenges - 15 XP each
Create an Input Form
Create a robust display to accept user input to update a database, with an automatically updating display.
Prompt:
Create a view that uses the Form component to allow users to add a new gizmo to the gizmos database table.
- This form should be able to accept all possible fields in the gizmos table, except for gizmo_id.
- The form should successfully add a new record to the database.
Each gizmo can be assigned a category, so provide a way for the user to select among valid categories to assign to the gizmo.
On the Input Form Table view, make it so that an operator can double-click a row on the table to open the form view as a popup.
- On opening, the form should be populated with the data from the selected table row.
When the new gizmo is entered, the popup should close and the table should update to show the new data.
Create Style Classes Based on a Style Guide
Translate design guidelines into reusable sets of style rules.
Prompt:
Using the provided style guide, create and apply the necessary style classes to make any of the 'Gizmo Table' views match the requirements of the guide.
In addition to the colors and fonts in the guide, add a label as a header for the view. This label should have a font size of 56px, a solid border on the bottom only that is a color you haven’t used for the text or background and is 8px below the text, and a bottom margin of 16px.
Make sure that headers only use Roboto, and that all other fonts use Archivo.
Override the built-in style classes so that all labels - even new ones added to the project later - match the look and feel of the labels you have styled.
Create style classes necessary to style the table on the view you selected to match the style guide. Specifically, change the font on the table headers to be Roboto, bold, 24px, with a text color and background color matching the style guide. Change the cell text to be Roboto 16px, with a text color and border colors to match the style guide. Make sure the selection highlight matches the guide as well.
Update a Perspective Table With a Subview
Implement a complex data entry display.
Prompt:
Create a view that will be used as a subview on the Table component in the Subview Form Table view.
- This view should include input components to represent all fields on the table.
When the subview opens, all of the fields should be pre-populated with the data from the row that was expanded.
The following things should happen when the data is submitted:
- The database should be updated with any fields edited by the user.
- The subview collapses.
- The table component displays the newly updated data.