88febc2e88
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
513 lines
36 KiB
HTML
513 lines
36 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en-CA">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Shop Wisdom | Keep What Your Best People Know — for Canadian Manufacturers</title>
|
|
<meta name="description" content="Your best people are retiring. I help Canadian manufacturers capture the know-how that lives in a few heads, build it into systems the whole shop can run on, and stay on to keep it that way. You own everything — and it stays in Canada.">
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Lora:ital,wght@0,400;0,500;1,400&family=Playfair+Display:ital,wght@0,400;0,700;1,400&display=swap">
|
|
<link rel="stylesheet" href="style.css">
|
|
<meta name="robots" content="index,follow">
|
|
<meta name="theme-color" content="#f7f4ef">
|
|
<link rel="canonical" href="https://shopwisdom.ca/">
|
|
<link rel="icon" href="favicon.svg" type="image/svg+xml">
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:site_name" content="Shop Wisdom">
|
|
<meta property="og:title" content="Shop Wisdom — keep what your best people know">
|
|
<meta property="og:description" content="Your best people are retiring. I help Canadian manufacturers capture the know-how that lives in a few heads and build it into systems the whole shop can run on — before it walks out the door.">
|
|
<meta property="og:url" content="https://shopwisdom.ca/">
|
|
<meta property="og:locale" content="en_CA">
|
|
<meta property="og:image" content="https://shopwisdom.ca/og-card.png">
|
|
<meta property="og:image:width" content="1200">
|
|
<meta property="og:image:height" content="630">
|
|
<meta property="og:image:alt" content="Shop Wisdom — your best people are retiring. Their know-how doesn't have to.">
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:title" content="Shop Wisdom — keep what your best people know">
|
|
<meta name="twitter:description" content="Knowledge continuity for Canadian manufacturers — before it walks out the door.">
|
|
<meta name="twitter:image" content="https://shopwisdom.ca/og-card.png">
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "ProfessionalService",
|
|
"name": "Shop Wisdom",
|
|
"url": "https://shopwisdom.ca/",
|
|
"logo": "https://shopwisdom.ca/favicon.svg",
|
|
"description": "Knowledge continuity for Canadian manufacturers — capturing veteran know-how and turning it into systems the whole shop can run on, before it walks out the door.",
|
|
"areaServed": { "@type": "Country", "name": "Canada" },
|
|
"founder": { "@type": "Person", "name": "Michael Victory" },
|
|
"telephone": "+1-778-985-6736",
|
|
"email": "michael@opencommunications.consulting",
|
|
"address": { "@type": "PostalAddress", "addressRegion": "British Columbia", "addressCountry": "CA" },
|
|
"sameAs": ["https://www.opencommunications.consulting/"],
|
|
"knowsAbout": ["knowledge capture", "succession planning", "business continuity", "standard operating procedures", "manufacturing", "AI tools for business"]
|
|
}
|
|
</script>
|
|
<script>document.documentElement.className += ' has-motion';</script>
|
|
</head>
|
|
<body>
|
|
|
|
<header class="nav" id="nav">
|
|
<a class="nav-logo" href="#top" aria-label="Shop Wisdom — home">
|
|
<img class="nav-logo-img nav-logo-light" src="assets/logo/logo-horizontal.svg" alt="Shop Wisdom" width="214" height="36" />
|
|
<img class="nav-logo-img nav-logo-dark" src="assets/logo/logo-horizontal-rev.svg" alt="" aria-hidden="true" width="214" height="36" />
|
|
</a>
|
|
<nav class="nav-links-desktop" aria-label="Main">
|
|
<a href="#work">The work</a>
|
|
<a href="#results">Client results</a>
|
|
<a href="#process">How it works</a>
|
|
<a href="#about">About</a>
|
|
<a class="tel nav-phone" data-p1="778" data-p2="985" data-p3="6736" href="#contact" aria-label="Call Shop Wisdom">778‑985‑OPEN</a>
|
|
<a class="nav-cta" href="https://cal.shopwisdom.ca/michaelvictory/20-min-shop-wise-meeting" data-cal-link="michaelvictory/20-min-shop-wise-meeting" data-cal-origin="https://cal.shopwisdom.ca" data-cal-config='{"theme":"light"}'>Book a call</a>
|
|
</nav>
|
|
<button class="nav-toggle" id="navToggle" aria-label="Open menu" aria-expanded="false">
|
|
<svg class="nav-toggle-icon" viewBox="0 0 32 32" aria-hidden="true">
|
|
<line class="bar bar-top" x1="6" y1="10" x2="26" y2="10"/>
|
|
<line class="bar bar-mid" x1="6" y1="16" x2="26" y2="16"/>
|
|
<line class="bar bar-bot" x1="6" y1="22" x2="26" y2="22"/>
|
|
<circle class="o-ring" cx="16" cy="16" r="9"/>
|
|
</svg>
|
|
</button>
|
|
</header>
|
|
<div class="nav-mobile-menu" id="navMobileMenu">
|
|
<a href="#work">The work</a>
|
|
<a href="#results">Client results</a>
|
|
<a href="#process">How it works</a>
|
|
<a href="#about">About</a>
|
|
<a class="tel" data-p1="778" data-p2="985" data-p3="6736" href="#contact">Call 778‑985‑OPEN (6736)</a>
|
|
<a class="nav-cta" href="https://cal.shopwisdom.ca/michaelvictory/20-min-shop-wise-meeting" data-cal-link="michaelvictory/20-min-shop-wise-meeting" data-cal-origin="https://cal.shopwisdom.ca" data-cal-config='{"theme":"light"}'>Book a call</a>
|
|
</div>
|
|
|
|
<main id="top">
|
|
|
|
<section class="hero band light" data-bg="light">
|
|
<div class="wrap hero-wrap"><div class="hero-col">
|
|
<p class="eyebrow">Knowledge continuity · for Canadian manufacturers</p>
|
|
<h1>Your best people are retiring. Their know‑how doesn't <em>have to.</em></h1>
|
|
<p class="lead">I don't just install AI. Before your best people walk out the door, I turn the pricing instincts, the fixes, the hard‑won judgment in their heads into systems your whole shop can run on — and I stay on to keep it that way.</p>
|
|
<div class="actions">
|
|
<a class="btn" href="https://cal.shopwisdom.ca/michaelvictory/20-min-shop-wise-meeting" data-cal-link="michaelvictory/20-min-shop-wise-meeting" data-cal-origin="https://cal.shopwisdom.ca" data-cal-config='{"theme":"light"}'>Book a fit call — free, no pitch</a>
|
|
<a class="btn link" href="#results">See client results</a>
|
|
</div>
|
|
<p class="call">or call <a class="tel" data-p1="778" data-p2="985" data-p3="6736" href="#contact">778‑985‑OPEN (6736)</a></p>
|
|
</div></div>
|
|
</section>
|
|
|
|
<section class="band dark statement" data-bg="dark" id="moment">
|
|
<div class="motif" aria-hidden="true"></div>
|
|
<div class="wrap narrow reveal">
|
|
<p class="eyebrow">The moment your shop is in</p>
|
|
<h2 class="statement-line">The real work runs on what lives in two or three people's heads. And those heads are <em>heading for the door.</em></h2>
|
|
<p>The veteran who knows how a quote really comes together, which customer needs what, the pricing call nobody else can make — it's never been written down. Here's the part nobody likes to say out loud: a business that lives in a few people's heads is worth less the day you go to sell it. Buyers see the risk even when you don't. So do your best customers — the first time a job goes sideways after someone walks out the door.</p>
|
|
<p class="emph">This isn't a technology problem. It's a continuity problem — and it's fixable.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light" data-bg="light">
|
|
<div class="wrap reveal">
|
|
<p class="eyebrow">How I work</p>
|
|
<h2>I work differently — <em>on purpose.</em></h2>
|
|
<p class="section-intro">The default — automation to cut headcount, AI as a sales pitch, delivered through tools you'll never own — leaves owners anxious and good people sidelined. That's not this.</p>
|
|
<div class="cards four stagger">
|
|
<div class="card">
|
|
<h3>People stay essential</h3>
|
|
<p>Used well, modern tools make your people more capable, not less needed. I design systems that respect the judgment your team has earned.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>Wisdom over speed</h3>
|
|
<p>Wisdom is a slower technology than intelligence. I work at the pace good work needs, not the pace the hype cycle demands.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>You own everything</h3>
|
|
<p>Every system I build is yours — hosted on Canadian soil, fully documented. Your data never leaves the country, and nothing locks you in.</p>
|
|
</div>
|
|
<div class="card">
|
|
<h3>One person, accountable</h3>
|
|
<p>The person you talk to is the person doing the work. No account managers, no pipelines, no chatbots between you and the help.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light" data-bg="light" id="work">
|
|
<div class="wrap reveal">
|
|
<p class="eyebrow">The work</p>
|
|
<h2>Keep what they know. <em>Then</em> build it into the shop.</h2>
|
|
<p class="section-intro">Three steps: find out where you're exposed, fix it, and keep it handled. Every engagement starts by understanding your actual problem before I suggest a thing.</p>
|
|
<div class="cards stagger">
|
|
<div class="card">
|
|
<span class="step-k">Start here · Diagnose</span>
|
|
<h3>The Continuity Audit</h3>
|
|
<p>I spend a few focused hours with your team — the people who run the quotes, pricing, and orders — and find exactly where you're exposed: who holds what, what it would cost you if they left tomorrow, and what it's doing to the value of your business. You get a plain‑English risk report and a roadmap. Fixed fee. Nothing to install.</p>
|
|
<p class="outcome">You walk away knowing where your shop is exposed — and what to do about it.</p>
|
|
<a class="card-link" href="continuity-audit.html">How the audit works →</a>
|
|
</div>
|
|
<div class="card">
|
|
<span class="step-k">Fix · Capture & build</span>
|
|
<h3>Capture it — and make it usable</h3>
|
|
<p>I sit down with your best people, draw out what's in their heads, and build it into systems the whole crew can actually use — documented, trained, and built to last. You don't need to clean up thirty years of spreadsheets first: that mess <strong>is</strong> the knowledge, and waiting for perfect data is how it gets lost. The modern tools do the heavy lifting so it's fast and affordable; the part that matters is human — getting your veteran to open up, and capturing the judgment, not just the steps.</p>
|
|
<p class="outcome">The day your best person retires, the work doesn't stop.</p>
|
|
</div>
|
|
<div class="card feature">
|
|
<span class="step-k">Keep it handled · Recurring</span>
|
|
<span class="card-tag">System Care</span>
|
|
<h3>Your tools, kept running — on Canadian soil</h3>
|
|
<p>Everything I build lives in your own space on my Canadian sovereign server — hosting, infrastructure, and running costs handled. From there I keep it healthy with regular check‑ups — quarterly, monthly, or weekly, depending on how hard you lean on it — and flag the new tech worth folding in, so it never quietly falls behind. When a key person heads for the door, I help capture the next one too. You own everything; walk away anytime and it all comes with you.</p>
|
|
<p class="outcome">The system stays alive, current, and improving — never frozen the day I leave.</p>
|
|
</div>
|
|
</div>
|
|
<p class="reassure">Everything I build comes with full documentation and a handover session. You'll never be dependent on me to keep it running.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light" data-bg="light" id="results">
|
|
<div class="wrap reveal">
|
|
<p class="eyebrow">Client results</p>
|
|
<h2>What "build it into a system" <em>actually</em> looks like.</h2>
|
|
<p class="section-intro">Real projects for real Canadian shops — the before and after of taking knowledge that lived in a spreadsheet (and one person's head) and turning it into a tool the whole team can use.</p>
|
|
<div class="cases">
|
|
|
|
<div class="case">
|
|
<h3>Dealer pricing: from emailed workbook to live catalog</h3>
|
|
<p><strong>Before —</strong> dealer pricing lived in a multi‑tab Excel workbook emailed to resellers on request. Dealers calculated their own pricing by hand, and any discount change meant redistributing the file. Staff spent real time fielding calls from dealers who couldn't find what they needed.</p>
|
|
<p><strong>After —</strong> a hosted dealer pricing tool with real‑time discount logic, profile‑based pricing tiers, product filtering, and a built‑in order builder with export and email summary. Dealers access it directly — no file to download, no call required.</p>
|
|
<div class="case-shots">
|
|
<figure class="case-shot">
|
|
<figcaption class="case-shot-label">Before — Excel workbook</figcaption>
|
|
<div class="case-shot-frame"><img src="assets/work/ias-before.png" alt="Dealer pricing before: a multi-tab Excel workbook with manual price columns" width="1735" height="808" loading="lazy" decoding="async"></div>
|
|
</figure>
|
|
<figure class="case-shot">
|
|
<figcaption class="case-shot-label">After — Hosted web app</figcaption>
|
|
<div class="case-shot-frame"><img src="assets/work/ias-after.png" alt="Dealer pricing after: a filterable product catalog with live discount logic and order export" width="1919" height="953" loading="lazy" decoding="async"></div>
|
|
</figure>
|
|
</div>
|
|
<blockquote>
|
|
<p>"We've been imagining something like this for years. Our catalog used to live in a spreadsheet we'd email back and forth — now our dealers can filter products, build orders in their own pricing, and send them through electronically. Mike built exactly what we needed."</p>
|
|
<footer class="case-cite">
|
|
<span class="case-headshot"><img src="assets/people/fred-hobeyn.webp" alt="Fred Hobeyn" width="160" height="160" loading="lazy" decoding="async"></span>
|
|
<span class="case-cite-text"><span class="case-name">Fred Hobeyn</span><span class="case-role">Owner — Innovative Aluminum Systems</span></span>
|
|
</footer>
|
|
</blockquote>
|
|
</div>
|
|
|
|
<div class="case">
|
|
<h3>Order forms: from printed sheet to guided system</h3>
|
|
<p><strong>Before —</strong> the customer order form was a printed Excel sheet with basic formulas. Sales reps filled it in by hand, calculated totals manually, and emailed or faxed it in. Error‑prone, slow, and entirely dependent on one person knowing where everything was.</p>
|
|
<p><strong>After —</strong> a hosted web order form with multiple pricing tiers, a pattern selector with live unit pricing, cut‑length calculators, and a print‑ready summary. Orders are submitted electronically — no phone call, no fax, no manual calculation.</p>
|
|
<div class="case-shots">
|
|
<figure class="case-shot">
|
|
<figcaption class="case-shot-label">Before — Printed Excel sheet</figcaption>
|
|
<div class="case-shot-frame"><img src="assets/work/ondek-before.png" alt="Order form before: a printed Excel sheet with manual product and quantity columns" width="895" height="715" loading="lazy" decoding="async"></div>
|
|
</figure>
|
|
<figure class="case-shot">
|
|
<figcaption class="case-shot-label">After — Web order form</figcaption>
|
|
<div class="case-shot-frame"><img src="assets/work/ondek-after.png" alt="Order form after: a web-based order form with price tiers, pattern selector, and live totals" width="1546" height="806" loading="lazy" decoding="async"></div>
|
|
</figure>
|
|
</div>
|
|
<blockquote>
|
|
<p>"I've been in this industry long enough to be skeptical of tech promises. This wasn't that. Michael took the time to understand our process first, then built something that fits. It's a massive leap forward for us."</p>
|
|
<footer class="case-cite">
|
|
<span class="case-headshot"><img src="assets/people/jim-szlabon.webp" alt="Jim Szlabon" width="160" height="160" loading="lazy" decoding="async"></span>
|
|
<span class="case-cite-text"><span class="case-name">Jim Szlabon</span><span class="case-role">Senior Sales — OnDek Vinyl Worx</span></span>
|
|
</footer>
|
|
</blockquote>
|
|
</div>
|
|
|
|
</div>
|
|
<p class="reassure">Have a spreadsheet or a process that should work this way? <a class="card-link" href="#contact">Start with a conversation.</a></p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light" data-bg="light">
|
|
<div class="wrap narrow reveal">
|
|
<p class="eyebrow">The honest part</p>
|
|
<h2>The hard part isn't the paperwork. <em>It's people.</em></h2>
|
|
<p>Most attempts at this quietly stall — MIT's 2025 "State of AI in Business" study found 95% of company AI projects deliver no measurable return, and the tools usually aren't the problem. Most shops have already learned it the hard way: there's a binder somewhere — half‑finished, on a shelf, out of date the week it was printed. It didn't fail because the writing was bad. It failed because getting a veteran to hand over what he knows, and getting a shop to actually change how it works, is a people problem, not a paperwork one. Your best people aren't holding back to be difficult — they're protecting the thing that's made them irreplaceable for thirty years.</p>
|
|
<div class="handoff">
|
|
<p>That human side is exactly what my other practice, <a href="https://www.opencommunications.consulting/">Open Communications →</a>, is built for. Same business, same straight talk — one side works on the shop, the other works with the crew.</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band alt" data-bg="light" id="process">
|
|
<div class="wrap narrow reveal">
|
|
<p class="eyebrow">How it works</p>
|
|
<h2>Every step explained. <em>Every decision yours.</em></h2>
|
|
<p class="section-intro">No black boxes, no surprises — a transparent path from the first call to the final handoff.</p>
|
|
<ol class="steps">
|
|
<li>
|
|
<h3>A free fit call</h3>
|
|
<p>A short conversation to see if there's a match. You describe what's slowing you down; I give you an honest read on whether I can help. No pitch, no obligation. If it's not a fit, I'll tell you and point you somewhere that is.</p>
|
|
</li>
|
|
<li>
|
|
<h3>A paid discovery session</h3>
|
|
<p>If there's a fit, a focused 90‑minute working meeting where we map the real problem, decide what's worth solving first, and outline what a solution looks like. You leave with a written recommendation — whether or not we work together further.</p>
|
|
</li>
|
|
<li>
|
|
<h3>A fixed‑scope proposal</h3>
|
|
<p>You know exactly what gets built, what it costs, and what you own at the end — before any work begins. Written in plain language, not jargon. Scope changes are a conversation, not a surprise invoice.</p>
|
|
</li>
|
|
<li>
|
|
<h3>A deliverable you own</h3>
|
|
<p>The work moves in short cycles with regular review. At the end it's hosted, documented, and yours — update it, share it, use it without ever calling me again. Unless you want to: ongoing support is available, never required.</p>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light" data-bg="light" id="about">
|
|
<div class="wrap narrow reveal">
|
|
<p class="eyebrow">About</p>
|
|
<h2>The person you'll <em>actually</em> be working with.</h2>
|
|
<p class="about-name">Michael Victory — ShopWisdom</p>
|
|
<p>I've spent 25 years inside small and mid‑sized businesses — including 13 building long‑term partnerships across a dealer network, and the last several years helping non‑technical people use modern tools well. I know what it looks like when good people are slowed down by tools that were never built for how they work — and what it costs a shop when the person who knew how everything ran finally retires.</p>
|
|
<p>I started this practice because I kept seeing the same gap: the distance between what a business actually needs and what technology vendors were willing to build honestly and affordably. Most consultants either over‑engineer the solution or under‑explain the cost. I've been on the receiving end of both.</p>
|
|
<p>I use modern tools — including AI — to build faster and cheaper than traditional development, and I'll always tell you how something was built and what it can't do. No mystification, no inflated promises. And I'll tell you if you don't need me. That conversation costs nothing and saves everyone time.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="band light" data-bg="light" id="fit">
|
|
<div class="wrap narrow reveal">
|
|
<p class="eyebrow">Honest about fit</p>
|
|
<h2>I'm <em>not</em> for everyone.</h2>
|
|
<p class="section-intro">ShopWisdom is probably not the right fit if you're:</p>
|
|
<ul class="notfor">
|
|
<li><strong>Looking to cut headcount through automation.</strong> AI used to make people redundant isn't what I do.</li>
|
|
<li><strong>Shopping for a black box to rent forever.</strong> You own everything I build — hosted in your own space on Canadian soil, yours to take anytime. I'll keep it running and current if you want that (it's called System Care), but it's a choice, never a leash. I don't do lock‑in.</li>
|
|
<li><strong>Shopping for a Super Bowl AI strategy.</strong> No hype, no transformation slides, no buzzwords. Just specific work with measurable outcomes.</li>
|
|
<li><strong>Facing people problems that run deeper than systems.</strong> Tools amplify what's already there. If trust is missing, software won't fix it — though that's exactly what my other practice, <a href="https://www.opencommunications.consulting/">Open Communications</a>, takes on.</li>
|
|
</ul>
|
|
<p>If any of that is you, we're probably not a fit — and being honest now saves us both time.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<div class="o-divider" aria-hidden="true">
|
|
<img class="owl-divider-img" src="assets/logo/owl-mark.svg" alt="" width="52" height="54" />
|
|
</div>
|
|
|
|
<section class="band light contact" data-bg="light" id="contact">
|
|
<div class="wrap narrow reveal">
|
|
<p class="eyebrow">Start a conversation</p>
|
|
<h2>Your know‑how built this shop. Let's make sure it <em>stays</em> in it.</h2>
|
|
<p>No pitch, no proposal until we've had a real conversation. Describe the friction — even roughly. The more context you share, the more useful our first call will be.</p>
|
|
|
|
<form class="lf" data-endpoint="https://n8n.shopwisdom.ca/webhook/lead" data-source="shopwisdom" novalidate>
|
|
<div class="lf-progress" aria-hidden="true"><span class="lf-dot is-active"></span><span class="lf-dot"></span><span class="lf-dot"></span></div>
|
|
<fieldset class="lf-step is-active" data-step="1">
|
|
<legend class="lf-q">What's the situation in your shop?</legend>
|
|
<div class="lf-choices">
|
|
<label class="lf-choice"><input type="radio" name="topic" value="A key person is retiring soon" required> A key person is retiring soon</label>
|
|
<label class="lf-choice"><input type="radio" name="topic" value="Know-how lives in a few heads"> Know-how lives in just a few heads</label>
|
|
<label class="lf-choice"><input type="radio" name="topic" value="A process or tool needs building"> A process or tool needs building</label>
|
|
<label class="lf-choice"><input type="radio" name="topic" value="Just exploring"> Just exploring for now</label>
|
|
</div>
|
|
<div class="lf-nav"><button type="button" class="btn lf-next" data-next>Continue →</button></div>
|
|
</fieldset>
|
|
<fieldset class="lf-step" data-step="2">
|
|
<legend class="lf-q">Anything you want me to know? <span class="lf-opt">(optional)</span></legend>
|
|
<textarea class="lf-input" name="detail" rows="3" placeholder="Even a rough sentence helps."></textarea>
|
|
<div class="lf-nav"><button type="button" class="btn link lf-back" data-back>← Back</button><button type="button" class="btn lf-next" data-next>Continue →</button></div>
|
|
</fieldset>
|
|
<fieldset class="lf-step" data-step="3">
|
|
<legend class="lf-q">Where do I reach you?</legend>
|
|
<input class="lf-input" type="text" name="name" placeholder="Your name" required autocomplete="name">
|
|
<input class="lf-input" type="email" name="email" placeholder="Email" required autocomplete="email">
|
|
<input class="lf-input" type="tel" name="phone" placeholder="Phone (optional)" autocomplete="tel">
|
|
<input type="text" name="company_website" class="lf-hp" tabindex="-1" autocomplete="off" aria-hidden="true">
|
|
<div class="lf-nav"><button type="button" class="btn link lf-back" data-back>← Back</button><button type="submit" class="btn lf-submit">Send it →</button></div>
|
|
<p class="lf-err" hidden>Hmm — that didn't go through. Please <a href="mailto:michael@opencommunications.consulting">email me directly</a> and I'll get right back to you.</p>
|
|
</fieldset>
|
|
<div class="lf-done" hidden><p class="lf-done-msg">Got it — thanks. I read every message personally and usually reply within a business day.</p></div>
|
|
</form>
|
|
|
|
<p class="lf-alt">Prefer to reach out directly?</p>
|
|
<p class="actions center">
|
|
<a class="btn link" href="mailto:michael@opencommunications.consulting?subject=Fit%20call%20—%20Shop%20Wisdom">Email Michael</a>
|
|
<a class="btn link tel" data-p1="778" data-p2="985" data-p3="6736" href="mailto:michael@opencommunications.consulting">Call 778‑985‑OPEN (6736)</a>
|
|
</p>
|
|
<p class="promise">The first call is free and commits you to nothing.</p>
|
|
</div>
|
|
</section>
|
|
|
|
</main>
|
|
|
|
<footer class="site-footer" data-bg="dark">
|
|
<div class="footer-bg" aria-hidden="true">
|
|
<svg class="footer-bg-img" viewBox="0 0 1601.98 305.82" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
<path d="M609.67,7.16h60.88l12.53,181.56h.72l22.92-181.56h64.46l16.11,181.56h.72l18.62-181.56h52.64l-33.3,254.97h-69.47l-22.92-196.6h-.72l-21.13,196.6h-68.4L609.67,7.16Z"/>
|
|
<path d="M862.5,43.33V7.16h56.58v36.17h-56.58ZM862.5,262.13V57.3h56.58v204.83h-56.58Z"/>
|
|
<path d="M1015.4,129.63v-22.2c0-8.59-2.87-15.4-11.82-15.4s-11.82,6.8-11.82,15.4c0,35.09,79.14,28.65,79.14,95.25,0,40.47-24.35,61.95-71.62,61.95-36.17,0-64.1-13.97-64.1-50.85v-32.59h56.58v30.8c0,8.59,2.86,15.4,11.82,15.4s11.82-6.8,11.82-15.4c0-48.7-80.21-33.66-80.21-100.27,0-40.82,29.01-56.94,66.25-56.94,42.97,0,70.55,16.83,70.55,51.21v23.64h-56.58Z"/>
|
|
<path d="M1167.96,236.35h-.72c-2.87,20.41-18.26,28.29-39.03,28.29-31.15,0-40.47-26.5-40.47-51.21v-113.16c0-26.14,10.74-45.48,39.39-45.48,20.77,0,35.09,11.82,40.11,30.44h.72V7.16h56.58v254.97h-56.58v-25.78ZM1144.32,204.12c0,8.95,5.01,13.97,11.82,13.97s11.82-5.01,11.82-13.97v-88.81c0-8.95-5.01-13.97-11.82-13.97s-11.82,5.01-11.82,13.97v88.81Z"/>
|
|
<path d="M1377.09,210.21c0,37.96-32.23,54.43-68.4,54.43s-68.4-16.47-68.4-54.43v-97.76c0-36.88,24.35-57.65,68.4-57.65s68.4,20.77,68.4,57.65v97.76ZM1296.87,213.07c0,7.52,2.86,14.32,11.82,14.32s11.82-6.8,11.82-14.32v-106.71c0-7.52-2.87-14.32-11.82-14.32s-11.82,6.8-11.82,14.32v106.71Z"/>
|
|
<path d="M1447.99,84.51h.72c5.73-18.98,18.62-29.72,39.39-29.72s32.95,10.03,36.88,29.72h.72c3.22-18.26,18.98-29.72,39.03-29.72,28.29,0,37.24,18.26,37.24,43.33v164.01h-54.43V119.96c0-8.95-.72-18.62-11.46-18.62s-11.1,9.67-11.1,18.62v142.17h-54.43V119.96c0-8.95-.72-18.62-11.46-18.62s-11.1,9.67-11.1,18.62v142.17h-54.43V57.3h54.43v27.22Z"/>
|
|
<path d="M90.96,96.33v-35.81c0-12.53-3.94-19.7-15.76-19.7-12.89,0-15.76,7.16-15.76,19.7,0,42.97,90.96,55.51,90.96,134.29,0,47.99-25.78,70.19-75.56,70.19-37.96,0-74.84-12.89-74.84-56.94v-47.27h59.44v44.05c0,15.04,4.66,19.34,15.76,19.34,9.67,0,15.76-4.3,15.76-19.34C90.96,147.18,0,146.1,0,63.74,0,17.55,30.44,0,76.28,0c40.11,0,74.13,13.61,74.13,56.22v40.11h-59.44Z"/>
|
|
<path d="M166.16,259.98V5.01h56.58v75.56h.72c5.73-17.9,19.34-27.93,40.11-27.93,28.65,0,39.39,18.98,39.39,48.7v158.64h-56.58V121.4c0-11.1-.36-22.2-11.82-22.2s-11.82,11.1-11.82,22.2v138.59h-56.58Z"/>
|
|
<path d="M455.5,208.06c0,37.96-32.23,54.43-68.4,54.43s-68.4-16.47-68.4-54.43v-97.76c0-36.88,24.35-57.65,68.4-57.65s68.4,20.77,68.4,57.65v97.76ZM375.29,210.92c0,7.52,2.86,14.32,11.82,14.32s11.82-6.8,11.82-14.32v-106.71c0-7.52-2.87-14.32-11.82-14.32s-11.82,6.8-11.82,14.32v106.71Z"/>
|
|
<path d="M527.84,82h.72c2.87-21.49,18.26-29.36,39.03-29.36,31.16,0,40.47,26.5,40.47,52.28v113.16c0,25.07-10.74,44.4-39.39,44.4-20.77,0-35.09-10.74-40.11-29.36h-.72v72.69h-56.58V55.15h56.58v26.86ZM527.84,201.97c0,8.95,5.01,13.97,11.82,13.97s11.82-5.01,11.82-13.97v-88.81c0-8.95-5.01-13.97-11.82-13.97s-11.82,5.01-11.82,13.97v88.81Z"/>
|
|
</svg>
|
|
</div>
|
|
<div class="footer-content">
|
|
<div class="footer-block">
|
|
<img class="footer-logo-img" src="assets/logo/logo-horizontal-rev.svg" alt="Shop Wisdom" width="214" height="36" />
|
|
<nav class="footer-links" aria-label="Footer">
|
|
<a href="#work">The work</a>
|
|
<a href="#results">Client results</a>
|
|
<a href="#process">How it works</a>
|
|
<a href="https://www.opencommunications.consulting/">Open Communications</a>
|
|
</nav>
|
|
<p class="footer-note">Built with care and AI · Work owned by its clients · Hosted in Beauharnois, Québec — your data stays in Canada.</p>
|
|
<p class="footer-copy">Shop Wisdom and Open Communications are practices of Open Communications, owned and operated by Michael Victory · British Columbia, Canada</p>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
<div class="float-cta">
|
|
<a class="btn" href="https://cal.shopwisdom.ca/michaelvictory/20-min-shop-wise-meeting" data-cal-link="michaelvictory/20-min-shop-wise-meeting" data-cal-origin="https://cal.shopwisdom.ca" data-cal-config='{"theme":"light"}'>Book a call</a>
|
|
</div>
|
|
|
|
<script>
|
|
(function () {
|
|
for (var l of document.querySelectorAll('a.tel')) {
|
|
l.setAttribute('href', 'tel:+1' + l.dataset.p1 + l.dataset.p2 + l.dataset.p3);
|
|
}
|
|
var toggle = document.getElementById('navToggle');
|
|
var menu = document.getElementById('navMobileMenu');
|
|
function closeMenu() {
|
|
menu.classList.remove('open');
|
|
toggle.classList.remove('open');
|
|
toggle.setAttribute('aria-label', 'Open menu');
|
|
toggle.setAttribute('aria-expanded', 'false');
|
|
}
|
|
if (toggle && menu) {
|
|
toggle.addEventListener('click', function () {
|
|
var open = !menu.classList.contains('open');
|
|
menu.classList.toggle('open', open);
|
|
toggle.classList.toggle('open', open);
|
|
toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
|
|
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
|
updateNavTheme();
|
|
});
|
|
for (var a of menu.querySelectorAll('a')) { a.addEventListener('click', closeMenu); }
|
|
}
|
|
var nav = document.getElementById('nav');
|
|
var sections = Array.prototype.slice.call(document.querySelectorAll('[data-bg]'));
|
|
function darkBehind(y) {
|
|
for (var i = 0; i < sections.length; i++) {
|
|
var r = sections[i].getBoundingClientRect();
|
|
if (r.top <= y && r.bottom > y) return sections[i].dataset.bg === 'dark';
|
|
}
|
|
return false;
|
|
}
|
|
function updateNavTheme() {
|
|
nav.classList.toggle('scrolled', window.scrollY > 24);
|
|
var nr = nav.getBoundingClientRect();
|
|
nav.classList.toggle('on-dark', darkBehind((nr.top + nr.bottom) / 2));
|
|
if (menu && menu.classList.contains('open')) {
|
|
var links = menu.querySelectorAll('a');
|
|
var probe = links.length
|
|
? links[links.length - 1].getBoundingClientRect().bottom
|
|
: (function () { var mr = menu.getBoundingClientRect(); return (mr.top + mr.bottom) / 2; })();
|
|
menu.classList.toggle('on-dark', darkBehind(probe));
|
|
}
|
|
}
|
|
updateNavTheme();
|
|
window.addEventListener('scroll', function () { window.requestAnimationFrame(updateNavTheme); }, { passive: true });
|
|
window.addEventListener('resize', updateNavTheme);
|
|
})();
|
|
</script>
|
|
|
|
<!-- Lead form: 3-step navigation + submit to the n8n webhook (honeypot-protected) -->
|
|
<script>
|
|
(function () {
|
|
document.querySelectorAll('form.lf').forEach(function (form) {
|
|
var steps = [].slice.call(form.querySelectorAll('.lf-step'));
|
|
var dots = [].slice.call(form.querySelectorAll('.lf-dot'));
|
|
var done = form.querySelector('.lf-done');
|
|
var err = form.querySelector('.lf-err');
|
|
var progress = form.querySelector('.lf-progress');
|
|
var cur = 0;
|
|
function show(i) {
|
|
steps.forEach(function (s, k) { s.classList.toggle('is-active', k === i); });
|
|
dots.forEach(function (d, k) { d.classList.toggle('is-active', k <= i); });
|
|
cur = i;
|
|
var fld = steps[i].querySelector('input:not([type=radio]),textarea'); if (fld) { try { fld.focus(); } catch (e) {} }
|
|
}
|
|
function valid(i) {
|
|
var reqs = steps[i].querySelectorAll('[required]');
|
|
for (var j = 0; j < reqs.length; j++) { if (!reqs[j].checkValidity()) { reqs[j].reportValidity(); return false; } }
|
|
return true;
|
|
}
|
|
form.addEventListener('click', function (e) {
|
|
if (e.target.closest('[data-next]')) { if (valid(cur)) show(Math.min(cur + 1, steps.length - 1)); }
|
|
else if (e.target.closest('[data-back]')) { show(Math.max(cur - 1, 0)); }
|
|
});
|
|
form.addEventListener('submit', function (e) {
|
|
e.preventDefault();
|
|
if (!valid(cur)) return;
|
|
var hp = form.querySelector('.lf-hp');
|
|
if (hp && hp.value) { return; }
|
|
if (err) err.hidden = true;
|
|
var data = {};
|
|
new FormData(form).forEach(function (v, k) { if (k !== 'company_website') data[k] = v; });
|
|
data.source = form.getAttribute('data-source') || location.hostname;
|
|
data.submittedAt = new Date().toISOString();
|
|
var btn = form.querySelector('.lf-submit'); var label = btn.textContent;
|
|
btn.disabled = true; btn.textContent = 'Sending…';
|
|
fetch(form.getAttribute('data-endpoint'), {
|
|
method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data)
|
|
}).then(function (r) {
|
|
if (!r.ok) throw new Error('status ' + r.status);
|
|
steps.forEach(function (s) { s.style.display = 'none'; });
|
|
if (progress) progress.style.display = 'none';
|
|
if (done) done.hidden = false;
|
|
}).catch(function () {
|
|
btn.disabled = false; btn.textContent = label;
|
|
if (err) err.hidden = false;
|
|
});
|
|
});
|
|
});
|
|
})();
|
|
</script>
|
|
|
|
<!-- Cal.com booking embed (opens the booking popup on-brand; href is the no-JS fallback) -->
|
|
<script>
|
|
(function (C, A, L) { let p = function (a, ar) { a.q.push(ar); }; let d = C.document; C.Cal = C.Cal || function () { let cal = C.Cal; let ar = arguments; if (!cal.loaded) { cal.ns = {}; cal.q = cal.q || []; d.head.appendChild(d.createElement("script")).src = A; cal.loaded = true; } if (ar[0] === L) { const api = function () { p(api, arguments); }; const namespace = ar[1]; api.q = api.q || []; if (typeof namespace === "string") { cal.ns[namespace] = cal.ns[namespace] || api; p(cal.ns[namespace], ar); p(cal, ["initNamespace", namespace]); } else p(cal, ar); return; } p(cal, ar); }; })(window, "https://cal.shopwisdom.ca/embed/embed.js", "init");
|
|
Cal("init", { origin: "https://cal.shopwisdom.ca" });
|
|
</script>
|
|
|
|
<!-- Motion: reveal-on-scroll + stagger + open-o divider + persistent CTA. Gated on html.has-motion. -->
|
|
<script>
|
|
(function () {
|
|
var root = document.documentElement;
|
|
if (!root.classList.contains('has-motion')) return;
|
|
var nodes = [].slice.call(document.querySelectorAll('.reveal, .stagger, .o-divider'));
|
|
function showAll() { nodes.forEach(function (n) { n.classList.add('in'); }); }
|
|
try {
|
|
if ('IntersectionObserver' in window) {
|
|
var io = new IntersectionObserver(function (entries) {
|
|
entries.forEach(function (e) { if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } });
|
|
}, { rootMargin: '0px 0px -10% 0px', threshold: 0.12 });
|
|
nodes.forEach(function (n) { io.observe(n); });
|
|
} else { showAll(); }
|
|
} catch (err) { showAll(); }
|
|
|
|
var cta = document.querySelector('.float-cta');
|
|
var hero = document.querySelector('.hero');
|
|
var contact = document.getElementById('contact');
|
|
if (cta && hero) {
|
|
var upd = function () {
|
|
var pastHero = window.scrollY > hero.offsetHeight - 90;
|
|
var atContact = contact && contact.getBoundingClientRect().top < window.innerHeight * 0.92;
|
|
cta.classList.toggle('show', pastHero && !atContact);
|
|
};
|
|
upd();
|
|
window.addEventListener('scroll', function () { window.requestAnimationFrame(upd); }, { passive: true });
|
|
window.addEventListener('resize', upd);
|
|
}
|
|
})();
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|