Files
shopwisdom-site/index.html
T

585 lines
42 KiB
HTML

<!DOCTYPE html>
<html lang="en-CA">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ShopWisdom | Keep What Your Best People Know — for Manufacturers</title>
<meta name="description" content="Your best people are retiring. We help manufacturers with production shops capture the know-how the business runs on — quoting, pricing, orders — and write it into a cookbook your company owns outright — then build the systems to run it. Any platform, no lock-in, no hype.">
<link rel="preload" href="assets/fonts/playfair-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="assets/fonts/playfair-400i.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="assets/fonts/dmsans-400.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="assets/fonts/lora-400.woff2" as="font" type="font/woff2" crossorigin>
<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="ShopWisdom">
<meta property="og:title" content="ShopWisdom — keep what your best people know">
<meta property="og:description" content="Your best people are retiring. We capture the know-how your business runs on — quoting, pricing, orders — and write it into a cookbook your company owns outright — then build the systems to run it. Before it's gone.">
<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="ShopWisdom — 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="ShopWisdom — keep what your best people know">
<meta name="twitter:description" content="Knowledge continuity for manufacturers — before it's gone.">
<meta name="twitter:image" content="https://shopwisdom.ca/og-card.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://shopwisdom.ca/#organization",
"name": "ShopWisdom",
"alternateName": "Shop Wisdom",
"url": "https://shopwisdom.ca/",
"logo": { "@type": "ImageObject", "url": "https://shopwisdom.ca/og-card.png", "width": 1200, "height": 630 },
"image": "https://shopwisdom.ca/og-card.png",
"slogan": "Keep what your best people know.",
"description": "Knowledge continuity for manufacturers: ShopWisdom captures the know-how that lives in a retiring veteran's head — quoting, pricing, orders, customer history — and builds it into systems the whole business can run on. Clients own their cookbook and everything built from it; platform-independent by design; Canadian hosting available end-to-end.",
"email": "michael@opencommunications.consulting",
"telephone": "+1-778-985-6736",
"areaServed": [{ "@type": "Country", "name": "Canada" }, { "@type": "Country", "name": "United States" }],
"address": { "@type": "PostalAddress", "addressRegion": "British Columbia", "addressCountry": "CA" },
"founder": { "@id": "https://shopwisdom.ca/#michael" },
"parentOrganization": { "@type": "Organization", "name": "Open Communications", "url": "https://www.opencommunications.consulting/" },
"sameAs": ["https://www.opencommunications.consulting/"],
"knowsAbout": ["knowledge capture", "succession planning", "business continuity", "standard operating procedures", "manufacturing operations", "dealer and distributor pricing", "AI tools for small business", "Canadian data sovereignty"]
},
{
"@type": "ProfessionalService",
"@id": "https://shopwisdom.ca/#service",
"name": "ShopWisdom — knowledge continuity for manufacturers",
"url": "https://shopwisdom.ca/",
"image": "https://shopwisdom.ca/og-card.png",
"serviceType": "Knowledge continuity and succession planning for manufacturers",
"provider": { "@id": "https://shopwisdom.ca/#organization" },
"areaServed": [{ "@type": "Country", "name": "Canada" }, { "@type": "Country", "name": "United States" }],
"audience": { "@type": "BusinessAudience", "audienceType": "Building-materials manufacturers with a retiring key person" },
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Continuity services",
"itemListElement": [
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "The Continuity Audit", "url": "https://shopwisdom.ca/continuity-audit.html", "description": "A fixed-fee diagnostic — a few focused hours with your team to find where the business is exposed (who holds what, what it costs you if they leave, the effect on the value of the business), delivered as a plain-English risk report and roadmap." } },
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Knowledge Capture & Systems", "description": "Sit with your best people, draw out the judgment in their heads, and build it into documented, trained systems the whole crew can run — without first cleaning up decades of spreadsheets." } },
{ "@type": "Offer", "itemOffered": { "@type": "Service", "name": "System Care — Continuity Partner", "description": "A recurring retainer — your continuity partner: tools hosted and kept healthy with regular check-ups (quarterly, monthly, or weekly), new tech folded in, and the next key person captured before they leave. You own the cookbook and everything built from it; Canadian hosting available." } }
]
}
},
{
"@type": "Person",
"@id": "https://shopwisdom.ca/#michael",
"name": "Michael Victory",
"jobTitle": "Founder",
"worksFor": { "@id": "https://shopwisdom.ca/#organization" },
"telephone": "+1-778-985-6736",
"email": "michael@opencommunications.consulting",
"sameAs": ["https://www.opencommunications.consulting/"]
},
{
"@type": "WebSite",
"@id": "https://shopwisdom.ca/#website",
"url": "https://shopwisdom.ca/",
"name": "ShopWisdom",
"inLanguage": "en-CA",
"publisher": { "@id": "https://shopwisdom.ca/#organization" }
},
{
"@type": "WebPage",
"@id": "https://shopwisdom.ca/#webpage",
"url": "https://shopwisdom.ca/",
"name": "ShopWisdom | Keep What Your Best People Know — for Manufacturers",
"isPartOf": { "@id": "https://shopwisdom.ca/#website" },
"about": { "@id": "https://shopwisdom.ca/#organization" },
"primaryImageOfPage": "https://shopwisdom.ca/og-card.png",
"inLanguage": "en-CA"
}
]
}
</script>
<script>document.documentElement.className += ' has-motion';</script>
</head>
<body>
<header class="nav" id="nav">
<a class="nav-logo" href="#top" aria-label="ShopWisdom — home">
<img class="nav-logo-img nav-logo-light" src="assets/logo/logo-horizontal.svg" alt="ShopWisdom" 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 href="vacation-test.html">Vacation Test</a>
<a class="tel nav-phone" data-p1="778" data-p2="985" data-p3="6736" href="#contact" aria-label="Call ShopWisdom">778&#8209;985&#8209;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 href="vacation-test.html">Vacation Test</a>
<a class="tel" data-p1="778" data-p2="985" data-p3="6736" href="#contact">Call 778&#8209;985&#8209;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">
<video class="hero-video" autoplay muted loop playsinline preload="none" poster="assets/hero/hero-poster.jpg" aria-hidden="true" data-src-desktop="assets/hero/hero.mp4" data-src-mobile="assets/hero/hero-mobile.mp4"></video>
<div class="wrap hero-wrap"><div class="hero-col">
<p class="eyebrow">Knowledge continuity · for the office that runs the shop</p>
<h1>Your best people are retiring. Their know&#8209;how doesn't <em>have to.</em></h1>
<p class="lead">We don't just install AI. Before that know&#8209;how retires with them, we turn the pricing instincts, the fixes, the hard&#8209;won judgment in their heads into a cookbook your business owns — and systems your whole crew can run on. The tools will change. The cookbook doesn&#8217;t retire. We stay on to keep it true.</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&#8209;985&#8209;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 business 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>moving on.</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 moves on.</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 we work</p>
<h2>We 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. We 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. We work at the pace good work needs, not the pace the hype cycle demands.</p>
</div>
<div class="card">
<h3>You own the cookbook</h3>
<p>Everything we capture — how you quote, price, decide, and keep customers — goes into a written cookbook that belongs to your company, in plain language your next hire can follow. The systems we build from it are yours too, free of lock&#8209;in and hosted where you want (Canadian end&#8209;to&#8209;end if that matters to you). But the cookbook is the asset: any tool, any time, anyone can cook from it. Software comes and goes. The cookbook stays on your shelf.</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 business.</h2>
<p class="section-intro">Three steps: find out where you're exposed, fix it, and keep it handled. We work where the know&#8209;how lives — quoting, pricing, orders, customer history — the office side that runs the place. Every engagement starts by understanding your actual problem before we 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>We 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&#8209;English risk report and a roadmap. Fixed fee. Nothing to install.</p>
<p class="outcome">You walk away knowing where your business 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 &amp; build</span>
<h3>Capture it — and make it usable</h3>
<p>We 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 — but software records which buttons get pushed. We capture the judgment — the human part, the part that leaves with them when a veteran moves on — and write it into a cookbook your company owns. From there we build the tools your crew actually uses. Change platforms in five years? The cookbook comes with you and the new tools get built from the same book.</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 · Continuity Partner</span>
<h3>Your tools, kept running — and never falling behind</h3>
<p>Think of it as a continuity partner on retainer. Each quarter we open your cookbook and check it against how the work really gets done now — what changed, what a new hire tripped on, what the next retirement will take with it — and we keep the tools built from it healthy, hosted and running (Canadian servers if that matters to your business), on a cadence that fits how hard you lean on them: quarterly, monthly, or weekly. When the next key person moves on, their chapter gets written too. You own the cookbook and everything built from it; walk away anytime and it all comes with you.</p>
<p class="outcome">The system stays alive, current, and improving — with a partner who already knows how your business thinks.</p>
</div>
</div>
<p class="reassure">Everything we build comes with full documentation and a handover session. Independence is built in — System Care is there when you'd rather have a partner on call.</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 manufacturers — 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&#8209;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&#8209;time discount logic, profile&#8209;based pricing tiers, product filtering, and a built&#8209;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&#8209;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&#8209;length calculators, and a print&#8209;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 alt" data-bg="light">
<div class="wrap narrow reveal">
<p class="eyebrow">Why it's worth more</p>
<h2>Captured know&#8209;how isn't just safer. It's worth <em>more.</em></h2>
<p>When the person who knows how you really quote, price, and keep customers is the one closest to retirement, that knowledge is worth money — and right now it isn't written down, and it isn't yours to keep. We turn it into a cookbook the business owns — the documented DNA of how the place actually works — before it moves on with someone. Buyers, and the advisors who help owners sell, look for exactly this: documented, transferable know&#8209;how is what turns a company that depends on one person into one that holds its value without them. A business that can hand the next owner the cookbook is worth more than one that hands over a login.</p>
<p class="emph">Could the office run for three months without your most knowledgeable person? Buyers ask exactly that — and when the answer is &ldquo;yes, it's captured, and it's ours,&rdquo; your business is worth more.</p>
<p><a class="card-link" href="vacation-test.html">Take the two&#8209;minute Vacation Test &#8594;</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 — and rarely because of the tools. <a href="https://www.bcg.com/featured-insights/the-leaders-guide-to-transforming-with-ai" target="_blank" rel="noopener">BCG's research</a> across hundreds of AI programs puts the recipe at 10% algorithms, 20% technology, and 70% people and process. The 70% is the part almost everyone skips. Most teams have already learned it the hard way: there's a binder somewhere — half&#8209;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 they know, and getting a team 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 our sister practice, <a href="https://www.opencommunications.consulting/">Open Communications →</a>, is built for. Same business, same straight talk — one side builds the systems, the other works with the people.</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; we give you an honest read on whether we can help. No pitch, no obligation. If it's not a fit, we'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 few hours working together where we map how work really moves through your business — who holds what, where the judgment sits, what would break first if someone left. You leave with a written map and recommendation, yours to keep whether or not we go further: the first rough table of contents of your cookbook. Fixed fee, agreed up front — and if a project follows, every dollar of it comes off the full cookbook.</p>
</li>
<li>
<h3>Writing the cookbook</h3>
<p>Once scope and price are agreed — written in plain language, before any work begins — we spend a day or so with the people who hold the know&#8209;how, drilling into the recipes: how a quote really comes together, what gets checked before a job ships, the calls only experience knows how to make. The methods, the ingredients, the why behind each one. Then the cookbook is loaded into your AI tools, so the systems we build cook from the real thing — and quietly gather what changes between quarterly reviews. Scope changes along the way 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. Run it on your own, or keep us on call through System Care — a choice, never a requirement.</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&#8209;sized businesses — including 13 building long&#8209;term partnerships across a dealer network, and the last several years helping non&#8209;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 business 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&#8209;engineer the solution or under&#8209;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'd rather tell you that you don't need me than sell you something you won't use — that judgment is what the discovery session is for, and the written recommendation is yours to keep either way.</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>We're <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 we do.</li>
<li><strong>Shopping for a black box to rent forever.</strong> You own the cookbook and everything we build from it — yours to take anytime. We'll keep it running and current if you want that (that's System Care), but it's a choice, never a leash. We don't do lock&#8209;in.</li>
<li><strong>Shopping for a Super Bowl AI strategy or an AI pilot project.</strong> No hype, no transformation slides, no buzzwords — and no pilots that quietly die in IT. 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 our sister 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>
<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&#8209;how built this business. 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 business?</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 us 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 we 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 us directly</a> and we'll get right back to you.</p>
</fieldset>
<div class="lf-done" hidden><p class="lf-done-msg">Got it — thanks. Michael reads every message personally and usually replies 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—%20ShopWisdom">Email Michael</a>
<a class="btn link tel" data-p1="778" data-p2="985" data-p3="6736" href="tel:+17789856736">Call 778&#8209;985&#8209;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">
<img class="footer-bg-img" src="assets/logo/footer-watermark.svg" alt="" aria-hidden="true" />
</div>
<div class="footer-content">
<div class="footer-block">
<img class="footer-logo-img" src="assets/logo/logo-horizontal-rev.svg" alt="ShopWisdom" width="95" height="16" />
<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 class="footer-oc-logo" href="https://www.opencommunications.consulting/" aria-label="Open Communications"><img src="assets/oc/oc-logo-wh.svg" alt="Open Communications"></a>
</nav>
<p class="footer-note">Built with care and AI · Work owned by its clients · Proudly Canadian.</p>
<p class="footer-copy">ShopWisdom and Open Communications are practices 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>
<!-- Hero ambient loop: viewport-aware source (light mobile encode), poster-first; skipped on Save-Data / reduced-motion -->
<script>
(function () {
var hv = document.querySelector('.hero-video');
if (!hv) return;
var conn = navigator.connection || {};
if (conn.saveData === true) return;
if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;
var isMobile = window.matchMedia('(max-width: 760px)').matches;
var src = hv.getAttribute(isMobile ? 'data-src-mobile' : 'data-src-desktop');
if (!src) return;
var s = document.createElement('source'); s.src = src; s.type = 'video/mp4'; hv.appendChild(s);
hv.load();
})();
</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");
(function(){var d=false;function go(){if(d)return;d=true;Cal("init",{origin:"https://cal.shopwisdom.ca"});}var ev=["pointerdown","mousemove","touchstart","scroll","keydown"];function on(){go();ev.forEach(function(e){window.removeEventListener(e,on);});}ev.forEach(function(e){window.addEventListener(e,on,{passive:true});});})();
</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>