Custom School Board Signs

TVDSB hero

Thames Valley District School Board

Interior/Exterior School Board Signage

Project Overview:
INPS continually updates and improves all interior and exterior signage at TVDSB schools. 

Challenge:
TVDSB has multiple sites, with over 25 different contacts and five zones. With orders coming in daily, our customer service representative must ensure an orderly production flow. Each school has different logo colours which need to be matched, and when preparing for installations, asbestos checks are required at each school.

Solution:
TVDSB is one of our Enterprise Resource Planning System customers; as such, we utilize one bill to address the various shipping addresses. When it comes to colour matching, we have the technology to custom colour match any PMS Colour. Our installers ensure safety by completing asbestos checks before each installation.

Project Details: 
Location: London, Ontario

Scope of Project:

  • Project management 
  • Engineering
  • Fabrication
  • Installation
  • Engraved and color-filled signage 
  • Instructional Signs
  • Room Identification
  • School Name Sign
  • Aluminum letters & logos 
  • Engraved plates
  • Parking lot signage
  • Fire route signs
  • Regulatory signage
  • Wayfinding
TVDSB 1
TVDSB 2
TVDSB 3
document.addEventListener("DOMContentLoaded", () => { // Only run on touch-style devices (phones/tablets) const isTouch = window.matchMedia("(hover: none), (pointer: coarse)").matches; if (!isTouch) return; // Optional: narrow scope to your header if you want. // Example: const scope = document.querySelector("header"); const scope = document; // Common WordPress/Elementor submenu patterns const parentSelector = "li.menu-item-has-children > a, li.menu-item-has-children > .elementor-item"; // Close all open submenus inside scope const closeAll = () => { scope.querySelectorAll("li.menu-item-has-children.is-open").forEach((li) => { li.classList.remove("is-open"); const a = li.querySelector(":scope > a, :scope > .elementor-item"); if (a) a.setAttribute("aria-expanded", "false"); }); }; // Click/tap outside closes document.addEventListener("click", (e) => { // If the click is outside the menu area, close if (!e.target.closest(".elementor-nav-menu, .elementor-location-header, header")) { closeAll(); } }); // Make parent items toggle on first tap scope.querySelectorAll(parentSelector).forEach((link) => { link.addEventListener("click", (e) => { const li = e.currentTarget.closest("li.menu-item-has-children"); if (!li) return; const alreadyOpen = li.classList.contains("is-open"); // If submenu isn't open yet: open it and prevent navigation if (!alreadyOpen) { e.preventDefault(); e.stopPropagation(); // Close siblings/other open menus first (keeps things tidy) closeAll(); li.classList.add("is-open"); link.setAttribute("aria-expanded", "true"); return; } // If it's already open, allow the click to navigate normally (2nd tap) // (No preventDefault here) }); }); });