Check-In management can be cumbersome. Whether you are a single campus(like us) or a multi-campus Church, there are many things that need to be configured correctly to have a successful check-in. In this recipe I'll detail how we configure our devices to make check-in and room manager application devices a little easier to manage. Keep in mind, each organization is different and you might need to configure things different than I describe here. My hope is that you can take parts(or all) of this and craft a solution that fits your needs.

I'm going to focus this post on creating an alternate check-in configuration page and how to get all of the basics set up so you can build upon this, and hopefully, make management of your check-in devices easier. You will need to be a Rock admin to follow along as you will need to create the necessary items in Rock that you'll use in your configuration. As we go through each step, I'll explain why I configured things like this and mention other options that would also work. I'll be using the demo site to configure things so that you can follow along. I would also highly recommend reading over the Checking Out Check-In Documentation prior to implementing this for your church.


If you manage check-in you should be familiar with this screen. When using the default URL, after you login, It's the first screen you see when you launch check-in. This recipe will give you the ability to bypass this screen(or not) when an app is started by using a different URL. Usually, you configure the check-in URL to following the example You can however use a different URL. Out of the box Rock offers the ability to bypass this screen by using a different URL(Read about this here), We'll be taking advantage of that, but in a different way. 

We'll also be going about the Authentication part of this a bit differently. Check-in requires a login by default, managing that login can be solved in a few different ways, some churches use pre created short URL's for this, others created alternate landing pages with button specific configurations, others might have staff\volunteers login to the application and configure it manually. In this system I use a different Rock Person for each check-in area(s)(not per device), each person is added to the RSR - Rock Check-in Devices Security Group. Using multiple persons isn't necessary(but I would recommend it) The authentication will also be restricted to IP addresses that you have specified, so that we can create login tokens dynamically instead of using short links or manual authentication.

Adding a different authentication person for different check-in devices\areas can help improve reporting on how people are created in Rock. Take first time guest, how are they created in your system? Did they fill out a form online? Were they entered during check-in? Did they leave a card in an engagement area\information center?

To set this up you'll need the files that I've attached to this recipe.

  • checkinRedirect.lava file
  • Check-in Active Time Shortcode text file

