How-To Guides

Running a Private LLM with Ollama: Keep Your Data Off the Cloud Entirely

Ollama runs Llama 3.1, Mistral, and Qwen 2.5 natively on Apple Silicon — 40-60 tokens/sec for 8B models and 12-20 for 32B on a Mac Mini M4 Pro. Paired with OpenClaw, your prompts never leave the machine. Here's the full setup + the honest trade-offs.

Jashan Preet Singh
Jashan Preet Singh
Co-Founder, beeeowl|February 19, 2026|17 min read
Running a Private LLM with Ollama: Keep Your Data Off the Cloud Entirely
TL;DR Ollama is the open-source local LLM runtime that runs models like Meta's Llama 3.1, Mistral, Qwen 2.5, and Phi-3 directly on Apple Silicon hardware. Paired with OpenClaw, it creates an AI agent stack where prompts, documents, and outputs never leave your machine. Ollama crossed 100,000 GitHub stars in early 2026, making it one of the fastest-growing open-source AI tools alongside OpenClaw. Gartner's 2025 Emerging Tech Report found 38% of enterprises now evaluating on-device LLM deployments for sensitive workloads — up from 12% in 2024. Stanford HAI's 2025 AI Index showed on-device inference costs dropped 90% between 2022 and 2025, driven primarily by Apple Silicon unified memory architecture. On a Mac Mini M4 Pro with 24GB unified memory — beeeowl's most-deployed hardware config — Qwen 2.5 32B runs at 12-20 tokens/sec, Llama 3.1 8B at 40-60 tokens/sec, and the 70B models need the 48GB tier to run usefully. Ponemon Institute's 2025 AI Privacy Benchmark found 64% of executives who switched to private LLMs reported 'acceptable or better' output quality for primary use cases — the other 36% use hybrid routing (sensitive data local, general queries cloud). This article is the complete setup playbook including installation, model selection, OpenClaw integration, performance tuning, hybrid routing config, and the network-level verification patterns that confirm zero bytes leave your machine.

IBM’s 2025 Cost of a Data Breach Report puts the average breach cost at $4.88 million, with healthcare and financial services topping $5.5 million. Breaches involving AI systems cost 13% more than average, largely because AI-processed data tends to be high-value — exactly the kind of documents executives feed into their agents. Running a private LLM means your prompts, your documents, and the model’s outputs stay on hardware you physically control. No API calls to OpenAI’s servers. No data retention policies you didn’t write. No third-party subprocessors in the chain. Ollama is the open-source runtime that makes this practical on Apple Silicon, and it crossed 100,000 GitHub stars in early 2026 — one of the fastest-growing open-source AI tools alongside OpenClaw itself. Gartner’s 2025 Emerging Tech Report found 38% of enterprises now evaluating on-device LLM deployments for sensitive workloads, up from 12% in 2024. Stanford HAI’s 2025 AI Index showed on-device inference costs dropped 90% between 2022 and 2025, driven primarily by Apple Silicon. This article is the complete setup playbook with benchmarks, model selection, OpenClaw integration, and the network-level verification that confirms zero bytes leave your machine.

Why should your AI prompts never leave your network?

Every prompt you send to GPT-4 or Claude travels to a third-party data center, gets processed on shared infrastructure you don’t control, and creates a record governed by retention policies you didn’t write. For executives handling M&A term sheets, board materials, or financial projections, that’s a liability — not a feature. The vendors aren’t malicious, but the threat model doesn’t care about intent. It cares about what happens when the vendor’s systems are compromised, when their policies change, or when a regulator subpoenas data you thought was private.

IBM’s 2025 Cost of a Data Breach Report puts the average breach cost at $4.88 million, with healthcare and financial services topping $5.5 million. The report found that breaches involving AI systems cost 13% more than average, largely because AI-processed data tends to be high-value. Executives don’t feed their grocery lists into AI agents — they feed board memos, deal flow, legal drafts, and compensation decisions. The blast radius of a single compromised AI session is measured in millions, not thousands.

Running a private LLM means your prompts, your documents, and the model’s outputs stay on hardware you physically control. No API calls to OpenAI’s servers. No data retention policies you didn’t write. No third-party subprocessors in the chain. No “trust us, we don’t train on your data” promises that you can’t verify. At beeeowl, we offer this as a $1,000 add-on to any hardware deployment (Mac Mini at $5,000 or MacBook Air at $6,000). Here’s exactly how it works under the hood, and the trade-offs you need to understand honestly before deciding if it’s right for your workflow.

