Storefront Signage
Custom storefront sign packages and channel letters for street-facing business visibility.
body .dd-site { max-width: none !important; }
body .entry-content, body .wp-site-blocks, body main { overflow-x: hidden; }
body .entry-content > .dd-site { margin-block-start: 0; }
body #main-footer,
body #footer-bottom,
body #footer-info,
body .et-l–footer,
body .site-footer,
body footer.site-footer,
body .site-info,
body .powered-by-wordpress,
body .wp-block-template-part:has(footer),
body .wp-site-blocks > footer,
body #main-header,
body #top-header,
body .et-l–header,
body .site-header,
body header.site-header {
display: none !important;
}
body.page .entry-title,
body.page h1.entry-title,
body.page .wp-block-post-title,
body.woocommerce-page .woocommerce-products-header,
body.woocommerce-page .page-title,
body.woocommerce-page .woocommerce-breadcrumb,
body.woocommerce-page nav.woocommerce-breadcrumb {
display: none !important;
}
:root {
–dd-paper: #f5f1e8;
–dd-shell: #ffffff;
–dd-ink: #111418;
–dd-soft-ink: #5b6470;
–dd-line: rgba(17, 20, 24, 0.12);
–dd-accent: #d8302f;
–dd-gold: #d2ad58;
–dd-dark: #0e131a;
–dd-green: #157a67;
–dd-wrap: min(1180px, calc(100vw – 32px));
–dd-radius: 8px;
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
margin: 0;
color: var(–dd-ink);
background: var(–dd-paper);
font-family: system-ui, -apple-system, BlinkMacSystemFont, “Segoe UI”, sans-serif;
}
.dd-site {
color: var(–dd-ink);
background: var(–dd-paper);
}
.dd-wrap {
width: var(–dd-wrap);
margin: 0 auto;
}
.dd-topbar {
position: sticky;
top: 0;
z-index: 50;
display: grid;
grid-template-columns: auto 1fr auto;
align-items: center;
gap: 20px;
padding: 18px 0;
background: rgba(245, 241, 232, 0.96);
backdrop-filter: blur(10px);
border-bottom: 1px solid rgba(17, 20, 24, 0.08);
}
.dd-brand img {
display: block;
width: auto;
max-width: 260px;
height: 54px;
object-fit: contain;
}
.dd-topnav,
.dd-topbar-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 18px;
}
.dd-topnav { justify-content: center; }
.dd-topnav a,
.dd-topbar-phone {
color: var(–dd-ink);
text-decoration: none;
font-weight: 800;
}
.dd-topnav a[aria-current=”page”] {
color: var(–dd-accent);
}
.dd-topbar-quote {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 46px;
padding: 0 18px;
border-radius: 999px;
background: var(–dd-accent);
color: #ffffff;
font-weight: 900;
text-decoration: none;
}
.dd-band {
padding: 70px 0;
}
.dd-band-paper {
background: #f9f6ef;
}
.dd-band-dark {
color: #ffffff;
background: linear-gradient(180deg, #10151c 0%, #0b0f15 100%);
}
.dd-grid-2 {
display: grid;
grid-template-columns: minmax(0, 1.08fr) minmax(320px, 0.92fr);
gap: 28px;
align-items: center;
}
.dd-inline-cta {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 24px;
align-items: center;
}
.dd-stack-24 > * + * {
margin-top: 24px;
}
.dd-eyebrow {
margin: 0 0 12px;
color: var(–dd-gold);
font-size: 0.82rem;
font-weight: 900;
letter-spacing: 0.14em;
text-transform: uppercase;
}
.dd-band-dark .dd-eyebrow {
color: #f1c969;
}
h1, h2, h3 {
margin: 0 0 14px;
line-height: 1.03;
letter-spacing: 0;
}
h1 { font-size: clamp(2.6rem, 5vw, 5rem); }
h2 { font-size: clamp(2rem, 3.8vw, 3.2rem); }
h3 { font-size: clamp(1.15rem, 2vw, 1.45rem); }
.dd-lede,
.dd-copy,
.dd-band p,
.dd-band li {
color: var(–dd-soft-ink);
font-size: 1.04rem;
line-height: 1.65;
}
.dd-band-dark .dd-lede,
.dd-band-dark .dd-copy,
.dd-band-dark p,
.dd-band-dark li {
color: rgba(255, 255, 255, 0.84);
}
.dd-cta-row,
.dd-anchor-row {
display: flex;
flex-wrap: wrap;
gap: 14px;
}
.dd-btn,
.dd-anchor-row a {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 50px;
padding: 0 18px;
border-radius: 999px;
border: 1px solid transparent;
font-weight: 900;
text-decoration: none;
}
.dd-btn-primary,
.dd-anchor-row a {
color: #10151c;
background: var(–dd-gold);
}
.dd-btn-outline {
color: var(–dd-ink);
border-color: var(–dd-line);
}
.dd-btn-dark {
color: #ffffff;
background: var(–dd-dark);
}
.dd-btn-whatsapp {
color: #ffffff;
background: var(–dd-green);
}
.dd-photo {
overflow: hidden;
border-radius: var(–dd-radius);
box-shadow: 0 22px 60px rgba(0, 0, 0, 0.18);
}
.dd-photo img {
display: block;
width: 100%;
height: auto;
}
.dd-note-card,
.dd-process-grid article,
.dd-faq-item {
border: 1px solid var(–dd-line);
border-radius: var(–dd-radius);
background: #ffffff;
}
.dd-note-card {
padding: 24px;
}
.dd-process-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 18px;
}
.dd-process-grid article {
padding: 20px;
}
.dd-shop-category-grid {
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
gap: 18px;
}
.dd-shop-category-card {
padding: 20px;
border: 1px solid var(–dd-line);
border-radius: var(–dd-radius);
background: #ffffff;
}
.dd-shop-toolbar {
display: flex;
flex-wrap: wrap;
gap: 16px;
align-items: center;
justify-content: space-between;
margin: 18px 0 8px;
}
.dd-shop-toolbar .woocommerce-result-count,
.dd-shop-toolbar form.woocommerce-ordering {
margin: 0 !important;
}
.dd-process-grid strong {
display: inline-flex;
width: 34px;
height: 34px;
margin-bottom: 14px;
align-items: center;
justify-content: center;
border-radius: 50%;
background: var(–dd-accent);
color: #ffffff;
font-weight: 900;
}
.dd-faq {
display: grid;
gap: 14px;
}
.dd-faq-item {
padding: 22px;
}
.dd-faq-item h3 {
margin-bottom: 10px;
font-size: 1.12rem;
}
.dd-site-footer {
color: #ffffff;
background: #0b0f15;
border-top: 1px solid rgba(255, 255, 255, 0.14);
padding: 30px 0;
}
.dd-site-footer-inner {
display: grid;
grid-template-columns: minmax(0, 1fr) auto;
gap: 18px 28px;
align-items: center;
}
.dd-site-footer strong,
.dd-site-footer span,
.dd-site-footer p,
.dd-site-footer a {
color: #ffffff;
}
.dd-site-footer strong {
display: block;
margin-bottom: 4px;
font-size: 1.05rem;
}
.dd-site-footer span,
.dd-site-footer p {
font-size: 0.94rem;
}
.dd-site-footer nav {
display: flex;
flex-wrap: wrap;
gap: 14px;
justify-content: flex-end;
}
.dd-site-footer a {
font-weight: 800;
text-decoration: none;
}
.dd-site-footer p {
grid-column: 1 / -1;
margin: 0;
}
.dd-social-buttons {
display: flex;
flex-wrap: wrap;
gap: 10px;
align-items: center;
margin-top: 18px;
}
.dd-social-button {
display: inline-flex;
min-height: 42px;
align-items: center;
justify-content: center;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 999px;
padding: 10px 14px;
color: #ffffff;
background: rgba(255, 255, 255, 0.08);
font-size: 0.92rem;
font-weight: 900;
text-decoration: none;
}
.dd-social-footer {
grid-column: 1 / -1;
margin-top: 0;
}
.woocommerce {
width: 100%;
}
.woocommerce ul.products {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 22px;
margin: 26px 0 0 !important;
padding: 0 !important;
list-style: none !important;
}
.woocommerce ul.products::before,
.woocommerce ul.products::after {
display: none !important;
}
.woocommerce ul.products li.product {
width: auto !important;
float: none !important;
margin: 0 !important;
padding: 18px !important;
border: 1px solid var(–dd-line);
border-radius: var(–dd-radius);
background: #ffffff;
box-shadow: 0 12px 30px rgba(16, 21, 28, 0.05);
text-align: left !important;
}
.woocommerce ul.products li.product a {
color: var(–dd-ink);
text-decoration: none;
}
.woocommerce ul.products li.product img {
width: 100% !important;
margin: 0 0 16px !important;
border-radius: 6px;
aspect-ratio: 4 / 3;
object-fit: cover;
background: #f5f1e8;
}
.woocommerce ul.products li.product .woocommerce-loop-product__title {
padding: 0 !important;
font-size: 1.08rem !important;
line-height: 1.28 !important;
}
.woocommerce ul.products li.product .price {
display: block;
margin: 12px 0 !important;
color: var(–dd-accent) !important;
font-size: 1.08rem !important;
font-weight: 900 !important;
}
.woocommerce ul.products li.product .button,
.woocommerce ul.products li.product a.button {
display: inline-flex !important;
min-height: 44px;
align-items: center;
justify-content: center;
padding: 0 16px !important;
border-radius: 999px !important;
border: 0 !important;
color: #ffffff !important;
background: var(–dd-accent) !important;
font-weight: 900 !important;
}
.woocommerce ul.products li.product .added_to_cart {
display: none !important;
}
@media (max-width: 1080px) {
.woocommerce ul.products {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 880px) {
.dd-topbar {
grid-template-columns: 1fr;
justify-items: start;
}
.dd-grid-2,
.dd-inline-cta,
.dd-process-grid,
.dd-shop-category-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 640px) {
.dd-band {
padding: 54px 0;
}
.dd-brand img {
max-width: 220px;
height: 46px;
}
.dd-cta-row .dd-btn,
.dd-anchor-row a {
width: 100%;
}
.woocommerce ul.products {
grid-template-columns: 1fr;
}
.dd-site-footer-inner {
grid-template-columns: 1fr;
}
.dd-site-footer nav {
justify-content: flex-start;
}
}

Denton Design Shop
This is the Denton Design product catalog for businesses that need signs, print pieces, stickers, banners, window graphics, and storefront-ready branding. Every order is reviewed by a real sign team before production.
How this shop works: the prices shown are starting prices in CAD. Click any product to start the order, send artwork, photos, or measurements, and Denton Design will confirm proofing, materials, timing, and final pricing where custom scope is involved.

Clear Product Wording
Each product below uses plain product names, real business use cases, starting prices, and a direct order path. That helps human visitors, Google, ChatGPT, Claude, Gemini, and other answer engines understand the catalog without guessing.
Catalog Sections
This launch version focuses on the products that are easiest for businesses to understand, compare, and order: storefront signs, vehicle graphics, window graphics, banners, displays, print marketing, and branded stickers or labels.
Custom storefront sign packages and channel letters for street-facing business visibility.
Vehicle door graphics, storefront window graphics, decals, and glass branding.
Vinyl banners, retractables, sidewalk signs, and yard signs for events and promotion.
Business cards, flyers, brochures, and postcards that support sales and follow-up.
QR code stickers, packaging labels, and branded adhesive products for conversion and consistency.
Live Catalog
Every product tile below comes from the live WooCommerce catalog, with starting pricing in CAD and a direct Start Order path into the quote flow.
Order Process
Start from the catalog item that is closest to what you need, even if the final scope is custom.
Upload the logo, storefront photo, vehicle photo, measurements, QR link, copy, or reference files.
Denton Design checks production details, wording, finish, material, and visibility before work begins.
Orders move into production, and sign projects are coordinated around the actual site and install conditions.
Shop FAQ
No. The prices shown are starting prices in CAD. Custom signage, installation, shipping, large quantity changes, specialty materials, and production constraints can change the final quote.
Yes. If you only have a rough logo file, photo, or idea, Denton Design can review it first and explain what needs to be rebuilt or cleaned up before production.
Yes. Denton Design serves Toronto and the GTA, including Scarborough, Mississauga, Brampton, Vaughan, Markham, North York, and Etobicoke, depending on the product and installation scope.
Need Something Not Listed?
If you need a larger sign package, a custom shape, rush production, multi-location rollout, or a product variant that is not in the first catalog set, send the project details and Denton Design will build the right order path.
(function () {
“use strict”;
function moveShopLoop() {
var root = document.querySelector(“.dd-shop-page”);
if (!root) return;
var toolbarHost = root.querySelector(“[data-dd-shop-toolbar]”);
var productHost = root.querySelector(“[data-dd-shop-products]”);
if (!toolbarHost || !productHost) return;
var shopRoot = document.querySelector(“.woocommerce”);
if (!shopRoot) return;
var resultCount = shopRoot.querySelector(“.woocommerce-result-count”);
var ordering = shopRoot.querySelector(“form.woocommerce-ordering”);
var products = shopRoot.querySelector(“ul.products”);
var pagination = shopRoot.querySelector(“nav.woocommerce-pagination”);
if (resultCount) toolbarHost.appendChild(resultCount);
if (ordering) toolbarHost.appendChild(ordering);
if (products) productHost.appendChild(products);
if (pagination) productHost.appendChild(pagination);
}
if (document.readyState === “loading”) {
document.addEventListener(“DOMContentLoaded”, moveShopLoop);
} else {
moveShopLoop();
}
})();
.ddsa-inline-root,
.ddsa-inline-root * {
box-sizing: border-box;
}
.ddsa-inline-launch {
position: fixed;
right: 18px;
bottom: 18px;
z-index: 99998;
border: 0;
border-radius: 999px;
padding: 15px 20px;
color: #ffffff;
background: #e32929;
box-shadow: 0 16px 38px rgba(0, 0, 0, 0.28);
font: 800 15px/1.1 system-ui, -apple-system, BlinkMacSystemFont, “Segoe UI”, sans-serif;
cursor: pointer;
}
.ddsa-inline-panel {
position: fixed;
right: 18px;
bottom: 18px;
z-index: 99999;
width: min(390px, calc(100vw – 24px));
height: min(640px, calc(100dvh – 24px));
display: grid;
grid-template-rows: auto 1fr auto auto auto;
overflow: hidden;
border: 1px solid rgba(255, 255, 255, 0.16);
border-radius: 8px;
color: #f8fafc;
background: #11151b;
box-shadow: 0 22px 70px rgba(0, 0, 0, 0.45);
font-family: system-ui, -apple-system, BlinkMacSystemFont, “Segoe UI”, sans-serif;
}
.ddsa-inline-panel[hidden],
.ddsa-inline-launch[hidden] {
display: none;
}
.ddsa-inline-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 14px;
padding: 16px;
background: #171d25;
border-bottom: 1px solid rgba(255, 255, 255, 0.09);
}
.ddsa-inline-header strong,
.ddsa-inline-header span {
display: block;
}
.ddsa-inline-header strong {
font-size: 16px;
}
.ddsa-inline-header span {
margin-top: 3px;
color: #ffffff;
font-size: 13px;
}
.ddsa-inline-close {
width: 34px;
height: 34px;
border: 1px solid rgba(255, 255, 255, 0.14);
border-radius: 50%;
color: #ffffff;
background: transparent;
cursor: pointer;
font-size: 18px;
}
.ddsa-inline-messages {
overflow-y: auto;
padding: 16px;
background: #0d1117;
}
.ddsa-inline-message {
max-width: 86%;
margin: 0 0 10px;
padding: 11px 12px;
border-radius: 8px;
font-size: 14px;
line-height: 1.45;
white-space: pre-wrap;
}
.ddsa-inline-bot {
color: #e5edf8;
background: #1a2230;
border-top-left-radius: 2px;
}
.ddsa-inline-user {
margin-left: auto;
color: #11151b;
background: #f6c944;
border-top-right-radius: 2px;
}
.ddsa-inline-quick {
display: flex;
gap: 8px;
overflow-x: auto;
padding: 10px 12px;
background: #11151b;
border-top: 1px solid rgba(255, 255, 255, 0.08);
}
.ddsa-inline-quick button {
flex: 0 0 auto;
border: 1px solid rgba(255, 255, 255, 0.13);
border-radius: 999px;
padding: 9px 11px;
color: #f8fafc;
background: #202a38;
cursor: pointer;
font-weight: 700;
font-size: 12px;
}
.ddsa-inline-input-row {
display: grid;
grid-template-columns: 1fr auto;
gap: 8px;
padding: 12px;
background: #11151b;
border-top: 1px solid rgba(255, 255, 255, 0.08);
}
.ddsa-inline-input {
min-width: 0;
border: 1px solid rgba(255, 255, 255, 0.13);
border-radius: 6px;
padding: 12px;
color: #ffffff;
background: #0d1117;
font: inherit;
}
.ddsa-inline-input::placeholder {
color: #ffffff;
opacity: 0.72;
}
.ddsa-inline-send,
.ddsa-inline-call,
.ddsa-inline-whatsapp {
border: 0;
border-radius: 6px;
padding: 12px 13px;
font-weight: 900;
cursor: pointer;
text-decoration: none;
text-align: center;
line-height: 1;
}
.ddsa-inline-send {
color: #ffffff;
background: #e32929;
}
.ddsa-inline-contact-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
padding: 0 12px 12px;
background: #11151b;
}
.ddsa-inline-call {
color: #11151b;
background: #f6c944;
}
.ddsa-inline-whatsapp {
color: #ffffff;
background: #1f9d55;
}
@media (max-width: 520px) {
.ddsa-inline-panel {
right: 12px;
bottom: 12px;
width: calc(100vw – 24px);
height: min(620px, calc(100dvh – 24px));
}
.ddsa-inline-contact-row {
grid-template-columns: 1fr;
}
}
(function () {
“use strict”;
var root = document.getElementById(“ddsa-inline-root”);
if (!root || root.dataset.ready === “1”) return;
root.dataset.ready = “1”;
var phoneDisplay = “416-612-9606”;
var phoneDigits = “14166129606”;
var email = “Dentondesign.ca@gmail.com”;
var state = { flow: “”, step: 0, data: {} };
var answers = [
{ keys: [“best sign”, “which sign”, “what sign”, “recommend a sign”, “right sign”], text: “The best sign depends on where customers see it. For a plaza storefront, illuminated channel letters or a sign cabinet usually give the strongest street visibility. For glass, use window graphics. For vehicles, use commercial vehicle graphics. For an interior reception wall, use dimensional letters or a wall logo. Send a location photo and Denton Design can recommend the best fit.” },
{ keys: [“channel letter”, “channel letters”, “front lit”, “back lit”, “halo lit”], text: “Channel letters are individual dimensional letters, usually illuminated with LEDs. Front-lit letters are bright and direct. Halo-lit letters create a glow behind the letters for a more premium look. They work well for restaurants, retail, clinics, gyms, and plaza storefronts.” },
{ keys: [“lightbox”, “light box”, “sign cabinet”, “cabinet sign”, “box sign”], text: “A lightbox or sign cabinet has an illuminated face inside a framed cabinet. It is often a practical choice when a storefront already has a cabinet or when the design needs a large bright sign face.” },
{ keys: [“storefront”, “fascia”, “building sign”, “plaza sign”], text: “Storefront signs should be readable from the customer approach, fit the building and plaza rules, and make the business clear in a few seconds. Common options include channel letters, illuminated cabinets, dimensional letters, fascia signs, and window graphics.” },
{ keys: [“pylon”, “pole sign”, “road sign”, “roadside”], text: “Pylon and pole signs are designed for visibility from the road and often identify several plaza tenants. Updates may involve tenant panels, vinyl, lighting, faces, or structural work. A site photo and approximate panel size are the best starting points.” },
{ keys: [“dimensional”, “raised letter”, “raised logo”, “reception”, “interior sign”, “wall sign”], text: “Dimensional letters and logos create a clean raised look for reception walls, offices, retail interiors, and non-illuminated storefronts. Acrylic, PVC, aluminum, and layered materials can create different depths and finishes.” },
{ keys: [“vehicle”, “truck”, “van”, “fleet”, “car graphic”, “vehicle graphic”], text: “Vehicle graphics turn vans, trucks, trailers, and fleets into moving advertising. Denton Design can help with full graphics, partial graphics, lettering, logos, phone numbers, service lists, and fleet consistency.” },
{ keys: [“window”, “glass”, “privacy”, “perforated”, “frosted”, “window graphic”], text: “Window graphics can add branding, promotions, hours, privacy, or full-glass visual impact. Perforated film can show graphics outside while preserving some view from inside. Frosted film gives privacy with a cleaner professional look.” },
{ keys: [“banner”, “temporary sign”, “yard sign”, “lawn sign”, “coroplast”], text: “Temporary signs such as banners and coroplast signs work well for openings, events, promotions, construction, and short campaigns. The right material depends on duration, wind exposure, mounting, and viewing distance.” },
{ keys: [“material”, “acrylic”, “aluminum”, “acm”, “dibond”, “pvc”, “coroplast”], text: “Common sign materials include acrylic for polished faces and letters, aluminum composite for durable flat panels, aluminum for long-term exterior use, PVC for dimensional indoor or sheltered signs, and coroplast for temporary signs. The location, size, finish, and expected lifespan determine the best material.” },
{ keys: [“led”, “lighting”, “illuminated”, “light up”, “night”], text: “LED lighting makes signs visible after dark and is commonly used in channel letters and sign cabinets. The right setup depends on the sign face, depth, power access, brightness, service access, and local rules.” },
{ keys: [“repair”, “fix”, “broken”, “faded”, “not lighting”, “not lit”], text: “Sign repair can include panel replacement, LED or power-supply service, lightbox repair, vinyl refresh, damaged letter repair, cleaning, and updates to faded or outdated signs. Send close-up and full-building photos so the likely repair path can be assessed.” },
{ keys: [“install”, “installation”, “mount”, “mounted”, “remove sign”, “removal”], text: “Professional installation considers wall type, sign weight, electrical access, mounting hardware, lift access, weather sealing, placement, and visibility. Photos of the full building and install area help determine access and equipment needs.” },
{ keys: [“permit”, “landlord”, “approval”, “city rule”, “sign bylaw”], text: “Some signs require landlord approval, plaza criteria, electrical approval, or a municipal sign permit. Requirements depend on the address, sign type, size, lighting, and installation method. Send the address and storefront photo so the requirements can be checked.” },
{ keys: [“artwork”, “design”, “logo”, “file”, “vector”, “brand”], text: “Vector artwork such as AI, EPS, SVG, or a print-ready PDF usually gives the cleanest production result. If you only have a low-resolution logo, Denton Design can review it and explain what needs to be rebuilt before production.” },
{ keys: [“measure”, “measurement”, “size”, “site survey”, “survey”], text: “Useful measurements include the available sign area, overall width and height, letter height, window dimensions, or vehicle panel size. Photos with a visible reference point help, but final production measurements may require a site survey.” },
{ keys: [“price”, “cost”, “quote”, “estimate”, “how much”, “budget”], text: “Sign pricing depends on size, material, lighting, artwork, quantity, permits, installation access, electrical work, and deadline. For an accurate quote, send photos, location, rough measurements, sign type, and timing.” },
{ keys: [“time”, “turnaround”, “how long”, “deadline”, “opening date”, “rush”], text: “Turnaround depends on artwork approval, sign type, material availability, permits, landlord approval, fabrication, and installation access. Share your opening date or deadline early so Denton Design can explain the realistic path.” },
{ keys: [“maintenance”, “clean”, “warranty”, “last”, “lifespan”], text: “Sign lifespan depends on material, sun exposure, weather, electrical components, installation, and maintenance. Regular cleaning and early repair of loose, cracked, faded, or unlit parts help protect the sign and the business image.” },
{ keys: [“marketing”, “visibility”, “seen”, “notice”, “readable”], text: “A sign works as marketing when it is readable quickly, visible from the customer approach, consistent with the brand, and clear about what the business does. Denton Design can review the storefront, website, and social proof together to identify visibility gaps.” },
{ keys: [“service area”, “where do you work”, “toronto”, “mississauga”, “brampton”, “scarborough”, “vaughan”, “markham”], text: “Denton Design serves businesses across Toronto and the GTA, including Scarborough, Mississauga, Brampton, Vaughan, Markham, North York, Etobicoke, and surrounding areas. Send the project address to confirm service and installation details.” }
];
root.innerHTML = [
‘‘,
‘
‘,
‘
‘,
‘
‘,
‘
‘,
‘
‘,
‘
‘
].join(“”);
var launch = root.querySelector(“.ddsa-inline-launch”);
var panel = root.querySelector(“.ddsa-inline-panel”);
var close = root.querySelector(“.ddsa-inline-close”);
var messages = root.querySelector(“.ddsa-inline-messages”);
var quick = root.querySelector(“.ddsa-inline-quick”);
var form = root.querySelector(“.ddsa-inline-input-row”);
var input = root.querySelector(“.ddsa-inline-input”);
launch.addEventListener(“click”, function () {
panel.hidden = false;
launch.hidden = true;
if (!messages.children.length) {
bot(“Hi. Ask me a sign question, get help choosing a sign, or start a quote with Denton Design.”);
mainChoices();
}
setTimeout(function () { input.focus(); }, 60);
});
close.addEventListener(“click”, function () {
panel.hidden = true;
launch.hidden = false;
});
form.addEventListener(“submit”, function (event) {
event.preventDefault();
var value = input.value.trim();
if (!value) return;
input.value = “”;
add(value, “user”);
handle(value);
});
function mainChoices() {
choices([
[“Ask Sign Question”, showQuestionTopics],
[“Choose A Sign”, function () { handleQuestion(“What sign is best for my business?”); }],
[“Get a Quote”, function () { start(“quote”); }],
[“Book A Call”, function () { start(“appointment”); }],
[“Call Now”, function () { window.location.href = “tel:” + phoneDigits; }]
]);
}
function showQuestionTopics() {
bot(“Type any sign question, or choose a topic below.”);
choices([
[“Best Sign Type”, function () { handleQuestion(“What sign is best for my business?”); }],
[“Pricing”, function () { handleQuestion(“How much does a sign cost?”); }],
[“Permits”, function () { handleQuestion(“Do I need a sign permit?”); }],
[“Materials”, function () { handleQuestion(“What sign material should I use?”); }],
[“Lighting”, function () { handleQuestion(“What illuminated sign options are available?”); }],
[“Repairs”, function () { handleQuestion(“Can you repair my sign?”); }],
[“Vehicle Graphics”, function () { handleQuestion(“Tell me about vehicle graphics.”); }],
[“Window Graphics”, function () { handleQuestion(“Tell me about window graphics.”); }]
]);
}
function start(type) {
state = { flow: type, step: 0, data: { type: type === “appointment” ? “Appointment Request” : “Quote Request” } };
bot(type === “appointment” ? “Let’s request an appointment. What service do you need?” : “Let’s start a quote. What kind of sign do you need?”);
choices([“Storefront Signs”, “Channel Letters”, “Vehicle Graphics”, “Window Graphics”, “Sign Installation”, “Sign Repair”, “Not Sure Yet”].map(function (service) {
return [service, function () { collect(service); }];
}));
}
function collect(value) {
var quoteSteps = [
[“service”, “Got it. What is your name?”],
[“name”, “What phone number should Denton Design call or text?”],
[“phone”, “What email should we use? You can type skip.”],
[“email”, “What business name is this for? You can type skip.”],
[“business”, “What city or area is the job in?”],
[“city”, “Tell us what you need. Include size, location, deadline, or what problem the sign needs to solve.”],
[“message”, “Thanks. I can open an email or WhatsApp message with these details.”]
];
var appointmentSteps = [
[“service”, “Good. What is your name?”],
[“name”, “What phone number should Denton Design call or text?”],
[“phone”, “What email should we use? You can type skip.”],
[“email”, “What business name is this for? You can type skip.”],
[“business”, “What city or area are you in?”],
[“city”, “What date works best for an appointment or call?”],
[“appointment_date”, “What time of day works best?”],
[“appointment_time”, “Add a short note about the project.”],
[“message”, “Thanks. I can open an email or WhatsApp message with these details.”]
];
var steps = state.flow === “appointment” ? appointmentSteps : quoteSteps;
var current = steps[state.step];
state.data[current[0]] = value.toLowerCase() === “skip” ? “” : value;
state.step += 1;
bot(current[1]);
if (state.step >= steps.length) {
confirmRequest();
} else {
quick.innerHTML = “”;
}
}
function confirmRequest() {
choices([
[“Open Email”, openEmail],
[“WhatsApp Photos”, openWhatsapp],
[“Call Instead”, function () { window.location.href = “tel:” + phoneDigits; }]
]);
}
function openEmail() {
var subject = encodeURIComponent(“Denton Design ” + (state.data.type || “Quote Request”));
var body = encodeURIComponent(summary());
window.location.href = “mailto:” + email + “?subject=” + subject + “&body=” + body;
bot(“I opened an email with the request details. You can also call or WhatsApp ” + phoneDisplay + “.”);
mainChoices();
}
function openWhatsapp() {
window.open(whatsapp(summary()), “_blank”, “noopener”);
bot(“I opened WhatsApp with the request details. Add photos if you have them.”);
mainChoices();
}
function handle(value) {
if (state.flow) {
collect(value);
return;
}
handleQuestion(value);
}
function handleQuestion(value) {
var lower = value.toLowerCase();
var ranked = answers.map(function (answer, index) {
var score = answer.keys.reduce(function (total, key) {
return total + (lower.indexOf(key) !== -1 ? Math.max(1, key.split(” “).length) : 0);
}, 0);
return { answer: answer, score: score, index: index };
}).filter(function (item) {
return item.score > 0;
}).sort(function (a, b) {
return b.score – a.score || a.index – b.index;
});
if (ranked.length) {
bot(ranked[0].answer.text);
} else {
bot(“I can answer questions about storefront signs, channel letters, lightboxes, materials, lighting, vehicle graphics, window graphics, installation, repairs, permits, artwork, pricing factors, and turnaround. Try including the sign type, location, or problem you need solved.”);
}
choices([
[“Ask Another Question”, showQuestionTopics],
[“Start Quote”, function () { start(“quote”); }],
[“WhatsApp Photos”, function () { window.open(whatsapp(“I have sign photos and need advice.”), “_blank”, “noopener”); }],
[“Call Denton Design”, function () { window.location.href = “tel:” + phoneDigits; }]
]);
}
function summary() {
return [
“Lead type: ” + (state.data.type || “Quote Request”),
“Service: ” + (state.data.service || “Not sure yet”),
“Name: ” + (state.data.name || “”),
“Phone: ” + (state.data.phone || “”),
“Email: ” + (state.data.email || “”),
“Business: ” + (state.data.business || “”),
“City / Area: ” + (state.data.city || “”),
“Preferred date: ” + (state.data.appointment_date || “”),
“Preferred time: ” + (state.data.appointment_time || “”),
“”,
“Project details:”,
state.data.message || “”
].join(“\n”);
}
function choices(items) {
quick.innerHTML = “”;
items.forEach(function (item) {
var button = document.createElement(“button”);
button.type = “button”;
button.textContent = item[0];
button.addEventListener(“click”, item[1]);
quick.appendChild(button);
});
}
function bot(text) {
add(text, “bot”);
}
function add(text, who) {
var node = document.createElement(“div”);
node.className = “ddsa-inline-message ddsa-inline-” + who;
node.textContent = text;
messages.appendChild(node);
messages.scrollTop = messages.scrollHeight;
}
function whatsapp(text) {
return “https://wa.me/” + phoneDigits + “?text=” + encodeURIComponent(text);
}
})();
Showing 1–9 of 14 results