xhibitsignage 3.0

The Mvix Software, XhibitSignage, is moving to 3.0

XhibitSignage 3.0 is coming to XhibitSignage.com, the Mvix cloud-based, content-rich digital signage software. Along with exciting new features, it also includes enhanced workflows to make managing digital signage even easier than it already is. Keep reading to learn more about these important upgrades.

How it all started

In 2014-15, XhibitSignage 2.0  was built as a UI makeover of our XhibitSignage platform but the fundamental technology stack remained unchanged at that time. A lot has changed in the last 12 years for the XhibitSignage platform. Our client preferences have changed, user experience requirements have changed, content requirements changed,  and security requirements have changed as well.

In the last 10 years, we also integrated over a dozen 3rd party APIs for fetching dynamic data and content from 3rd party sources. These integrations were based on an older tech stack and therefore required constant maintenance and upkeep. Above all, our client-base had mushroomed and our server architecture was almost at 75-80% of its capacity. So in Q4 2018, we started brainstorming the idea of a new version of XhibitSignage.

What we decided moved towards

Several options were discussed: from a simple UI refresh (i.e. a new cost of paint ) all the way to a complete overhaul of the entire system. There were significantly fewer votes in favor of “complete overhaul” since the current solution was working perfectly. 

Q1 2019, planning started for a “few minor enhancements” to the solution architecture and within a few weeks, there was ample consensus that a complete overhaul of the entire solution will not pm;y yield better results, it’ll serve our clients better in the long run.

The initial time and cost estimates for developing the application from scratch were mind-boggling and were quickly swept aside so as not to raise eyebrows. Then started the overwhelming task of

  1. what new technologies to adopt
  2. what old technologies to eliminate

Imagine building a new house and wondering if you should run CAT6 ethernet wires in the walls, fiber, go wireless (with extenders) or do nothing at all since 5G is around the corner.

If you think the selection of a tech stack was complicated, the issue got even more complicated when you have to find the skill sets and expertise in your existing team, requirements for training and acquiring additional development resources and expertise. 

The NEW Tools

XhibitSignage 3.0 is built upon the latest and greatest tech stack on a custom-built UI designed by an award-winning designer. 

A combination of Laravel (backend) and ReactJS (frontend), all packaged seamlessly via hundreds of RestAPIs and hosted on Amazon’s AWS for scalability and reliability. 

The new server platform boasts of an enterprise-grade architecture utilizing Cloudfront CDN,  Elastic Load Balancer (ELB) located inside of an Elastic Beanstalk (ELB) cluster along with a scalable number of EC2 instances.

All media is handled via a Relational Database Service (RDS) instance that provides us with a highly scalable/available database system. In front of this is an ElasticCache service that will do object-level caching on our database assets.

Logs, device health metrics and playback reports are all handled by DynamoDB Document Store.

The CMS-player communication is also revamped so as to allocate more resource-intensive tasks to the CMS server and allow the device to do the one thing that it should do – smooth, reliable playback.

JQuery is now legacy.

It is almost eliminated from the entire application.

I say “almost” because we have to leave some support for backward compatibility with existing devices out in the field.

Significant authentication techniques and new roles and permissions are designed to enhance overall system security.

All communication within the CMS and with the devices is all encrypted with 256-bit encryption. We integrate with OKTA for seamless SAML and AD integration. 

The NEW Shiny Stuff

All New User Experience

Using words to describe “design” or “user interface” is irrelevant.

Judge for yourself:

What do you think? 

All New Design Gallery

There has been almost unanimous client feedback that we should somehow combine our popular SignageCreator application inside of XhibitSignage.

It’s happening now with 3.0!

We have integrated all our 1000+ designs from SignageCreator in 3.0 with a new state-of-the-art design editor.

xhibitsignage 3.0

The editor’s interface is intuitive and reliable. It also opens doors for us to support hundreds of custom fonts, patterns, background, illustrations etc.

All New Content Media

Content has been the front-and-center of the Mvix brand since its inception.

In recent years we embarked on integrating 3rd party API data sources so as to bring dynamic data to the screens. We pushed this agenda further with XhibitSignage 3.0.

Few new content media have been integrated already and a few dozen more are in the pipeline. New content media includes:

  1. Slack
  2. News
  3. Twitch
  4. MS PowerBI