What is Ollama and why does it matter for private AI?

Ollama is an open-source local LLM runtime that lets you run models like Meta’s Llama 3.1, Mistral AI’s Mistral, Alibaba’s Qwen 2.5, and Microsoft’s Phi-3 directly on your hardware. It handles model downloading, quantization (reducing precision to fit in RAM without major quality loss), memory management, and exposes a local HTTP API that’s compatible with the OpenAI API format — which means any tool that talks to GPT-4 can talk to Ollama with a one-line config change. That compatibility is the single most important design decision in the project because it means you don’t have to rewrite your agent stack to swap in local inference.

The project hit 100,000 GitHub stars in early 2026, making it one of the fastest-growing open-source AI tools alongside OpenClaw itself. It runs natively on Apple Silicon, taking full advantage of the unified memory architecture in M-series chips — the same reason Apple Silicon Macs can run larger models than you’d expect from their specs. Ollama also runs on Linux and Windows, but Apple Silicon is where it shines because the CPU and GPU share memory and the compiled Metal Performance Shaders backend is fast.

According to Gartner’s 2025 Emerging Tech Report on AI Infrastructure, 38% of enterprises are now evaluating on-device LLM deployments for sensitive workloads, up from 12% in 2024. The shift isn’t about cost savings (cloud API pricing is still cheaper per token) — it’s about data sovereignty. For a CFO handling pre-earnings financials or a general counsel reviewing M&A documents, the cloud cost advantage doesn’t matter if the data can’t legally go there. Stanford HAI’s 2025 AI Index showed on-device inference costs dropped 90% between 2022 and 2025 driven primarily by Apple Silicon, and the trend line is still accelerating.

How do you install Ollama on macOS?

Installation takes about two minutes. If you’re on a Mac (which every beeeowl hardware deployment is), Homebrew is the fastest path. We standardize on Homebrew installation across all beeeowl deployments because it integrates with our existing package management and update workflow.

# Install Ollama via Homebrew
brew install ollama

# Start the Ollama service
ollama serve

That’s it. Ollama is now running on localhost:11434 and ready to pull models. The service runs in the background and starts automatically on boot, so you don’t have to remember to restart it after a reboot. If you prefer a standalone install without Homebrew, Ollama also ships as a macOS app from ollama.com — download, drag to Applications, and launch. Same result, different packaging.

To verify it’s running:

# Check Ollama status
curl http://localhost:11434/api/tags

You should see an empty model list at this point ({"models":[]}). That’s expected — Ollama is installed but hasn’t pulled any models yet. Let’s fix that.

Which model should you pull for executive workflows?

This is where the decision matters most, and it’s the part where most DIY deployments pick the wrong model because they don’t know the benchmarks. Not all models are equal, and the right choice depends on your hardware specs, your use case, and your tolerance for output quality trade-offs. Here’s what we’ve tested across dozens of beeeowl deployments in the last 12 months.

Ollama model selection table showing six models tested on Mac Mini M4 Pro with 24GB unified memory using Ollama 0.3+ and Q4 quantization — Llama 3.1 8B at 8 billion parameters needing 8GB RAM running at 40-60 tokens per second best for email drafts summaries quick Q&A and routine triage, Mistral 7B at 7B params needing 8GB running at 45-65 tok/sec best for multilingual concise outputs and structured responses, Phi-3 Medium at 14B params needing 12GB running at 25-40 tok/sec best for reasoning tasks and Microsoft ecosystem integration, Qwen 2.5 14B at 14B params needing 12GB running at 25-35 tok/sec best for structured extraction data analysis and tables plus JSON, Qwen 2.5 32B highlighted in red as beeeowl default at 32B params needing 24GB running at 12-20 tok/sec with balanced quality and hardware fit, Llama 3.1 70B at 70B params needing 40GB+ running at 8-15 tok/sec best for complex M&A analysis and document review requiring 48GB tier, plus bottom callout explaining why Qwen 2.5 32B is the default noting it outperforms Llama 3.1 8B on Chatbot Arena by 35+ Elo matches Qwen 2.5 72B on multilingual benchmarks and fits 24GB unified memory
Qwen 2.5 32B is our default. It’s the largest model that fits in 24GB unified memory and produces GPT-3.5-class output for most tasks.
ModelParametersRAM RequiredTokens/sec (M4 Pro)Best For
Llama 3.1 8B8B8GB40-60Email drafts, summaries, quick Q&A
Mistral 7B7B8GB45-65Multilingual tasks, concise outputs
Phi-3 Medium14B12GB25-40Reasoning tasks, Microsoft ecosystem
Qwen 2.5 14B14B12GB25-35Structured extraction, data analysis
Qwen 2.5 32B32B24GB12-20beeeowl default · balanced quality
Llama 3.1 70B70B40GB+8-15Complex M&A analysis (needs 48GB tier)

