Work

Products, tools, and sites I've built.

Most of it started as something my agency needed and couldn't buy. The platform, the lookup tools, the site kit: all of it is in production and in daily use.

Products

Two companies, one problem: local businesses being understood by Google.

Platform + community

Local Visibility Lab

Equip the agency. Empower the owner.

A Google Business Profile management platform for agencies and multi-location brands. It started as the internal tooling Simple SEO Marketing used every day, and it still runs the agency's work. Agencies get white-label branding, separate client workspaces, and storefronts to sell their own services. Multi-location brands get every location in one dashboard.

The reinstatement toolkit inside it is the practitioner playbook I use on real client work, built into the software: readiness audits that catch issues before Google does, AI document review that checks evidence packages against Google's guidelines, and appeal links that live in every profile view. An experienced team handles reinstatement cases, with my guidance on the complex ones.

Around the software there's a community: a weekly group consulting call where suspensions, policy questions, and optimization problems get worked through live.

  • WhoAgencies (white-label) and multi-location / franchise brands; SMBs too
  • RoleFounder, product design, and a lot of the code
  • StackTypeScript, Cloud Run, Stripe Connect, Clerk, Cloudflare
  • OriginInternal agency tooling, productized
Agency

Simple SEO Marketing

Local SEO that works.

The agency I founded in Kelowna. Google Business Profile management, local SEO, verification and reinstatement help, review recovery, and website SEO for service businesses across Canada and the United States. Small team, direct access, no guaranteed-rankings theatre.

  • WhoLocal service businesses, plus consulting for agencies and platforms
  • RoleFounder and lead, oversight on every account
  • Runs onLocal Visibility Lab

Tools

Smaller things that earn their keep.

  • simpleseo.biz

    GBP Categories lookup

    A searchable list of every Google Business Profile category (about 4,000 in the US), with the service types Google attaches to each one and a filter for what was added or changed recently.

    Why: Picking the right primary category is the single highest-leverage GBP decision, and Google doesn't publish the list anywhere convenient. So I keep one.

    Open
  • thebestof.site

    The Best Of

    A curated, editorially rated local directory, city by city, starting with Kelowna. Data-driven: server-rendered SvelteKit on Cloudflare with D1 and R2, weekly automated imports, and a verified-in-person badge.

    Why: A place to test what a genuinely useful local directory looks like when it isn’t pay-to-play, and a live lab for structured data and local search.

    Open
  • internal

    Site kit + build pipeline

    The SvelteKit-on-Cloudflare template my agency builds client sites on: self-hosted fonts with zero layout shift, schema markup baked in, a lightweight editor-friendly CMS, and an AI-assisted crawl → build → deploy pipeline.

    Why: Every site below was built with it. It’s how a small team ships fast, technically sound sites without a page-builder tax.

How I build

The stack, and why it looks like this.

Fast, accessible, and readable in view-source. I'd rather write the CSS than fight a page builder, and I'd rather ship on the edge than babysit a server.

Front end
SvelteKit, TypeScript, hand-written CSS with fluid type and spacing tokens
Edge
Cloudflare Pages, Workers, KV, D1, R2
Performance
Self-hosted fonts with metric-matched fallbacks, preloads, prerendering, image discipline
SEO
Schema.org JSON-LD, clean heading structure, accessible HTML, redirects mapped from every old URL
Heritage
Years of WordPress: Bricks, Oxygen, Timber/Twig, custom plugins
Tooling
Puppeteer audits for layout shift and overflow, AI-assisted build pipeline, git-based CMS