CanadaClip
Tagline
Big brands stole your customers. We steal them back.
Inspiration
Every year, Canadians start 100,000 small businesses. 95,000 of them fail.
Canadian small businesses make up 98% of our economy, but they're being erased from the one place that matters most right now: AI-powered search. When someone asks ChatGPT "where can I buy a good backpack in Canada," the LLM doesn't recommend a small business like Northbound Packs. It recommends The North Face. That stolen recommendation is a stolen customer.
We talked to small business owners across Waterloo over the weekend, and when we asked how their business was doing online, they said: "I don't know how to track that."
LLMs' presence as search engines have grown by over 4,000% in the past decade. AI search now converts at 4.4x the rate of traditional organic search, and 58% of consumers rely on AI for product recommendations. Now, most enterprise teams deploy Generative Engine Optimization (GEO). But, most Canadian SMBs have never heard of it.
CanadaClip is our answer. A two-sided platform that intercepts big-brand traffic at the exact moment of purchase intent and redirects it to Canadian small businesses while giving merchants the AI tools to compete in the age of LLM-driven discovery.
What It Does
CanadaClip is split into two interconnected products that form a self-reinforcing flywheel.
For Consumers: the App Clip After downloading our app, when a user receives a big-brand product link from ChatGPT or Perplexity (Nike, Amazon, ASOS, Anker), a Reactiv App Clip activates instantly in iOS Safari. No download. No account. They paste the URL, we surface 3–4 Canadian small business alternatives in seconds, and one tap takes them to the merchant's storefront and into a Shopify checkout flow.
For Merchants: the Dashboard Merchants log in via Auth0 (fully isolated per merchant) to a real-time analytics dashboard showing exactly which customers were stolen by big brands, and how many CanadaClip recovered. The GEO Optimizer uses Gemini to analyze its product listings and generate description improvements that make them more discoverable in AI search. One click applies the update live to their storefront, synced through Supabase in real time!
The Flywheel Consumer clip events feed directly into merchant analytics. Merchant GEO improvements make their listings surface more often in future App Clip results. More consumer traffic → richer merchant insights → better listings → more consumer traffic. The system compounds.
Demo
We have a full demo embedded, but have made separate Looms for each part for those interested:
📐 Architecture Walkthrough:
https://www.loom.com/share/100ad7c247234142b147d6d53030aa96
🎨 Frontend Walkthrough:
https://www.loom.com/share/6bf8454b60884548a467eee4c5e2b815
⚙️ Backend Walkthrough:
https://www.loom.com/share/32dd42931c0f4190ae05e0f3d47f1879
✨ Animated Product Demo:
https://drive.google.com/file/d/1y2qr6llciL2pgqPU5PtuVDP4nNlAj5ih/view
How We Built It
iOS App Clip: Swift / SwiftUI + Reactiv ClipKit
Built on Reactiv's ClipKit SDK, triggered by localclip.ca/search/:query URL patterns in iOS Safari. The clip calls Gemini directly via URLSession, surfaces Canadian alternatives in a native frosted-glass sheet UI, and logs every interaction to Supabase Realtime. Shopify handles checkout natively within the clip.
Merchant Dashboard: Next.js + TypeScript + Tailwind + shadcn/ui
Deployed on Vercel at canada-clip-dashboard.vercel.app. Three core pages:
/dashboardstolen customer KPIs, grouped bar chart by competitor brand, live activity feed via Supabase Realtime websocket/dashboard/geo— GEO Optimizer powered by Gemini API, keyword metrics, one-click listing update that syncs live to the merchant's storefront/dashboard/clip— App Clip analytics and preview
Auth: Auth0
Four fully isolated merchant identities (backpack@canadaclip.ca, streetwear@canadaclip.ca, electronics@canadaclip.ca, shawarma@canadaclip.ca). Each login loads a completely different merchant context via session-scoped middleware.
Database & Realtime: Supabase
Two tables: clip_events (consumer interactions per clip activation) and merchant_listings (live product descriptions). Service role key for GEO upserts; anon key for client reads. Merchant storefronts poll every 5 seconds when a merchant applies a GEO update, it appears on their live site instantly.
AI: Gemini API Two distinct use cases: (1) the App Clip calls Gemini to identify Canadian SMB alternatives for any big-brand product URL, and (2) the GEO Optimizer sends merchant listing copy to Gemini and receives structured, actionable improvement suggestions ranked by discovery impact.
Merchant Storefronts: Static HTML + Vercel Four live merchant sites, each independently deployed and polling Supabase for real-time description updates. Changes are made without any redeployment.
Track Justifications
🏆 Reactiv ClipKit Lab
CanadaClip is purpose-built around Reactiv's App Clip technology. We used the ClipKit SDK to build a full consumer commerce experience triggered by competitor product URLs, discovering Canadian alternatives via Gemini, presenting them in a native SwiftUI sheet, and completing Shopify checkout without any app install. The clip intercepts purchase intent at the highest-value moment: when a user already has their wallet out for a big brand.
- Pull Request for Reactiv Track created by Pranav Marthi (Github Username @pranavmarthi)
🤖 Google Build with AI Track
CanadaClip directly addresses a real operational problem faced by Canadian small businesses: invisibility in AI-powered search. We used the Gemini API in two production flows for alternative product discovery for consumers and GEO copy optimization for merchants. Both solve concrete inefficiencies that cost Canadian SMBs real revenue every day.
🚀 SPUR Founder Track
This is a real startup. The problem is validated (we spoke to business owners on-site), the market is large (98% of Canadian businesses are SMBs), and the revenue model is clear: merchants pay a monthly subscription for the GEO Optimizer and analytics dashboard, while the consumer App Clip stays free. The flywheel model means cost of customer acquistion goes down as the merchant network grows. It truly emulates the marketplace effect.
🔑 MLH Best Use of Auth0
We implemented Auth0 for true multi-tenant merchant isolation. For demo purposes, we made four separate merchant identities, each with their own session context, data scope, and dashboard state. The Auth0 middleware in Next.js ensures no merchant can ever access another's data.
✨ MLH Best Use of Gemini API
Gemini is the AI backbone of CanadaClip, used in two distinct and non-trivial ways. First, real-time alternative product discovery from any big-brand URL requires Gemini to understand product category, Canadian market context, and SMB relevance simultaneously. Second, the GEO Optimizer which analyze merchant listing copy against AI discoverability principles and returns ranked, actionable suggestions. Both are live in production.
📢 Stan Build in Public
Full LinkedIn documentation of the build and all our struggles lol from Friday night ideation through Sunday judging:
- Post 1: https://www.linkedin.com/feed/update/urn:li:activity:7435902965711912960/
- Post 2: https://www.linkedin.com/feed/update/urn:li:activity:7436121175396859905/
- Post 3: https://www.linkedin.com/feed/update/urn:li:activity:7436197431433723904/
- Post 4: https://www.linkedin.com/feed/update/urn:li:activity:7436280429051138048/
- Post 5: https://www.linkedin.com/feed/update/urn:li:activity:7436392711915540480/
Challenges We Ran Into
- Reactiv ClipKit entitlements: App Clips require precise associated domain configuration and entitlement setup. Getting
localclip.caproperly linked to our ClipKit instance took significant debugging. - Supabase Realtime latency: Tuning the websocket subscription so clip events appear in the dashboard fast enough to feel live during the demo.
- Distributed team: Roderick collabored remotely from Toronto on Friday over FaceTime while Ammar and Pranav handled on-site in Waterloo. Delayed buses on Saturday morning led to real coordination under pressure.
Accomplishments We're Proud Of
- The live GEO update: merchant clicks "Apply to Website" in the dashboard and the storefront updates in another tab within seconds. It's a genuinely satisfying demo moment.
- A complete two-sided flywheel that tells a real business story rather than just a tech demo.
- Four independently deployed merchant storefronts with distinct identities, all live.
- An App Clip UI that matches native iOS design language closely enough that it doesn't look like a hackathon project.
- Building a compelling pitch around a problem most people haven't named yet: Canadian SMBs losing the GEO race before it's started.
What We Learned
- Gemini's API handles structured product comparison tasks quickly enough for real-time App Clip use, latency was not the bottleneck we expected.
- Supabase Realtime is genuinely powerful and took almost no setup for the live dashboard use case.
- App Clips are a massively underutilized iOS primitive. The friction reduction vs. a full app install is enormous for a zero-install consumer tool.
- GEO is a real and urgent gap for SMBs. Multiple people we showed the product to at the hackathon had never heard the term, but immediately understood why it mattered.
What's Next
- Merchant onboarding: Self-serve signup so any Canadian SMB can list their products and start appearing in App Clip results.
- Expanded GEO distribution: Push optimized copy directly to Google Business, Yelp, and structured data feeds, not just the merchant's own site.
- Revenue model: Monthly SaaS subscription for the GEO Optimizer + analytics dashboard. Consumer App Clip stays free forever.
- Global expansion: The "local alternatives" model works in any country. CanadaClip is v1 of a platform for independent retailers everywhere.
Additional Notes
- Architecture diagram attached in the images section
- Frontend on GitHub is Reactiv component, Backend is dashboard
- On the dashboard, for live data login using backpack@canadaclip.ca with password HackCanada2026! for live data. See https://northbound-packs.vercel.app/ to watch changes
- Pull Request for Reactiv Track created by Pranav Marthi (Github Username @pranavmarthi)
Built With
- apple-app-clips
- auth0
- figma
- gemini-api
- next.js
- node.js
- reactiv-clipkit
- sql
- supabase
- swift
- swiftui
- tailwind-css
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.