For a Mac Mini M4 Pro with 24GB unified memory — which is our most recommended hardware config — we typically install Qwen 2.5 32B as the primary model and Llama 3.1 8B as a fast secondary for simple tasks. The pairing gives you high-quality output for complex work (32B) with fast responses for routine stuff (8B). For the full Mac Mini setup playbook, see setting up OpenClaw on a Mac Mini.

Pull your chosen models:

# Pull the primary model (takes 5-15 minutes depending on connection)
ollama pull qwen2.5:32b

# Pull a fast secondary model for simple tasks
ollama pull llama3.1:8b

# Verify both models are available
ollama list
# NAME              ID              SIZE
# qwen2.5:32b       abc123def456    19GB
# llama3.1:8b       789ghi012jkl    4.7GB

Deloitte’s 2025 AI Infrastructure Survey found that 72% of private LLM deployments use quantized models (reduced precision) to fit within hardware constraints. Ollama handles quantization automatically — the models you pull are already Q4 or Q5 quantized for consumer hardware without you needing to think about it. The quality delta versus full-precision FP16 models is measurable on benchmarks but rarely visible in production executive workflows.

How do you configure OpenClaw to use Ollama instead of cloud APIs?

This is the critical integration step, and it’s the one DIY deployments often skip or misconfigure. OpenClaw defaults to using cloud LLM providers — typically OpenAI’s GPT-4o or Anthropic’s Claude Sonnet. Switching to Ollama means rerouting all inference to your local machine through the OpenAI-compatible API that Ollama exposes on localhost:11434.

In your OpenClaw configuration, you’ll update the LLM provider settings. The exact file location depends on your deployment, but here’s the standard approach we ship in every beeeowl deployment:

# openclaw-config.yaml — LLM provider configuration
llm:
  provider: "ollama"
  base_url: "http://localhost:11434"
  model: "qwen2.5:32b"
  fallback_model: "llama3.1:8b"
  temperature: 0.3
  max_tokens: 4096
  timeout: 120

Because Ollama exposes an OpenAI-compatible API, OpenClaw treats it as a drop-in replacement for GPT-4. No code changes. No plugin installations. No custom adapter layer. Just a config swap, restart the container, and the agent is now running entirely locally. This is the part that makes private LLM deployment practical for executives — because you don’t have to give up any of the agent capabilities you were using with cloud models.

For environments where you want the agent to automatically choose between models based on task complexity, you can configure model routing. This is what we ship for clients who want the best of both worlds within a single deployment:

# Model routing — use the bigger model for complex tasks
llm:
  provider: "ollama"
  base_url: "http://localhost:11434"
  routing:
    default_model: "llama3.1:8b"
    complex_model: "qwen2.5:32b"
    complex_threshold: 500  # token count triggers upgrade

Test the integration end-to-end with a direct curl call before trusting it in production:

# Test Ollama directly
curl http://localhost:11434/api/generate -d '{
  "model": "qwen2.5:32b",
  "prompt": "Summarize the key risks in a standard SPA agreement.",
  "stream": false
}'

You should get a response in 10-30 seconds depending on the model and your hardware. If you’re seeing response times over 60 seconds, your model is likely too large for your available memory and is swapping to disk — step down to a smaller variant (14B or 8B) or upgrade to the Mac Mini M4 Pro 48GB tier.

What are the honest trade-offs of running a local LLM?

We’re not going to pretend local models match GPT-4o or Claude Opus 4 on every task. They don’t, and pretending otherwise is how you lose executive trust during the first week of deployment. Here’s an honest breakdown based on what we’ve seen across production deployments, and it’s the same conversation we have with every client evaluating the Private On-Device LLM add-on.

