---
title: "Build an always-on AI automation stack in dependency order."
description: "See the systems behind one AI automation stack, from vault and harness to safety gates and schedules, and which ones to build first."
canonical: "https://scalewithsearch.com/articles/ai-automation-stack-explained"
date: "2026-03-23"
modified: "2026-10-02"
---
## Site navigation

- [Scale With Search](https://scalewithsearch.com/)
- Real estate
  - Real estate
    - [Real estate](https://scalewithsearch.com/for/real-estate)
- Work
  - Start here
    - [Send your brief](https://scalewithsearch.com/work#send-your-brief)
    - [Prepare your six-question brief](https://scalewithsearch.com/work#prepare-your-six-question-brief)
  - Build
    - [Site build, content library with SEO, signal desk](https://scalewithsearch.com/work)
- For your business
  - Trades and home services
    - [Auto body and collision shops](https://scalewithsearch.com/for/auto-body-and-collision-shops)
    - [Foundation and home repair contractors](https://scalewithsearch.com/for/foundation-and-home-repair)
    - [Garage door and fencing contractors](https://scalewithsearch.com/for/garage-door-and-fencing-contractors)
    - [HVAC contractors](https://scalewithsearch.com/for/hvac-contractors)
    - [Janitorial and commercial cleaning companies](https://scalewithsearch.com/for/janitorial-and-commercial-cleaning)
    - [Locksmiths](https://scalewithsearch.com/for/locksmiths)
    - [Moving companies](https://scalewithsearch.com/for/moving-companies)
    - [Pest control companies](https://scalewithsearch.com/for/pest-control-companies)
    - [Plumbing and electrical contractors](https://scalewithsearch.com/for/plumbing-and-electrical-contractors)
    - [Restoration and water or fire damage companies](https://scalewithsearch.com/for/restoration-and-water-fire-damage)
    - [Roofing companies](https://scalewithsearch.com/for/roofing-companies)
    - [Towing companies](https://scalewithsearch.com/for/towing-companies)
    - [Tree services and landscaping companies](https://scalewithsearch.com/for/tree-services-and-landscaping)
    - [Solar installers](https://scalewithsearch.com/for/solar-installation)
    - [General contractors](https://scalewithsearch.com/for/general-contractors-and-construction)
    - [Paving, concrete, and flooring contractors](https://scalewithsearch.com/for/paving)
  - Practices and professional services
    - [Bookkeeping and tax practices](https://scalewithsearch.com/for/bookkeeping-and-tax-practices)
    - [Dental practices](https://scalewithsearch.com/for/dental-practices)
    - [Family and criminal defense law firms](https://scalewithsearch.com/for/family-and-criminal-defense-law-firms)
    - [Med spas and aesthetics practices](https://scalewithsearch.com/for/med-spas-and-aesthetics)
    - [Personal injury law firms](https://scalewithsearch.com/for/personal-injury-law-firms)
    - [Veterinary clinics](https://scalewithsearch.com/for/veterinary-clinics)
    - [Gyms and fitness studios](https://scalewithsearch.com/for/fitness)
    - [Therapy and outpatient health practices](https://scalewithsearch.com/for/therapy-and-outpatient-health)
    - [Medical billing companies](https://scalewithsearch.com/for/medical-billing)
    - [Insurance agencies](https://scalewithsearch.com/for/insurance-agencies)
    - [Financial advisors](https://scalewithsearch.com/for/financial-advisors)
    - [Property management companies](https://scalewithsearch.com/for/property-management)
    - [Recruiting and staffing agencies](https://scalewithsearch.com/for/recruiting-and-staffing)
    - [Architects and interior designers](https://scalewithsearch.com/for/architects-and-interior-designers)
    - [Logistics and supply chain companies](https://scalewithsearch.com/for/logistics-and-supply-chain)
  - Agencies, MSPs, and manufacturing
    - [IT and managed service providers](https://scalewithsearch.com/for/it-and-managed-service-providers)
    - [Machine shops and precision manufacturers](https://scalewithsearch.com/for/machine-shops-and-precision-manufacturing)
    - [Marketing agencies and freelancers](https://scalewithsearch.com/for/marketing-agencies-and-freelancers)
    - [SEO agencies and consultants](https://scalewithsearch.com/for/seo-agencies-and-consultants)
    - [Small manufacturers and fabricators](https://scalewithsearch.com/for/small-manufacturers-and-fabricators)
  - Restaurants, shops, studios, and nonprofits
    - [Restaurants and hospitality businesses](https://scalewithsearch.com/for/restaurants-and-hospitality)
    - [Retail stores and ecommerce sellers](https://scalewithsearch.com/for/retail-and-ecommerce)
    - [Photographers, event planners, and travel agents](https://scalewithsearch.com/for/photographers)
    - [Churches and nonprofits](https://scalewithsearch.com/for/churches-and-nonprofits)
  - [All industries](https://scalewithsearch.com/for/)
- Learn
  - For your office
    - [Office job guides](https://scalewithsearch.com/guides/)
    - [Browser calculators](https://scalewithsearch.com/tools/)
  - Start here
    - [How it works](https://scalewithsearch.com/how-it-works)
    - [Free Starter Kit](https://scalewithsearch.com/kit/business-memory-starter-kit.zip)
    - [Synthetic specimen](https://scalewithsearch.com/specimen/working-session-specimen.zip)
  - Guides
    - [The Complete Guide to Business Memory for AI Agents](https://scalewithsearch.com/articles/business-memory-for-ai-agents-guide)
    - [The Complete Small-Business Guide to AI Agent Governance](https://scalewithsearch.com/articles/ai-agent-governance-guide-small-business)
    - [The Complete Guide to Leaving Vendor AI Memory](https://scalewithsearch.com/articles/leaving-vendor-ai-memory-guide)
  - Articles by cluster
    - [Business memory](https://scalewithsearch.com/articles/business-memory-for-ai-agents-guide)
    - [Agent governance](https://scalewithsearch.com/articles/ai-agent-governance-guide-small-business)
    - [Migration and ownership](https://scalewithsearch.com/articles/leaving-vendor-ai-memory-guide)
  - For machines
    - [llms.txt](https://scalewithsearch.com/llms.txt)
    - [llms-full.txt](https://scalewithsearch.com/llms-full.txt)
    - [Machine view](https://scalewithsearch.com/?view=machine)
- Company
  - Evidence
    - [Proof](https://scalewithsearch.com/proof)
  - Company
    - [About](https://scalewithsearch.com/about)

# Build an always-on AI automation stack in dependency order.

You hear "AI automation" and picture a ChatGPT wrapper with a Zapier trigger. That covers a small share of the work. The rest is infrastructure that makes AI useful across a business with several lines of work. That means a memory layer, search, safety gates, and monitoring. It also means routing that decides which model handles which task.

This page describes a historical March 2026 stack, not a current deployment inventory. Each section states what the system does, what fails without it, and one concrete detail. Build order matters. The dependency and portability tables are illustrative architecture maps, not measured proof of every component running together.

## The stack.

### 1. Vault

**What it does.** Obsidian serves as the canonical knowledge store. Every piece of business context lives in Markdown files with `field:: value` frontmatter. Wiki-links connect related notes, so the files form a graph the AI can follow. Domain folders, one per line of work, route all context.

**What fails without it.** Everything. The vault is the single source of truth. Without structured frontmatter, the AI cannot parse file metadata. Without wiki-links, related context stays siloed. Without domain folders, the routing layer has nowhere to send a query. Every other system reads from or writes to the vault. [Plain-text memory](/articles/plain-text-ai-memory) explains why Markdown suits this layer.

**Concrete detail.** One `_context.md` file per domain held the current state, active projects, and corrections that override older notes.

### 2. Server

**What it does.** A Hetzner cloud server (CX22 class: 2 vCPU, 4 GB RAM, 40 GB disk) running Ubuntu is the compute layer. It runs scheduled automation and background work while the Mac is off or away. It syncs with the vault, runs Claude Code headless with OAuth, and hosts the Telegram bot processes. In March 2026, it cost less per month than the entry-level paid Claude plan.

**What fails without it.** All scheduled automation stops: no overnight drafts, no proactive engine, and no background CRM checks. You can run the work manually from a terminal and a prompt.

**Concrete detail.** One long-lived OAuth token authenticates every headless Claude Code session on the server. It lives in an environment file outside the vault, and health monitoring tracks its expiry date.

### 3. Claude Code harness

**What it does.** Claude Code reads `CLAUDE.md` at session start. That project instruction file loads voice rules, domain routing rules, behavior limits, and operating context. The harness adds MCP (Model Context Protocol) servers, permission entries, and a settings file that sets which tools Claude may use.

**What fails without it.** Every session starts cold. The AI does not know your name, business, tools, clients, or voice. The owner estimated 5 to 15 minutes of re-explanation per conversation.

**Concrete detail.** The `CLAUDE.md` file held hard rules. Two examples: "never create CRM deals" and "always use obsidian-cli for file moves." Instruction text steers the model; it does not enforce anything. The hard stops come from permissions, hooks, and executor code. [A CLAUDE.md template for business context](/articles/claude-md-template-business-context) shows how to write these rules and where enforcement belongs.

### 4. Search

**What it does.** QMD, a local search engine for Markdown, combines BM25 keyword ranking with vector similarity across the vault. When the AI needs a file, it runs four methods in parallel. Grep and Glob find exact text. `qmd search` ranks by keyword. `qmd vsearch` finds semantic matches. `obsidian-cli` matches vault-aware content.

**What fails without it.** The AI finds only files it already knows about. Keyword search misses meaning. A search for "client follow-up" does not find a note titled "nurture cadence" unless a vector layer links the two. The vault turns into a filing cabinet instead of a knowledge graph.

**Concrete detail.** Retrieval across the full corpus took less than a second. The BM25 index handles exact matches, and embeddings catch related concepts.

### 5. Session ledger

**What it does.** A SQLite database with FTS5 full-text indexing captures every message from every Claude Code session. The `ledger` command searches the complete conversation history. This is institutional memory: not what the AI recalls, but what was said and decided.

**What fails without it.** Past decisions vanish. You know you ruled on a CRM field mapping three weeks ago, but you cannot find where. You lose the audit trail of what was promised, built, and deferred. Context compaction in long sessions strips nuance, and the ledger keeps the original exchange.

**Concrete detail.** FTS5 returned results in milliseconds. When memories conflict, the transcript settles it.

### 6. Hooks

**What it does.** Hooks are commands that Claude Code runs at fixed events, such as prompt submission or a tool call. A routing hook sees a domain keyword in the prompt and loads that domain's `_context.md`. A correction hook writes a correction to permanent storage so it is not reverted. A voice hook checks output against a voice protocol: no flattery, no filler, no neat closing lines.

**What fails without it.** The AI treats every domain alike. It uses one tone for client email and internal notes. It reverts to outdated facts after a correction. [Corrections become part of the system](/articles/corrections-become-system-memory) only when a mechanism like this one writes them where the next session reads.

**Concrete detail.** A time-based routing hook changes what the word "leads" means. During office hours it points to one domain's prospects, and after 5 p.m. to another's.

### 7. Skills

**What it does.** Slash commands package multi-step workflows into one call. One runs a CRM audit with safety gates. One manages a weekly capacity sprint. One writes a session handoff file so the next agent can continue. Each skill is a Markdown file of structured instructions that Claude Code loads on demand.

**What fails without it.** Every complex job needs manual orchestration. You explain the CRM audit from scratch each time and forget steps. The AI reads "run the audit" differently across sessions. A skill makes the same command produce the same workflow.

**Concrete detail.** The CRM audit skill is write-blocked for every scope. It runs in dry-run mode only and produces a report, never a CRM change.

### 8. Timers

**What it does.** Scheduled automation runs in two tiers. On the Mac, launchd agents handle vault sync, health checks, and local work. On the server, systemd timers handle content drafts, CRM monitoring, notifications, and background research. Each timer runs a script that calls Claude Code headless, hourly, daily, or weekly.

**What fails without it.** Nothing happens unless you start it. No drafts wait in the morning queue. No alert fires when a lead sits untouched for 4 days. No health check catches an expiring token before it locks you out.

**Concrete detail.** The server timers were later rebuilt behind one engine. A single orchestrator replaced independent jobs and now weighs priority and resource contention.

### 9. Telegram bots

**What it does.** Telegram bots form the interface outside the terminal. They transcribe and route voice messages, deliver session summaries, and push alerts. You can trigger jobs, approve outreach drafts, and receive monitoring alerts from a phone.

**What fails without it.** The mobile interface disappears. Alerts live only in terminal output that nobody reads. Every approval needs a desk. A commute becomes dead time instead of a voice session.

**Concrete detail.** Each bot has its own token in the environment file. One domain's alerts batch into a single message to limit notification fatigue. The bot is a dispatch terminal that happens to live in a chat app, not a chatbot.

### 10. Notification routing

**What it does.** Three layers decide what reaches you, when, and how:

1. Priority: critical, operational, or informational.
2. Quiet hours: nothing between 10 p.m. and 7 a.m. unless something is broken.
3. Debounce: five copies of one alert in 10 minutes become one message.

Routing rules then send each alert to Telegram, to a vault log, or to a recovery script.

**What fails without it.** Alert fatigue. Every process shouts at the same volume, so you start to ignore alerts and miss the one that matters. Or a noncritical check wakes you at 3 a.m.

**Concrete detail.** Debounce collapses repeated token-refresh warnings into one line: "Token refresh failed (x7 in 30m)."

### 11. Health monitoring

**What it does.** A watchdog checks every other system: token expiry, server uptime, vault sync, and the liveness of long-running processes. On a failure, it tries recovery first. It restarts a crashed process, refreshes a token, or re-queues a failed job. It alerts you only when recovery fails.

**What fails without it.** Failures go silent. The token expires, and headless sessions stop without a sound. A process crashes at midnight, and nothing runs until someone notices the gap. You learn the system is down only when output is missing, hours or days later.

**Concrete detail.** Token expiry is tracked to the day. The watchdog warns 30 days ahead, again at 7 days, and escalates to critical at 48 hours.

### 12. CRM safety gate

**What it does.** Rules limit how the AI touches CRM data. Rule zero: the deal-creation path is write-blocked, with no scoped exceptions and no batch runs. Every CRM change defaults to dry-run mode and produces a report of proposed changes. Before any write reaches the API, the gate validates field mappings and checks for duplicate contacts. It also flags a record where one name appears on both sides of a transaction.

**What fails without it.** One malformed API call corrupts live data. A record that should not exist appears. A contact's stage gets overwritten. In a CRM where each record is a live transaction with real people, a bad write is operational damage, not a data glitch.

**Concrete detail.** When a record seems to be missing, the rule is absolute: widen the search, and never create the record. The system assumes the search failed, not the data.

### 13. Outreach pipeline

**What it does.** The server, Telegram, and the Mac split the work. The server drafts outreach overnight from CRM data, prospect research, and campaign context. Telegram delivers the drafts for review and approval. The Mac writes the approvals back to the CRM and sends. Three tiers organize the outreach: Relationship (warm and ongoing), Presence (visibility), and Opportunity (direct offers). Generation, approval, and execution stay separate.

**What fails without it.** Outreach turns manual. You write each message or use templates that read like templates. Without the approval gate, unreviewed AI messages go out, and one tone-deaf message can undo months of relationship work. [Who approves what an AI agent sends](/articles/who-approves-what-an-ai-agent-sends) covers how to assign that gate.

**Concrete detail.** One governing document defines the pipeline. Campaign files say what to send. The CRM records who responded. The pipeline never mixes message content with response tracking.

### 14. Content scheduling

**What it does.** A calendar drives content across platforms. A schedule file says what publishes when. The server drafts content off-hours from topical maps and editorial calendars. Drafts queue for review, and approved content publishes on schedule.

**What fails without it.** Content turns reactive. You publish when you remember, not when the calendar says. Gaps compound, because platforms reward consistency, and a missed week means rebuilt momentum.

**Concrete detail.** The topical map decides the topic. The schedule decides the time. The server writes the first draft. A person has the final word. That split keeps output steady on days with little creative energy.

## Dependency table

This illustrative dependency table shows an architecture and its build order. Each layer assumes the one below it exists. Validate those dependencies in your own implementation.

| Phase | Systems | What it unlocks |
|---|---|---|
| Foundation | 1. Vault | Structured knowledge store; everything reads from it |
| Harness | 3. Claude Code harness, then 6. Hooks | AI reads the vault with domain awareness and behavior limits |
| Search | 4. Search, then 5. Session ledger | AI finds anything in the vault or conversation history |
| Skills | 7. Skills | Complex workflows in one command; needs the harness and hooks |
| Infrastructure | 2. Server, then 8. Timers | Compute and scheduled automation |
| Interface | 9. Telegram bots, then 10. Notification routing | Mobile command surface, alert filtering, approvals from a phone |
| Safety | 11. Health monitoring, then 12. CRM safety gate | Self-recovery and write protection on live business data |
| Output | 13. Outreach pipeline, then 14. Content scheduling | Work product on a schedule; everything above feeds it |

## Build order for your situation

Start with the vault (system 1), then the harness (system 3), then hooks (system 6). Those three give you persistent AI memory. Add the other eleven as needs grow.

The stack scales down. A solo consultant needs systems 1, 3, and 6, and perhaps 7. A small team with several domains may need the full build. Use the dependency table to find where to stop.

The foundation takes an afternoon. The full stack took months of iteration, failure modes found in production, and rules learned the hard way. The CRM safety gate exists because of a real incident, not a hypothetical one.

## Which systems work with other models

This illustrative portability table separates the record, harness, automation, and business layers. Not every system depends on Claude Code:

| Group | Systems | Works with other AI tools? |
|---|---|---|
| Record and search | Vault, search, session ledger | Yes, with any AI that reads files |
| Claude Code layer | Harness, hooks, skills | No; these use Claude Code features |
| Automation layer | Server, timers, bots, notifications, monitoring | Yes; model-agnostic |
| Business gates and output | CRM gate, outreach, content scheduling | Yes, if the new model's executor enforces the same gates |

If you move the harness to ChatGPT or Gemini, you rebuild the Claude Code layer and keep the record. [Replace the model without rebuilding the business memory](/articles/replace-the-model-keep-business-memory) covers that move.

## What this stack is not

It is not a SaaS product. It has no dashboard, login page, or billing portal. It is infrastructure you own: files on your machine, processes on your server, and settings under your control. Providers can change prices, retire features, or shut down. The vault, the context, and the operating logic stay, because they are stored on your disks, not on the provider's servers. The provider still receives whatever a session reads while it runs.

On cost, as of March 2026: the Claude plan was the largest recurring line, and the server was the smallest. Obsidian and the Telegram bots added no license cost.


## Related: AI memory

- [Compare Claude Code Channels with a custom Telegram bot before you build either one](/articles/claude-code-channels-vs-custom-telegram-bot)
- [Run Claude Code on a VPS so scheduled work continues while your laptop is closed](/articles/claude-code-production-deployment)
- [Run three business workflows with Claude Code and a context file](/articles/how-to-use-claude-code-for-business)

----

```text
                  .|########||.                                       .|########||.                                       .|########||.
               |##||.      .||##|.                                 |##||.      .||##|.                                 |##||.      .||##|.
             |#|.              .|#|.                             |#|.              .|#|.                             |#|.              .|#|.
           |#|                    |#|                          |#|                    |#|                          |#|                    |#|
         .#|                        |#.                      .#|                        |#.                      .#|                        |#.
        .#.                          .#|                    .#.                          .#|                    .#.                          .#|
       |#.                            .#|                  |#.                            .#|                  |#.                            .#|
      |#             ......             #|                |#             ......             #|                |#             ......             #|
     .#           ||#########|           #|              .#           ||#########|           #|              .#           ||#########|           #|
    .#.         |######||######|.        .#.            .#.         |######||######|.        .#.            .#.         |######||######|.        .#.
    #.        .##|###|##|#|######|        .#            #.        .##|###|##|#|######|        .#            #.        .##|###|##|#|######|        .#
   ||        |##|#||||||||||||#||#|        ||          ||        |##|#||||||||||||#||#|        ||          ||        |##|#||||||||||||#||#|        ||
   #        |#||||||||||||||||||||#|        #.         #        |#||||||||||||||||||||#|        #.         #        |#||||||||||||||||||||#|        #.
  ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||
  #       .#||||||||||||||||||||||||#|       #        #       .#||||||||||||||||||||||||#|       #        #       .#||||||||||||||||||||||||#|       #
 ||   ....|||#||||||##|#|||#|#||##||||....|. ||      ||   ....|||#||||||##|#|||#|#||##||||....|. ||      ||   ....|||#||||||##|#|||#|#||##||||....|. ||
 #.  .  ....|#  ....#|||   ||| .#|||  ....#. .#      #.  .  ....|#  ....#|||   ||| .#|||  ....#. .#      #.  .  ....|#  ....#|||   ||| .#|||  ....#. .#
 #   .  ||||#| .#####||  . .#| .#|||  ||||#   #.     #   .  ||||#| .#####||  . .#| .#|||  ||||#   #.     #   .  ||||#| .#####||  . .#| .#|||  ||||#   #.
.|   |||||  #. |#|||||. ||  #. |#||. .|||||   ||    .|   |||||  #. |#|||||. ||  #. |#||. .|||||   ||    .|   |||||  #. |#|||||. ||  #. |#||. .|||||   ||
||   |....  #. ....|#.      |. ...|. ....||   ||    ||   |....  #. ....|#.      |. ...|. ....||   ||    ||   |....  #. ....|#.      |. ...|. ....||   ||
#.  .||||||##||||||##||####|||||||#||||||#|   .#    #.  .||||||##||||||##||####|||||||#||||||#|   .#    #.  .||||||##||||||##||####|||||||#||||||#|   .#
#    .||####|###########################|.     #    #    .||####|###########################|.     #    #    .||####|###########################|.     #
#      .#||||||.#.|| # |. ..# #| #|||||#|      #    #      .#||||||.#.|| # |. ..# #| #|||||#|      #    #      .#||||||.#.|| # |. ..# #| #|||||#|      #
#      .#|||||| ..  |# ## |#| ...#|#|||#|      #    #      .#|||||| ..  |# ## |#| ...#|#|||#|      #    #      .#|||||| ..  |# ## |#| ...#|#|||#|      #
#      .#|||#|# .# .#| #| ##|.#..#|||||#|      #    #      .#|||#|# .# .#| #| ##|.#..#|||||#|      #    #      .#|||#|# .# .#| #| ##|.#..#|||||#|      #
#      .#||||||############|######|||||#|      #    #      .#||||||############|######|||||#|      #    #      .#||||||############|######|||||#|      #
#   |...||#||||||#||||#|#||||||#|||||#||| |.|  #    #   |...||#||||||#||||#|#||||||#|||||#||| |.|  #    #   |...||#||||||#||||#|#||||||#|||||#||| |.|  #
#. .. ||||# .|||##|.  |#| .|| || .|||#. #|  # .#    #. .. ||||# .|||##|.  |#| .|| || .|||#. #|  # .#    #. .. ||||# .|||##|.  |#| .|| || .|||#. #|  # .#
|| |  ...||  ...##| |  #| .|. |. #####  .. .| ||    || |  ...||  ...##| |  #| .|. |. #####  .. .| ||    || |  ...||  ...##| |  #| .|. |. #####  .. .| ||
|| ||||| || ||||#|  .  |. |. |#. ||||| |#| || ||    || ||||| || ||||#|  .  |. |. |#. ||||| |#| || ||    || ||||| || ||||#|  .  |. |. |#. ||||| |#| || ||
.# |.....#|....|#.||||.|||##.|#|....||.#||.#. #.    .# |.....#|....|#.||||.|||##.|#|....||.#||.#. #.    .# |.....#|....|#.||||.|||##.|#|....||.#||.#. #.
 #.|||||||#############################| ||| .#      #.|||||||#############################| ||| .#      #.|||||||#############################| ||| .#
 ||       ##||#||#||||||#||#||#||#||##.      ||      ||       ##||#||#||||||#||#||#||#||##.      ||      ||       ##||#||#||||||#||#||#||#||##.      ||
  #       .#|||||||||#||#|||||||||||#|       #        #       .#|||||||||#||#|||||||||||#|       #        #       .#|||||||||#||#|||||||||||#|       #
  ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||
  .#        |#||||||||||||||||||||#|        #.        .#        |#||||||||||||||||||||#|        #.        .#        |#||||||||||||||||||||#|        #.
   ||        |#||||||||||||||||||#|        ||          ||        |#||||||||||||||||||#|        ||          ||        |#||||||||||||||||||#|        ||
    #.        .######|#|#########|        .#            #.        .######|#|#########|        .#            #.        .######|#|#########|        .#
    .#.         |#####||||#####|         .#.            .#.         |#####||||#####|         .#.            .#.         |#####||||#####|         .#.
     |#           ||########||           #.              |#           ||########||           #.              |#           ||########||           #.
      |#             ......             #|                |#             ......             #|                |#             ......             #|
       |#.                            .#|                  |#.                            .#|                  |#.                            .#|
        |#.                          .#.                    |#.                          .#.                    |#.                          .#.
         .#|                        |#.                      .#|                        |#.                      .#|                        |#.
           |#|                    |#|                          |#|                    |#|                          |#|                    |#|
            .|#|.              .|#|.                            .|#|.              .|#|.                            .|#|.              .|#|.
               |##||.      .||##|                                  |##||.      .||##|                                  |##||.      .||##|
                 .||########||.                                      .||########||.                                      .||########||.

Scale With Search  2026  [scalewithsearch.com](https://scalewithsearch.com)
```