All New Responsive Visualizations (aka Themes)

In 2016 when we started introducing the concept of visualizations/themes for our content apps, we never knew how popular those will be. Clients loved it and wanted more.

In the current XhibitSignage 2.0, we have an average of 2-3 “themes” for a few content apps. XhibitSignage 3.0 is on steroids.

We made a commitment to provide 8-10 new and modern themes for over 22 content apps… and wait for it… these themes are fully responsive within template zones. This means that when you add the media to zones, it will fit perfectly.

Guaranteed.

All New Device Health Dashboard

One of the upsides of exhibiting at tradeshows is that you receive A LOT of unsolicited feedback. This new feature is a result of such consistent, never-ending, fundamentally-correct advice we received across market verticals.

So it had to happen in 3.0.

To start, we are now collecting about 24 device parameters (health indicators) and reporting back to the CMS for diagnostics and preemptive troubleshooting. Enterprise-grade, it is!

We are super excited about this new version of our baby. Hope you will be too! Let us know if you would like to learn more about something specific and we will cover it in our next blog.

Ready to get started?

Are you exploring your digital signage project needs (hardware, software and content)? Looking for just the software or a full-scope proposal? Would you like you a personalized software demo?

Starting at

$ 299

One time cost

  • Free software
  • Unlimited users
  • Unlimited cloud storage
Get a Free Trial

Have a project in mind?

Get a Quote

Lets discuss your project and we’ll put together a customized, line-itemized estimate and proposal.

Set Up a Call

Let's Connect

Contact a Mvix Solutions Consultant below or call us at +1 866.310.4923 to discuss your digital signage needs.
  • This field is for validation purposes and should be left unchanged.

Ask an Mvix expert how we can help:

  • Request a demo and see how Xhibitsignage integrates with the content apps you rely on for more effective communication
  • Get a free quote for our software (when using your own hardware), software and digital signage players, or full-service solutions that include software, hardware, content, and implementation
  • Learn how to use digital signage to grow your business by communicating relevant and useful information

If you’re already an Mvix customer and would like technical support, you can open a support ticket here.