Where local models perform well:

  • Document summarization (contracts, earnings reports, board decks) — Qwen 2.5 32B handles 10-page PDFs with high fidelity
  • Structured data extraction (pulling key terms from legal agreements, extracting financial figures from reports)
  • Email drafting and response suggestions — especially for routine correspondence
  • Financial variance commentary and narrative generation — CFO briefing content
  • Meeting notes and action item extraction from transcripts
  • Code review and technical documentation tasks for CTO workflows

Where cloud models still win:

  • Complex multi-step reasoning across long documents (Claude Opus 4 is still ahead here)
  • Creative writing that needs to sound distinctly human (GPT-4o and Claude Sonnet 4.5 have a quality edge)
  • Tasks requiring real-time web knowledge — local models don’t have browsing
  • Very long context windows (200K+ tokens) — Claude handles this better than any local option
  • Code generation for unfamiliar frameworks — cloud models have more recent training data

Ponemon Institute’s 2025 AI Privacy Benchmark found that 64% of executives who switched to private LLMs reported “acceptable or better” output quality for their primary use cases. The remaining 36% used a hybrid approach — local models for sensitive data, cloud models for non-sensitive tasks. That hybrid option is available with beeeowl too.

Hybrid routing architecture diagram showing Incoming Prompt at top flowing to Classifier with keyword and context matching for financial legal confidential board M&A, splitting into two branches — left branch highlighted in red showing LOCAL Ollama Private path with Qwen 2.5 32B local runs on Mac Mini 24GB RAM with no outbound network traffic board materials M&A legal HR 12-20 tokens per second 0 bytes leave the machine, right branch in teal showing CLOUD Claude or GPT path with Claude Sonnet 4.5 cloud API call with standard redaction faster plus higher quality reasoning general Q&A public research drafts 50-200 tokens per second non-sensitive only audit logged, bottom note citing Forrester 2025 Zero Trust AI recommendation to verify at network level with pfctl and not rely solely on application config
Keyword classifier routes sensitive prompts to local Ollama and general queries to cloud. 36% of executives use this pattern.

You can configure OpenClaw to route sensitive queries (anything touching financial data, legal documents, HR records, board materials) through Ollama locally, while sending non-sensitive tasks to Claude or GPT-4 for higher quality output:

# Hybrid routing — sensitive data stays local
llm:
  routing:
    sensitive:
      provider: "ollama"
      model: "qwen2.5:32b"
      triggers:
        - "financial"
        - "legal"
        - "confidential"
        - "board"
        - "m&a"
        - "earnings"
        - "compensation"
    default:
      provider: "anthropic"
      model: "claude-sonnet-4-5"

Which executive workflows benefit most from on-device inference?

We’ve deployed private LLMs for clients across four specific workflow categories where cloud exposure is a non-starter. These aren’t edge cases — they’re where most of the private LLM add-on sales happen.

M&A due diligence is the clearest case. When you’re reviewing a target company’s financials, IP portfolio, or employee contracts, those documents can’t touch a third-party server. A leaked acquisition target is a material non-public information (MNPI) violation — the SEC doesn’t care that it was an AI API call instead of an email. McKinsey’s 2025 M&A Technology Report noted that 41% of deal teams now require air-gapped or on-premise AI tools for due diligence workstreams, up from 12% in 2023. The trend is accelerating as more deals involve AI-assisted review.

Legal document review is the second category. Law firms operating under attorney-client privilege can’t send client documents to OpenAI and maintain that privilege isn’t waived. The American Bar Association’s 2025 Ethics Opinion on AI explicitly flagged cloud LLM usage as a potential privilege waiver risk if client data is included in prompts. Thomson Reuters’ 2025 Legal AI Report identified on-device inference as the gold standard for privileged information processing — the only configuration that ethics committees at AmLaw 200 firms routinely approve without lengthy review.

Financial analysis and forecasting — CFOs running variance analysis, cash flow projections, or board-ready financial narratives don’t want their company’s numbers on someone else’s infrastructure. Especially pre-earnings quiet periods or during active fundraising where selective disclosure rules matter. The compliance math is simple: if the data would trigger a 10-K or 10-Q disclosure, it shouldn’t be on a vendor’s GPU.