You'll also need to gather some information and have it ready for creating the defined type and global attribute.

  • Group Type Id's(Check-in Areas) for check-in groups
  • Check-in Configuration Template Id's that you want to use along with their names
  • Theme Names for Check-in
  • Public IP Address of your Church(or multiple IP's)

The information that you need to gather(listed above) is probably the most important part, these groups and templates are already in your rock system and you use them for every check-in(knowingly or unknowingly). The Group Type Id's are the Check-in Areas that you select(checkboxes) when starting the check-in application, you also select the Check-in Configuration template Id's and the theme(circled in the above screen shot). You can get the Id's by visiting the Admin Tools > General Settings > Group Types page and opening each group type. You'll find the Id hidden in the drop down just under the panels header(click the down chevron on the right side)

Ok... What is the Outcome?

  • We'll have a defined value(s) list that control what a devices URL will be
  • You'll have a troubleshooting page to validate your configuration
  • You won't need the device in your hand to reconfigure the settings or URL
  • Each time the Check-in App is opened a new login token is created(bye bye login token issues)
  • You will be able to over ride your configuration and use the default /checkin route if desired

If you have a web farm or multi server Rock Instance, there are a few things that you'll want to be aware of and more information will be provided in a different post(Shout out to Chris Rea!). If you have a multi campus site on a single server, you'll need to allow all campus IP's for authentication tokens, otherwise the page will not add the authentication token to the generated URL.

If you are still following along and want to set this up. There are a few things I want to clarify. Please leave the default Check-in pages and routes default, we will add a new page with a new route for our purpose, never change the default page or routes. The purpose of this recipe isn't to remove that page but give you another option that includes a override back to the default page. You will need to modify rocks security on the RSR - Check-in Devices Group. In Rock v13 there are new security parameters around person authentication tokens, by default people in this group are not allowed to use tokens. The Security Level of the group needs to be changed from Extreme to High to allow the use of tokens. If this concerns you, you will need to consider a different method for login, you can still perform the device URL configuration described in this recipe, but at some point you'll need an authenticated user to access Rocks Check-in System. This recipe uses the Check-in Clients IP address as a verification mechanism.

Since you'll be creating attributes and their attribute-keys, and these values are coded into the lava file. Please pay attention to spelling and capitalization, or make the necessary changes to your implementation.

Lets Get Started

Global Attribute

First, navigate to Admin Tools > General > Global Attributes and create the Global Attribute for our Authentication Process and name it AutoConfigIPs, it's type should be text, click save, then enter your public IP addresses in the new attribute.


Defined Type

Next, add a defined type to hold the check-in configurations. Navigate to  Admin Tools > General > Defined Types and create a Defined Type. Name it Device Configuration, enter a description, give it a category of Check-In and click save.


Defined Type Attributes

To configure a device(check-in URL) we'll need a few attributes, add 4 attributes to the newly created defined type. The attributes should be configured as:

  • Name: AuthPerson
    • Field Type: Person
    • The person will be selected on each defined value so leave this blank
    • Check Show in Grid
  • Name: Theme
    • Field Type: Single Select
    • Add your theme names to the values list
    • Check Show in Grid
    • Demo server values: CheckinPark,CheckinAdventureKids,CheckinAero,CheckinBlueCrystal,CheckinElectric
  • Name: Check-In Configuration
    • Field Type: Single Select
    • Add your Check-In Configuration Names and Id's to the values list
    • Check Show in Grid
    • You can use SQL to generate this list or you can write out the values(we rarely add new configurations so I just write it like below)
    • Demo server values: 35^Service Attendance,30^Volunteer Check-In,14^Weekly Service Check-in
  • Name: Check-In Groups
    • Field Type: Multi Select
    • Add your check-in Group Type Id's to the values list. (I use SQL)
    • Check Show in Grid
    • You can use SQL to generate this list but you'll need to add your Id's to the query provided, if you have an easier way let me know!
    • Demo server values: 18^Check-in Test Area,19^Nursery/Preschool Area,20^Elementary Area,21^Jr High Area,22^High School Area,23^Serving Team
  • If you want to use SQL, add your group type Id's to the (111,222,333...) area seperated by commas
        Name as Text,
        Id as Value
            -- You can add other specific groups at the end
            where Id in (111,222,333,...)
    ORDER BY name ASC


Defined Values

Now that you have a Defined Type set up, create 3 different defined value configurations for devices to use, a Kids configuration, a Youth configuration and a Volunteer configuration. This is just an example as you'll need to determine how many defined values you'll need for your environment. We have 6 in our environment. 


Entity Attributes

Next, we'll need to create a few entity attributes to link our configuration to Check-In Devices. We'll need to add 5 attributes to the Device Entity. Navigate to Admin Tools > System Settings > Entity Attributes. Filter the list by the Device Entity, you should have a few already there as Spark uses this capability in core development (please do not remove any of the core attributes, you could have issues if you do). The default Check-in Device Type Id is 41, if it is not the same in your system make sure you change this value. These attributes should be configured as:

  • Name: Device Configuration
    • Qualifier Field: DeviceTypeValueId
    • Qualifier Value: 41
    • Field Type: Defined Value
    • Defined Type: Device Configuration
    • Show in Grid: Yes
  • Name: Alternate Schedule
    • Qualifier Field: DeviceTypeValueId
    • Qualifier Value: 41
    • Field Type: Schedule
    • Show in Grid: Yes
  • Name: Alternate Configuration
    • Qualifier Field: DeviceTypeValueId
    • Qualifier Value: 41
    • Field Type: Defined Value
    • Defined Type: Device Configuration
    • Show in Grid: Yes
  • Name: Override
    • Qualifier Field: DeviceTypeValueId
    • Qualifier Value: 41
    • Field Type: Boolean
    • Show in Grid: Yes
    • This attribute will allow you to bypass this entire process, and default back to the stock Rock route of /checkin.
  • Name: Alternate Configuration Device
    • Qualifier Field: DeviceTypeValueId
    • Qualifier Value: 41
    • Field Type: Single Select
    • Control Type: Drop Down List
    • Values: SQL Statement
    • Show in Grid: Yes

        Name as [Text],
        Id as [Value]
        WHERE DeviceTypeValueId = 41 

    If your device type Id is different that the default Id please change the above SQL. Alternate Configuration Device allows you to make one device mimic a different device(including the alternate device printer). The main reason behind this was multipurpose iPads that are moving to different areas\schedule and making use of those fixed area printers. You might never use this but it's here.


    Setting up the page

    • Navigate to Admin Tools > CMS > Pages > Check-in
    • Create a child page
    • Name it Auto Config(you can choose another name)
    • Set the Page Route under Advanced Settings to checkinkiosk(you can change this route if desired)
    • Save it.
    • Edit the page security and set it to Allow All Users.
    • Add a HTML Block to the page's Main Zone and add the contents of the checkinRedirect.lava file to it.
    • In the HTML Blocks settings enable Lava Entity Commands

    Make sure you set the security to all users. If you do not then this page will not work unless you are logged in, which defeats the purpose. Be sure to enable Lava Entity Commands. If you get a lava error at the top of the page that says "The Lava command 'rockentity' is not configured for this template."  that is the reason. 

    checkinRedirect Lava

    Creator: Jonathan Anderson - The Ark Church
    Created Date: Some time in 2019
    Requirements: The Lava Entity Command must be enabled on the block settings

    setup -/
    {% stylesheet %}
        .well {
            overflow: hidden;
        {% endstylesheet %}
        {% assign debug = false %}
        {% assign debug = 'Global' | PageParameter:'debug' | AsBoolean %}
        {% assign ckHostName = 'Global' | PageParameter:'CheckinKiosk' | AsString | SanitizeSql %}
        {% assign publicAppRoot = 'Global' | Attribute:'PublicApplicationRoot' %}
        {% assign superAdminGroup = '2' %} /- Add your desired admin group Id, default is RSR-Rock Administration -/
        {% assign authorizedIp = 'Global' | Attribute:'AutoConfigIPs' %}
        {% assign clientPublicIp = 'Global' | Client:'ip' %}
        {% assign purpose = '' %}
        /- If a hostname find the device else redirect to the normal checkin page -/
        {% if ckHostName and ckHostName != '' %}
            {% assign hostAddress = 'Global' | Page:'Host' %}
            {% device where:'Name == "{{ ckHostName }}"' count:'true' %}
                {% if count == 0 %}
                    {{ '/checkin' | PageRedirect }}
                {% endif %}
            {% enddevice %}
            /- Get the device values if the device name is recognized -/
            {% device where:'Name == "{{ ckHostName }}"' %}
                /- See if the alternate schedule, if any, is active, and if it is assign a new device Id -/
                {% assign alternateScheduleId = device | Attribute:'AlternateSchedule','Id'%}
                {% assign alternateScheduleName = device | Attribute:'AlternateSchedule'%}
                {% assign override = device | Attribute:'Override' | AsBoolean %}
                {% assign purpose = device | Attribute:'Purpose' %}
                /- if there is an alternate schedule configured for this device and it is active, get the alternate configuration information -/
                {% if alternateScheduleId and alternateScheduleId != '' %}
                    {% capture shortcodeOutput %}{[ checkinisactive scheduleid:'{{alternateScheduleId}}']}{% endcapture %}
                    {% assign active = shortcodeOutput | Trim | AsBoolean %}
                    {% if active == 'true' %}
                        {% assign alternateConfigurationDevice = device | Attribute:'AlternateConfigurationDevice','RawValue' %} /- this mimics another device -/
                        {% assign alternateConfiguration = device | Attribute:'AlternateConfiguration' %} /- this replaces the default device configuration -/
                    {% endif %}
                {% endif %}
                /- If this device has an alternate device or department configuration, get those settings, else get this devices setting -/
                {% if alternateConfigurationDevice and alternateConfigurationDevice != '' %}
                    /- nested device statement for -/
                    {% device where:'Id == "{{ alternateConfigurationDevice }}"' %}
                        {% assign config = device | Attribute:'DeviceConfiguration','Object' %}
                        {% assign deviceId = device.Id %} /- alternate device's id. This will also use the alternate devices printer -/
                    {% enddevice %}
                {% elseif alternateConfiguration and alternateConfiguration != '' %}
                    {% assign config = device | Attribute:'AlternateConfiguration','Object' %}
                    {% assign deviceId = device.Id %} /- current device's id. -/
                {% else %}
                    {% assign config = device | Attribute:'DeviceConfiguration','Object' %}
                    {% assign deviceId = device.Id %} /- current device's id. -/
                {% endif %}
                /- assign device configuration parameters for Url -/
                {% assign deviceConfiguration = config %}
                {% assign checkinConfigId = deviceConfiguration | Attribute:'Check-InConfiguration','RawValue' %}
                {% assign checkinConfigName = deviceConfiguration | Attribute:'Check-InConfiguration'%}
                {% assign groupTypes = deviceConfiguration | Attribute:'Check-InGroups','RawValue' %}
                {% assign groupNames = deviceConfiguration | Attribute:'Check-InGroups' %} /- -/
                {% assign themeName = deviceConfiguration | Attribute:'Theme' %}
                {% assign autoLoginUser = deviceConfiguration | Attribute:'AuthPerson','Object' %}
                /- Build the Url to redirect to. If the override attribute is true then, set the URL to the default check-in configuration page -/
                {% if override == 'true' %}
                    {% assign redirectUrl = publicAppRoot | Append:'Checkin/' %}
                {% elseif purpose == "Check-in Manager" %}
                    {% assign redirectUrl = publicAppRoot | Append:'checkinmanager' %}
                {% else %}
                    {% assign redirectUrl = publicAppRoot | Append:'Checkin/' | Append:deviceId | Append:'/' | Append:checkinConfigId | Append:'/' | Append:groupTypes | Append:'?Theme=' | Append:themeName %}
                {% endif %}
                /- If this device ip matches our allowed IP list, append the person token for auto login to the Url -/
                {% if authorizedIp contains clientPublicIp %}
                    {% assign autoLoginUserParameter = autoLoginUser | PersonTokenCreate:14400,null,null %}
                    {% assign redirectUrl = redirectUrl | Append:'&rckipid=' | Append:autoLoginUserParameter %}
                {% endif %}
            {% enddevice %}
        {% else %}
            /- No hostname in URL, redirect to default check-in page -/
            {% assign redirectUrl = publicAppRoot | Append:'Checkin' %}
        {% endif %}
        /- if an admin visits this page and passes a debug pageparameter show debugging information, else redirect to the url configured above -/
        {% assign inSuperAdmin = CurrentPerson | Group:superAdminGroup | Size %}
        <div class="container-fluid">
        {% if inSuperAdmin > 0 %}
            {% if ckHostName == '' or device == null %}
                <div class="alert alert-warning text-black">
                    <b>No checkinkiosk parameter was passed or the device name passed wasn't recognized.</b>
                    <p>You are seeing this page because you are on site, logged in, and a rock admin. Don't know how this page works? Read the documentation.</p>
            {% endif %}
                <h2 class="text-center">Check-in Administration</h2>
                <p class="text-center text-black">
                    If you weren't an admin you would have been automatically redirected. You can use the button below to continue. You'll want to use a private browsing tab to avoid issues.
                    {{ '<a class="btn btn-primary" href="' }}{{ redirectUrl }}{{ '" target="_blank">' }}{{ redirectUrl | Split:'&rckipid' | Index:0 }}{{ '</a>' }}<br>
            <p class="text-black">
                The checkin url above was built dynamically. The parts of the url are as follows:
                <pre>https:// Rock URL / Checkin / Device Id / Checkin Configuration Id / Group Id(s) / ?Theme / &Person Token</pre>
                You can find more information here
                <a href="" target="_blank">Rock Check-in Documentation </a>
            {% if debug == true %}
            <div class="row">
                <h2 class="alert alert-info">Debuging Details</h2>
                <table class="table text-black">
                            <th scope="col">Host Name</th>
                            <th scope="col">Device ID</th>
                            <th scope="col">Public IP</th>
                            <th scope="col">Authorized IP</th>
                            <th scope="col">Configuration ID</th>
                            <th scope="col">Groups</th>
                            <th scope="col">Theme</th>
                            <th scope="col">User</th>
                            <th scope="col">Alt Schedule</th>
                            <th scope="col">Alt Schedule Id</th>
                            <th scope="col">Alt Schedule Active</th>
                            <th scope="col">Alt Device</th>
                            <th scope="col">Alt Configuration</th>
                            <th scope="col">Override</th>
                            <th scope="row">{{ ckHostName }}</th>
                            <td>{{ deviceId }}</td>
                            <td>{{ clientPublicIp }}</td>
                            <td>{{ authorizedIp }}</td>
                            <td>{{ checkinConfigName }} ({{checkinConfigId}})</td>
                            <td>{{ groupNames }} ({{ groupTypes }})</td>
                            <td>{{ themeName }}</td>
                            <td>{{ autoLoginUser.FullName }}</td>
                            <td>{{ alternateScheduleName }}</td>
                            <td>{{ alternateScheduleId }}</td>
                            <td>{{ active }}</td>
                            <td>{{ device | Attribute:'AlternateConfigurationDevice' }}</td>
                            <td>{{ device | Attribute:'AlternateConfiguration' }}</td>
                            <td>{{ override }}</td>
            <div class="row">
                <div class="col-xs-12">
                    {% if device != '' and device %}
                        {{ device | Debug }}
                    {% endif %}
            {% endif %}
        {% else %}
            {{ redirectUrl | PageRedirect }}
        {% endif %}


    At this point we should be able to navigate to the page by clicking the pages URL link and see the following screen shot. Since we did not pass in a device, if you are an admin you'll see the check-in page with a little information. The check-in link generation from the lava file will default to /checkin when no device or and invalid page parameter is sent.


    Setting up the device

    Navigate to Admin Tools > Check-in > Devices and create 3 devices, 1 for Kids, 1 for Youth, and 1 for volunteers.

    • kids-kiosk-01
    • youth-kiosk-01
    • volunteer-kiosk-01

    Set each Devices "Device Configuration" attribute to the defined value of Kids, Youth and Volunteer respectively. For this demo set the Kiosk Type to Browser, but on your system set it for the type of device you have. If you have printers, don't forget to set them. We will not be covering Printers in this walkthrough. Make sure you include a location on the device(Main Campus for the demo server), if you don't you might not be able to check-in.

    You can build your configurations many ways. For example, you can configure one device for all of your areas and control it with a single Defined Value(add all of the group type Id's you want to the value list), or you can create a Defined Value configuration per campus so you get the right campus groups and schedules. We have large areas so I create one Defined Value for each. I also have configurations that do children's, volunteers, and special needs check-in on the same device. You can make as many or few devices as you like. We have a device for each check-in station in our system, this allows me to control each one individually if desired.

    If you don't have a consistent naming pattern, please consider adopting one(example device names above). It will extend the life of your IT Admins if the device hostname and the Rock device name are consistent. And they might just hug you.( if you're a 1 man team you can hug yourself)


    Setting up the Shortcode

    We will need a Lava Shortcode for the check-in page to work with a device. This Shortcode will output true or false based on the input of a schedule Id or group Id.(Thanks Jeff Richmond!) In this case, it's used to determine if the alternate schedule, that could be set on a device, is active. Use the provided short code markup text file to create the new short code. Navigate to Admin Tools > CMS Configuration > Lava Shortcodes, to add a new one.

    Shortcode Markup

    Name: Check-In Is Active
    Tag Name: checkinisactive
    Tag Type: Inline
    Checks if the check-in window has started for a specific schedule or the schedule for a specific group.
    <pre>{[ checkinisactive groupid:'1234' ]}</pre>
    <p>&nbsp; &nbsp; - or -</p>
    <pre>{[ checkinisactive scheduleid:'123' ]}</pre>
    <p>True or False, depending on whether the check-in window is currently open.</p>
    Shortcode Markup:
    {%- if groupid and groupid != '' -%}
        {%- assign group = groupid | GroupById -%}
        {%- assign groupSchedule = group.Schedule -%}
    {%- elseif scheduleid and scheduleid != '' -%}
        {%- schedule id:'{{ scheduleid }}' -%}
            {%- assign groupSchedule = schedule -%}
        {%- endschedule -%}
    {%- endif -%}
    {%- assign openOffset = groupSchedule.CheckInStartOffsetMinutes | Times:-1 | AsString | Default:'-30' | AsInteger -%}
    {%- assign closeOffset = groupSchedule.CheckInEndOffsetMinutes | AsString | Default:'30' | AsInteger -%}
    {%- assign now = 'Now' | Date:'M/dd/yyyy h:mm:ss tt' | AsDateTime -%}
    {%- if groupSchedule.iCalendarContent != empty -%}
        {%- assign nextStartDateTime = groupSchedule.iCalendarContent | DatesFromICal:1,'startdatetime' | Index:0 %}
    {%- endif -%}
    {%- if nextStartDateTime -%}
        {%- assign openDateTime = nextStartDateTime | DateAdd:openOffset,'m' -%}
        {%- assign closeDateTime = nextStartDateTime | DateAdd:closeOffset,'m' -%}
        {%- if now >= openDateTime and now <= closeDateTime -%}{{ 'true' | AsBoolean }}{%- else -%}{{ 'false' | AsBoolean }}{%- endif -%}
    {%- elseif groupSchedule.WeeklyDayOfWeek -%}
        {%- assign dayOfWeek = now | Date:'dddd' -%}
        {%- if dayOfWeek == groupSchedule.WeeklyDayOfWeek -%}
            {%- if groupSchedule.WeeklyTimeOfDay -%}
                {%- assign startDateTime = 'Now' | Date:'M/dd/yyyy' | Append:' ' | Append:groupSchedule.WeeklyTimeOfDay | Date:'M/dd/yyyy h:mm:ss tt' -%}
            {%- else -%}
                {%- assign startDateTime = 'Now' | Date:'M/dd/yyyy 00:00:00' -%}
            {%- endif -%}
            {%- assign openDateTime = startDateTime | DateAdd:openOffset,'m' -%}
            {%- assign closeDateTime = startDateTime | DateAdd:closeOffset,'m' -%}
            {%- if now >= openDateTime and now <= closeDateTime -%}{{ 'true' | AsBoolean }}{%- else -%}{{ 'false' | AsBoolean }}{%- endif -%}
        {%- else -%}{{ 'false' | AsBoolean }}{%- endif -%}
    {%- else -%}{{ 'false' | AsBoolean }}{%- endif -%}
    groupid (empty value)
    scheduleid (empty value)
    Enabled Lava Commands: 

    Configuring Devices

    Earlier I spoke of changing the default URL from which uses the default /checkin route to a new URL. You can now test these new URL's in you browser, and after you have it configured like you want, you can add this new URL to your devices to control what configuration they have.

    The url is broken down to the following:

    • Host Server: https://your.domain/checkinkiosk
    • ?checkinkiosk - URL parameter - Rock Device Name
    • &debug - URL parameter - true

    I use a 1:1 physical device to Rock device for raspberry Pi's. For iPads I don't always stick to 1:1, it just depends on the use case. Many to 1 is fine if you have a printing solution worked out e.g.  Windows, USB Printing, iPad without printer. I would however recommend that every device you use for check-in should also have a rock device, and a unique URL. By doing this you will always have control of what the device does in the check-in app

    If you followed along on the demo site and used all of the same names used in this documentation then you will now have 3 URL's


    Now that we have it all set up lets look at the debug page with a device and passing the debug parameter. I'll use know it's different in the screen shot)


    If you have set everything up properly you should see a screen similar to the screen shot above. Test it out, change the URL to a different device and see the different output, edit one of your defined values and change the settings on a device then refresh the page. You should see the new values reflected, try changing the theme, group types, and Check-in Configuration.

    Bonus Material!

    Device List Enhancement 

    Don't want to type out all of those device names each time you need to verify a configuration? Here's a trick: Add a new custom column to the devices list that gives you a button directly to the debug screen. Navigate to Admin Tools > Check-in > Devices, use the admin tool bar to edit the block configuration, edit the Device List Block, choose Custom Grid Options, drop down the Custom Columns panel and add a column. Make it the first column, with a 0 Offset, set the Header text to "Debug Page" and paste in the following lava

    If your device value isn't the default 41 please change this. This lava doesn't display in this editor so I've attached it in the resource folder


    Defined Type Configuration Page

    Want to include your Device Configuration Defined Value List in your Check-in management pages? No problem. On the Check-in Admin page, > Admin Tools > Check-In,  use the admin tool bar to add a child page. Name it Device Configuration, add an icon if you wish(fa fa-cogs is what I used) and save. Click on the newly created page in the list(at the bottom) to navigate to the page. Once there, Use the admin toolbar to show your Page Zones. In the Feature Zone you need to add a new block of type Defined Value List and save it. After that configure the block to show the Defined Type Device Configuration that you created earlier in this walkthrough.


    I hope this has helped you as much as it has helped me. If you want more details I'm on Rocket Chat and you can DM me any time @jonathan.a. In the future look for a follow up post concerning Web Farms\Multi Server Rock Instances, and I'll make a Screen Recording all about Pi's and how we use them(sorry no how to on Pi's... well maybe a bare bones overview). If you find anything that doesn't make sense, see a typo, or a part of the lava could be improved I'm all ears! Please remember that the comment section doesn't notify me so if you are needing an answer Rocket Chat is the way to go.

    Until Next time. Rock On!