[gravityform id="9" title="false" description="false"]
<div class='gf_browser_unknown gform_wrapper gform_legacy_markup_wrapper' id='gform_wrapper_9' ><form method='post' enctype='multipart/form-data' id='gform_9' action='/blog/mvix-software-xhibitsignage-3-0-upgrade/' novalidate autocomplete="nope"> <div class='gform_body gform-body'><ul id='gform_fields_9' class='gform_fields top_label form_sublabel_below description_below'><li id="field_9_1" class="gfield w-50 gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_9_1' >First Name<span class="gfield_required"><span class="gfield_required gfield_required_asterisk">*</span></span></label><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_1' id='input_9_1' type='text' value='' class='medium' aria-required="true" aria-invalid="false" /> </div></li><li id="field_9_8" class="gfield w-50 gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_9_8' >Last Name<span class="gfield_required"><span class="gfield_required gfield_required_asterisk">*</span></span></label><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_8' id='input_9_8' type='text' value='' class='medium' aria-required="true" aria-invalid="false" /> </div></li><li id="field_9_2" class="gfield w-50 gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_9_2' >Email<span class="gfield_required"><span class="gfield_required gfield_required_asterisk">*</span></span></label><div class='ginput_container ginput_container_email'> <input autocomplete="nope" name='input_2' id='input_9_2' type='email' value='' class='medium' aria-required="true" aria-invalid="false" /> </div></li><li id="field_9_3" class="gfield w-50 field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_9_3' >Phone Number</label><div class='ginput_container ginput_container_phone'><input autocomplete="nope" name='input_3' id='input_9_3' type='tel' value='' class='medium' aria-invalid="false" /></div></li><li id="field_9_5" class="gfield field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_9_5' >Company</label><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_5' id='input_9_5' type='text' value='' class='medium' aria-invalid="false" /> </div></li><li id="field_9_6" class="gfield field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_9_6' >How can we help you?</label><div class='ginput_container ginput_container_textarea'><textarea autocomplete="nope" name='input_6' id='input_9_6' class='textarea medium' placeholder='Please give us a brief description of your project so we can assist you better' aria-invalid="false" rows='10' cols='50'></textarea></div></li><li id="field_9_9" class="gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_9' id='input_9_9' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_9_12" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_12' id='input_9_12' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_9_13" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_13' id='input_9_13' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_9_14" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_14' id='input_9_14' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_9_15" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_15' id='input_9_15' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_9_16" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_16' id='input_9_16' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_9_17" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_17' id='input_9_17' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_9_11" class="gfield helped-input field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_9_11' >Home Address</label><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_11' id='input_9_11' type='text' value='' class='medium' placeholder='Home Address' aria-invalid="false" /> </div></li><li id="field_9_18" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_9_18' >Phone</label><div class='ginput_container'><input autocomplete="nope" name='input_18' id='input_9_18' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_9_18'>This field is for validation purposes and should be left unchanged.</div></li></ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_9' class='gform_button button' value='Send Info' onclick='if(window["gf_submitting_9"]){return false;} if( !jQuery("#gform_9")[0].checkValidity || jQuery("#gform_9")[0].checkValidity()){window["gf_submitting_9"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_9"]){return false;} if( !jQuery("#gform_9")[0].checkValidity || jQuery("#gform_9")[0].checkValidity()){window["gf_submitting_9"]=true;} jQuery("#gform_9").trigger("submit",[true]); }' /> <input type='hidden' class='gform_hidden' name='is_submit_9' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='9' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_9' value='WyJbXSIsIjQwZDExOTMzOTMyMTFlN2IzYzhjNjFjODcwMzRmNThjIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_9' id='gform_target_page_number_9' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_9' id='gform_source_page_number_9' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div>
[gravityform id="8" ajax="true" description="false" title="false"]
<div class='gf_browser_unknown gform_wrapper btn-prev-next-hidden_wrapper gform_legacy_markup_wrapper' id='gform_wrapper_8' ><div id='gf_8' class='gform_anchor' tabindex='-1'></div><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_8' id='gform_8' class='btn-prev-next-hidden gform_legacy_markup' action='/blog/mvix-software-xhibitsignage-3-0-upgrade/#gf_8' novalidate autocomplete="nope"><div id='gf_page_steps_8' class='gf_page_steps'><div id='gf_step_8_1' class='gf_step gf_step_active gf_step_first'><span class='gf_step_number'>1</span><span class='gf_step_label'></span></div><div id='gf_step_8_2' class='gf_step gf_step_next gf_step_pending'><span class='gf_step_number'>2</span><span class='gf_step_label'></span></div><div id='gf_step_8_3' class='gf_step gf_step_pending'><span class='gf_step_number'>3</span><span class='gf_step_label'></span></div><div id='gf_step_8_4' class='gf_step gf_step_last gf_step_pending'><span class='gf_step_number'>4</span><span class='gf_step_label'></span></div></div> <div class='gform_body gform-body'><div id='gform_page_8_1' class='gform_page' > <div class='gform_page_fields'><ul id='gform_fields_8' class='gform_fields top_label form_sublabel_below description_below'><li id="field_8_2" class="gfield field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' >How Do You Plan On Using Your Digital Signage Screens?</label><div class='ginput_container ginput_container_radio'><ul class='gfield_radio' id='input_8_2'> <li class='gchoice gchoice_8_2_0'> <input autocomplete="nope" name='input_2' type='radio' value='Use as an Employee Communications' id='choice_8_2_0' /> <label for='choice_8_2_0' id='label_8_2_0'>Use as an Employee Communications</label> </li> <li class='gchoice gchoice_8_2_1'> <input autocomplete="nope" name='input_2' type='radio' value='Use as a Client Communications' id='choice_8_2_1' /> <label for='choice_8_2_1' id='label_8_2_1'>Use as a Client Communications</label> </li> <li class='gchoice gchoice_8_2_2'> <input autocomplete="nope" name='input_2' type='radio' value='Other' id='choice_8_2_2' /> <label for='choice_8_2_2' id='label_8_2_2'>Other</label> </li></ul></div></li></ul> </div> <div class='gform_page_footer top_label'> <input type='button' id='gform_next_button_8_3' class='gform_next_button button' value='Next' onclick='jQuery("#gform_target_page_number_8").val("2"); jQuery("#gform_8").trigger("submit",[true]); ' onkeypress='if( event.keyCode == 13 ){ jQuery("#gform_target_page_number_8").val("2"); jQuery("#gform_8").trigger("submit",[true]); } ' /> </div> </div> <div id='gform_page_8_2' class='gform_page' style='display:none;'> <div class='gform_page_fields'> <ul id='gform_fields_8_2' class='gform_fields top_label form_sublabel_below description_below'><li id="field_8_4" class="gfield field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' >Have you used Digital Signage before?</label><div class='ginput_container ginput_container_radio'><ul class='gfield_radio' id='input_8_4'> <li class='gchoice gchoice_8_4_0'> <input autocomplete="nope" name='input_4' type='radio' value='Yes, we currently have digital signage' id='choice_8_4_0' /> <label for='choice_8_4_0' id='label_8_4_0'>Yes, we currently have digital signage</label> </li> <li class='gchoice gchoice_8_4_1'> <input autocomplete="nope" name='input_4' type='radio' value='No, this is my first digital signage project.' id='choice_8_4_1' /> <label for='choice_8_4_1' id='label_8_4_1'>No, this is my first digital signage project.</label> </li></ul></div></li></ul> </div> <div class='gform_page_footer top_label'> <input type='button' id='gform_previous_button_8_5' class='gform_previous_button button' value='Back' onclick='jQuery("#gform_target_page_number_8").val("1"); jQuery("#gform_8").trigger("submit",[true]); ' onkeypress='if( event.keyCode == 13 ){ jQuery("#gform_target_page_number_8").val("1"); jQuery("#gform_8").trigger("submit",[true]); } ' /> <input type='button' id='gform_next_button_8_5' class='gform_next_button button' value='Next' onclick='jQuery("#gform_target_page_number_8").val("3"); jQuery("#gform_8").trigger("submit",[true]); ' onkeypress='if( event.keyCode == 13 ){ jQuery("#gform_target_page_number_8").val("3"); jQuery("#gform_8").trigger("submit",[true]); } ' /> </div> </div> <div id='gform_page_8_3' class='gform_page' style='display:none;'> <div class='gform_page_fields'> <ul id='gform_fields_8_3' class='gform_fields top_label form_sublabel_below description_below'><li id="field_8_6" class="gfield two-col field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' >How Many Digital Signage Displays Are You Currently Looking For?</label><div class='ginput_container ginput_container_radio'><ul class='gfield_radio' id='input_8_6'> <li class='gchoice gchoice_8_6_0'> <input autocomplete="nope" name='input_6' type='radio' value='1 to 5' id='choice_8_6_0' /> <label for='choice_8_6_0' id='label_8_6_0'>1 to 5</label> </li> <li class='gchoice gchoice_8_6_1'> <input autocomplete="nope" name='input_6' type='radio' value='6 to 10' id='choice_8_6_1' /> <label for='choice_8_6_1' id='label_8_6_1'>6 to 10</label> </li> <li class='gchoice gchoice_8_6_2'> <input autocomplete="nope" name='input_6' type='radio' value='11 to 20' id='choice_8_6_2' /> <label for='choice_8_6_2' id='label_8_6_2'>11 to 20</label> </li> <li class='gchoice gchoice_8_6_3'> <input autocomplete="nope" name='input_6' type='radio' value='More than 20' id='choice_8_6_3' /> <label for='choice_8_6_3' id='label_8_6_3'>More than 20</label> </li></ul></div></li></ul> </div> <div class='gform_page_footer top_label'> <input type='button' id='gform_previous_button_8_7' class='gform_previous_button button' value='Back' onclick='jQuery("#gform_target_page_number_8").val("2"); jQuery("#gform_8").trigger("submit",[true]); ' onkeypress='if( event.keyCode == 13 ){ jQuery("#gform_target_page_number_8").val("2"); jQuery("#gform_8").trigger("submit",[true]); } ' /> <input type='button' id='gform_next_button_8_7' class='gform_next_button button' value='Next' onclick='jQuery("#gform_target_page_number_8").val("4"); jQuery("#gform_8").trigger("submit",[true]); ' onkeypress='if( event.keyCode == 13 ){ jQuery("#gform_target_page_number_8").val("4"); jQuery("#gform_8").trigger("submit",[true]); } ' /> </div> </div> <div id='gform_page_8_4' class='gform_page' style='display:none;'> <div class='gform_page_fields'> <ul id='gform_fields_8_4' class='gform_fields top_label form_sublabel_below description_below'><li id="field_8_8" class="gfield label text-center gfield_html gfield_no_follows_desc field_sublabel_below field_description_below gfield_visibility_visible" >Please Enter Your Company & Contact Information.</li><li id="field_8_10" class="gfield w-50 field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_8_10' >First Name</label><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_10' id='input_8_10' type='text' value='' class='medium' aria-invalid="false" /> </div></li><li id="field_8_15" class="gfield w-50 field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_8_15' >Last Name</label><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_15' id='input_8_15' type='text' value='' class='medium' aria-invalid="false" /> </div></li><li id="field_8_12" class="gfield w-50 field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_8_12' >Phone</label><div class='ginput_container ginput_container_phone'><input autocomplete="nope" name='input_12' id='input_8_12' type='tel' value='' class='medium' aria-invalid="false" /></div></li><li id="field_8_13" class="gfield w-50 gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_8_13' >Email<span class="gfield_required"><span class="gfield_required gfield_required_asterisk">*</span></span></label><div class='ginput_container ginput_container_email'> <input autocomplete="nope" name='input_13' id='input_8_13' type='email' value='' class='medium' aria-required="true" aria-invalid="false" /> </div></li><li id="field_8_14" class="gfield field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_8_14' >Company</label><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_14' id='input_8_14' type='text' value='' class='medium' aria-invalid="false" /> </div></li><li id="field_8_16" class="gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_16' id='input_8_16' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_8_19" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_19' id='input_8_19' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_8_20" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_20' id='input_8_20' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_8_21" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_21' id='input_8_21' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_8_22" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_22' id='input_8_22' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_8_23" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_23' id='input_8_23' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_8_24" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_24' id='input_8_24' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_8_18" class="gfield helped-input field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_8_18' >Home Address</label><div class='ginput_container ginput_container_text'><input autocomplete="nope" name='input_18' id='input_8_18' type='text' value='' class='medium' placeholder='Home Address' aria-invalid="false" /> </div></li><li id="field_8_25" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_8_25' >Name</label><div class='ginput_container'><input autocomplete="nope" name='input_25' id='input_8_25' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_8_25'>This field is for validation purposes and should be left unchanged.</div></li></ul></div> <div class='gform_page_footer top_label'><input type='submit' id='gform_previous_button_8' class='gform_previous_button button' value='Back' onclick='if(window["gf_submitting_8"]){return false;} if( !jQuery("#gform_8")[0].checkValidity || jQuery("#gform_8")[0].checkValidity()){window["gf_submitting_8"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_8"]){return false;} if( !jQuery("#gform_8")[0].checkValidity || jQuery("#gform_8")[0].checkValidity()){window["gf_submitting_8"]=true;} jQuery("#gform_8").trigger("submit",[true]); }' /> <input type='submit' id='gform_submit_button_8' class='gform_button button' value='Get a Free Quote' onclick='if(window["gf_submitting_8"]){return false;} if( !jQuery("#gform_8")[0].checkValidity || jQuery("#gform_8")[0].checkValidity()){window["gf_submitting_8"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_8"]){return false;} if( !jQuery("#gform_8")[0].checkValidity || jQuery("#gform_8")[0].checkValidity()){window["gf_submitting_8"]=true;} jQuery("#gform_8").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=8&amp;title=&amp;description=&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_8' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='8' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_8' value='WyJbXSIsIjQwZDExOTMzOTMyMTFlN2IzYzhjNjFjODcwMzRmNThjIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_8' id='gform_target_page_number_8' value='2' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_8' id='gform_source_page_number_8' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </div></div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_8' id='gform_ajax_frame_8' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script type='text/javascript'>gform.initializeOnLoaded( function() {gformInitSpinner( 8, 'https://mvixdigitalsignage.com/wp-content/themes/mvix/assets/dist/img/black-loader.svg' );jQuery('#gform_ajax_frame_8').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_8');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_8').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_8').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_8').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_8').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_8').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_8').val();gformInitSpinner( 8, 'https://mvixdigitalsignage.com/wp-content/themes/mvix/assets/dist/img/black-loader.svg' );jQuery(document).trigger('gform_page_loaded', [8, current_page]);window['gf_submitting_8'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_8').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_8').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [8]);window['gf_submitting_8'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_8').text());}, 50);}else{jQuery('#gform_8').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [8, current_page]);} );} );</script>