HR and personnel decisions — performance reviews, compensation data, termination discussions. EEOC guidance from late 2025 explicitly requires that AI tools processing employment decisions maintain data minimization standards. Running locally is the simplest path to compliance because the data minimization story becomes “it never left the machine” instead of a 6-month vendor audit.

How do you optimize Ollama performance on Apple Silicon?

The Mac Mini M4 Pro with 24GB unified memory is the sweet spot we recommend for most beeeowl deployments. Here’s why: Apple’s unified memory architecture means the CPU and GPU share the same memory pool without copy overhead. A 32B parameter model that would need a dedicated $2,000+ NVIDIA GPU on a PC runs directly on the M4 Pro’s integrated GPU through Metal Performance Shaders.

A few configuration tweaks make a measurable difference in production performance:

# Set Ollama to use all available GPU cores
export OLLAMA_NUM_GPU=999

# Keep models loaded in memory between requests (avoids 15-30s reload delay)
export OLLAMA_KEEP_ALIVE=24h

# Increase context window for longer documents
export OLLAMA_NUM_CTX=8192

# Use faster flash attention when supported
export OLLAMA_FLASH_ATTENTION=1

Add these to your shell profile for persistence, or in a beeeowl deployment we bake them into the system configuration:

# Add to ~/.zshrc for persistence
echo 'export OLLAMA_NUM_GPU=999' >> ~/.zshrc
echo 'export OLLAMA_KEEP_ALIVE=24h' >> ~/.zshrc
echo 'export OLLAMA_NUM_CTX=8192' >> ~/.zshrc
echo 'export OLLAMA_FLASH_ATTENTION=1' >> ~/.zshrc
source ~/.zshrc

# Restart Ollama to pick up the new settings
brew services restart ollama

According to Apple’s 2025 Machine Learning Performance Report, the M4 Pro chip delivers 38 TOPS (trillion operations per second) on neural engine workloads — a 2x improvement over the M2 generation. For Ollama specifically, this translates to roughly 30-40% faster token generation compared to M2-based Macs with equivalent memory. The upgrade from M3 Pro to M4 Pro is smaller (about 12-15%) but still noticeable on the larger models.

For clients who need to run the 70B parameter Llama 3.1 — typically for complex legal or financial analysis — we recommend the Mac Mini M4 Pro with 48GB unified memory. It’s a step up in hardware cost (and a beeeowl pricing tier we’re rolling out in Q2), but it runs the most capable open-source models at usable speeds (8-15 tokens per second). See our deep-dive on on-device AI for legal and financial workflows for the specific use cases that justify the 48GB tier.

How do you verify that no data is leaving your machine?

Trust but verify. After configuring Ollama as your LLM backend, you should confirm that zero inference traffic is hitting external servers. Here’s how we validate every beeeowl Private On-Device LLM deployment before handoff:

# Monitor all outbound network connections in real time
sudo lsof -i -n | grep ollama

# You should see ONLY localhost connections:
# ollama  12345 user  5u  IPv4 0x...  TCP 127.0.0.1:11434 (LISTEN)
# ollama  12345 user  6u  IPv4 0x...  TCP 127.0.0.1:52341->127.0.0.1:11434 (ESTABLISHED)

If you see any external IP addresses in that output, something is misconfigured. Ollama itself doesn’t phone home, but a misconfigured OpenClaw setup might still route some requests to cloud providers — especially if the fallback model is configured with a cloud endpoint. Catching this at verification time saves you from silent data leakage later.

For continuous monitoring at the network level, we configure a lightweight firewall rule using pfctl (macOS’s native packet filter):

# Block Ollama from making ANY outbound internet connections
# (it shouldn't need to after models are downloaded)
sudo pfctl -e
echo "block drop out on en0 proto tcp from any to any user ollama" | sudo pfctl -f -

Forrester’s 2025 Zero Trust AI Framework recommends this exact pattern — verify at the network level, don’t rely solely on application configuration. We’ve seen cases where a config typo silently fell back to a cloud provider, and the client only noticed because of an unexpected OpenAI bill. Network-level blocking catches that class of mistake regardless of what the application config says.

What does beeeowl’s Private On-Device LLM add-on include?

Our Private On-Device LLM add-on is $1,000 one-time on top of any hardware deployment — Mac Mini ($5,000) or MacBook Air ($6,000). Here’s exactly what’s included:

  • Ollama installation and configuration — optimized for your specific hardware config with the performance flags above baked in
  • Model selection and pulling — we choose and install the right models for your stated workflows (typically Qwen 2.5 32B + Llama 3.1 8B for hybrid speed)
  • OpenClaw integration — full configuration to route inference locally, with optional hybrid routing setup for executives who want cloud for non-sensitive tasks
  • Performance tuning — memory allocation, GPU settings, context window optimization, flash attention, and keep-alive configuration
  • Network verificationpfctl firewall rules confirming zero external inference traffic, plus audit tooling to verify on demand
  • Documentation — a one-page runbook specific to your deployment for model updates, troubleshooting, and verification procedures

The add-on doesn’t change your agent’s capabilities or integrations. Your OpenClaw agent still connects to Gmail, Slack, Salesforce, HubSpot, and everything else through Composio. The only difference is where the thinking happens — on your desk, not in someone else’s data center.

For executives who want the absolute guarantee that their data never touches an external server — not even for the AI reasoning step — this is the option that closes that gap completely. It’s the configuration we recommend by default for law firm partners, PE and VC deal teams, healthcare CTOs, and anyone handling MNPI during earnings or deal windows.

How do you keep local models updated?

Ollama makes model updates straightforward. When Meta releases a new Llama version or Mistral pushes an update, pulling the latest version is one command:

# Update a model to the latest version
ollama pull qwen2.5:32b

# Remove old model versions to free disk space
ollama rm qwen2.5:32b-old

# Check available updates across all installed models
ollama list

We recommend checking for model updates monthly. The open-source model ecosystem moves fast — Hugging Face’s 2025 State of Open LLMs Report tracked 47 major model releases in Q1 2025 alone. Not every update matters for your use case, but capability improvements in summarization and structured extraction have been significant across the last year, and some updates (like Qwen 2.5 → Qwen 3 when it lands) will be worth adopting immediately.

In beeeowl deployments, we handle model updates during our monthly mastermind calls — if a new model materially improves your workflows, we’ll walk you through the update or schedule a remote session to handle it. The models themselves are just files on your disk. No subscriptions. No per-token charges. No usage limits. No provider policy changes. Once pulled, they’re yours to run as much as you want, forever, on the hardware you own. That’s the operational model that makes private AI genuinely different from cloud AI — you own the infrastructure, including the model weights, and the ownership is permanent.

Full deployment pricing on our pricing page, and role-specific workflow examples including which ones benefit most from local inference on our use cases page.

Ready to deploy private AI?

Get OpenClaw configured, hardened, and shipped to your door — operational in under a week.

Related Articles

Building a Deal Flow Triage Agent for VCs with OpenClaw
How-To Guides

Building a Deal Flow Triage Agent for VCs with OpenClaw

PitchBook tracks 5,000-10,000 inbound pitches per year at active VC firms. DocSend found the average VC spends 2 min 24 sec on a first-pass deck review. Here's the full architecture for a private OpenClaw agent that triages 400-600 decks/week at 90 seconds each.

Amarpreet SinghAmarpreet Singh
Feb 25, 202614 min read
How to Configure OpenClaw for WhatsApp: Your AI Agent in Your Pocket
How-To Guides

How to Configure OpenClaw for WhatsApp: Your AI Agent in Your Pocket

WhatsApp has 2B+ monthly users and is the default messaging app in 180+ countries. Connecting OpenClaw to WhatsApp via Meta's Cloud API turns your AI agent into a pocket assistant you text from anywhere. Here's the full configuration with security hardening.

Jashan Preet SinghJashan Preet Singh
Feb 24, 202616 min read
How to Build an AI Executive Briefing Agent with OpenClaw
How-To Guides

How to Build an AI Executive Briefing Agent with OpenClaw

The morning briefing agent is our most-deployed OpenClaw configuration. It scans Gmail, Calendar, Slack, and your CRM every morning and delivers a prioritized daily briefing to your phone at 6:30am. McKinsey found it saves 47 minutes/day — here's the full build.

Amarpreet SinghAmarpreet Singh
Feb 17, 202617 min read
beeeowl
Private AI infrastructure for executives.

© 2026 beeeowl. All rights reserved.

Made with ❤️ in Canada