Tommy Dorgan

Solution architect, independent practice

Chicago, Illinois · thomas.dorgan@gmail.com · LinkedIn


I spent fifteen years in B2B SaaS sales, customer success, and sales engineering. Three months ago I started building on Claude Cowork. This page is the work so far, in order of weight.

Fifteen years watching enterprise software get bought and underutilized leaves a bias for tools the end user actually wants to use, not dashboards for dashboards' sake.

Contents
  1. Headline builds
  2. Other public builds
  3. Background
  4. Practice projects

1. Headline builds

Two builds worth walking through.

1a · the working CRM

Deeze AI Console1

Live · login-gated · deezeai.com/portal/login · demo on request

Internal seller workspace for an independent local-services agency. Login-gated, single operator plus a demo viewer. Indexed dataset inside it: 7,880 prospect businesses across 26 verticals, 2,325 reports generated by the analyzer, 547 prospects flagged with buying signals, 794 distinct ZIP codes. Prospects in the operator's outreach pipeline, not customers of the tool.

Deeze AI Console lead list

Lead list

filtered + scored
login-gated · demo on request
Deeze AI Console prospect overview

Prospect overview

score · rank · essentials
login-gated · demo on request
AI-generated recommendations

Three changes with the biggest impact

AI recs + research citations
scored with deeze_v1
Full feature breakdown

Full breakdown

15 present · 23 missing
click any feature to override
Account & CRM with detected buying signals

Account & CRM

scan history · buying signals
lasallebodyandfender.com · scored Apr 27
Built with the Anthropic SDK

The analyzer's observational layer runs @anthropic-ai/sdk against scraped prospect sites. Lead-note auto-summarization runs Claude Haiku. Real production usage at scale, not a wrapper around a chat box.

Deeze AI Console data flowScraper feeds the @anthropic-ai/sdk observational layer. Output goes to Supabase (Postgres with RLS), surfaced in a Next.js Console UI, and exposed publicly as a tokenized /proposal route. Claude Haiku auto-summarizes long lead notes. scraper cheerio @anthropic-ai/sdk observational layer supabase postgres · RLS console UI next.js · middleware-gated /proposal/[token] shareable, no login claude haiku lead-note auto-summary
What's in it
  • Lead list with sort, filter, and score
  • Single-screen lead detail with site-features grid and zip-code peer comparison
  • URL scraping, site analysis, AI observational layer
  • Tokenized customer-facing proposals served at a public route
  • Lead-as-first-class Supabase schema with RLS
  • Middleware-gated single and demo user auth
Security

Tenant isolation via Supabase RLS. Middleware-gated auth, currently two allowed users (operator + demo viewer). Single-tenant operational model.

next.js · supabase (rls + edge functions) · vercel · @anthropic-ai/sdk · claude haiku · cheerio

1b · the most complex build to date

Vibe Now

In progress · build deployed at vibe-now-opal.vercel.app · not yet customer-facing

Event aggregator for Northern Illinois. Built to be the one place that surfaces everything happening locally, from an arena show at the United Center down to a high school spring concert, a brewery trivia night, or a neighborhood association cookout. Most aggregators only cover one tier; Vibe Now merges them.

What it spans

Five sources, each covering a different layer of local life:

  • Ticketmaster API for arenas, stadiums, and major concert tours.
  • iCal feeds for libraries, parks-and-rec departments, school districts, and community calendars.
  • JSON-LD scraping for venues that publish structured event markup on their own sites: breweries, restaurants, music halls, theaters.
  • Tribe REST for the long tail of WordPress sites running The Events Calendar, the default stack for most small-town press and community orgs.
  • Brave Search API as the catch-all that picks up whatever the other four miss, including farmers markets, festivals, and fundraisers without their own infrastructure.

The point isn't more events; it's that the existing scattered set finally lives in one feed.

What's in the working build

Two surfaces: a Discover tab with mood-pick chips (Tonight, This Weekend, Free & Nearby, Date Night, With Kids, Get Outside, Live Music) and smart rows (Major Events, Coming Up This Week), and a Map View tab with a Leaflet map that filters events to the visible area. IP geolocation pins the visitor to a starting neighborhood; manual zip override is one click away.

Why it's the complex one

Each source has its own schema, auth, and update cadence. The hard parts are normalization (mapping iCal events, schema.org JSON-LD blobs, WordPress posts via the Tribe REST API, Ticketmaster shows, and Brave Search hits into one shape), dedup (the same event surfaces in three sources with slightly different titles, and recurring shows need series collapse), and the visible-area filtering that powers the Map view. Storage is Supabase; front is Lovable.

Vibe Now Discover tab

Discover tab

mood picks + rails
vibe-now-opal.vercel.app
Vibe Now Map View tab

Map View tab

leaflet · viewport-filtered
vibe-now-opal.vercel.app
Vibe Now ingestion pipelineFive sources (iCal feeds, JSON-LD scrape, Tribe REST WordPress, Ticketmaster API, Brave Search API) funnel into a normalize and dedup layer, then a Supabase event store, then a Lovable front, plus a Map View. 5 SOURCES iCal feeds JSON-LD scrape Tribe REST (WordPress) Ticketmaster API Brave Search API ingest + normalize + dedup map disparate schemas collapse cross-source dupes supabase event store lovable front user view + map view discover + map · in progress at vibe-now-opal.vercel.app
Stack
lovable · supabase · custom node ingest · leaflet (map) · ip geolocation · iCal · JSON-LD · tribe rest api · ticketmaster api · brave search api

2. Other public builds

Deployed and reachable, not yet a customer base.

OK Normie home

OK Normie

Deployed · oknormie.app

Mobile-first crypto education app. 9 sections, 38 modules, 564 cards across 11 card types. Supabase auth, Stripe wired in live mode at three tiers ($4.99/mo, $34.99/yr, $99.99 lifetime). End-to-end build; no paying users yet.

oknormie.app
Modern Mainstreet home

Modern Mainstreet

Deployed · modern-mainstreet.com

Sub-brand landing site for professional services across Northern Illinois and the Chicago south suburbs. Lovable + Vercel sidecar deploy. Apex serves, www redirects.

modern-mainstreet.com

3. Background

Now (2025-present)

Founder, Modern Mainstreet. Co-host, Crypto Spaces Network.

Prior (2015-2025)

B2B SaaS sales, customer success, and sales engineering across fleet and logistics. Director level since 2018. Pre-sales lead on a $30M Fortune 500 deal.

Roles: Director of Customer Success & BD, Four Square Group (2024-2025). Director of Strategic Accounts, Titan Cloud Software (2023-2024). Strategic Accounts / Enterprise AE / Sales Engineer, Solera-Omnitracs (2015-2023).

Earlier (2005-2015)

Fleet Engineer, Fortune 500 industrial gas company. Operations Manager, Fortune 500 transportation & logistics.

Education

MBA, University of Arizona Global Campus. BA Finance, St. John's University.

4. Practice projects

Other builds. Each has a flow diagram for the shape at a glance.

Milton

Paused

A locally-hosted OpenClaw instance, configured to run as its own macOS user (/Users/Milton) for isolation. OpenClaw is a local AI orchestration runtime that listens across messaging channels, loads modular skills (browser, files, MCP servers), and acts as the operator via a SOUL.md personality config. Milton holds the voice rules, project context, and tool permissions. Currently paused for a SOUL and channel-set redesign.

Milton OpenClaw runtime flowMulti-channel inbox routes into the OpenClaw runtime (memory, skill loader, MCP bridge, cron, Lobster workflows). SOUL.md plus Claude composes the response. Skills and tools (browser, canvas, files, shell, MCP servers) execute the reply or action. channel inbox slack · iMessage telegram · sms + 16 more openclaw runtime memory · skill loader MCP bridge · cron lobster workflows SOUL.md + claude milton's voice prompt = SOUL + incoming context skills + tools browser · canvas files · shell MCP servers reply or action

Rainman

Paused · news mode only

Jupiter Perpetuals trading bot on Solana. Claude Haiku scores five confluence categories from market, derivatives, sentiment, and macro feeds before opening a position. Currently pushes signals to Telegram; on-chain execution paused.

Rainman trading bot flowMarket data feeds (Jupiter, Binance, Coinglass, sentiment, macro) feed Claude Haiku, which scores five confluence categories. Output goes to Telegram signals in news mode; on-chain execution is currently paused. market data feeds jupiter · binance · coinglass fear/greed · btc dominance macro layer claude haiku 5 confluence categories telegram signals news mode · paused on-chain execution (paused)

Cowork Skills

Scheduled

Custom Claude skills written as markdown. csn-linkedin-posts drafts crypto LinkedIn posts under a strict voice card. csn-article-writer and upwork-plus-cancel-check built.

Cowork Skills daily runA cron trigger at 5:02 AM CT kicks a news scrape (web search API). Output runs through a voice card plus Claude, which produces daily drafts ready for review. cron trigger daily · 5:02 am CT news scrape web search api voice card + claude enforces brand voice daily drafts ready for review

Sample Sites · 8

Demos · live at *.deezeai.com

Eight demo sites across four verticals (HVAC, plumbing, auto repair, landscape), each a deliberately distinct design direction. All consultant-pass clean.

Agency sample sites build flowEach sample site starts as a Lovable build with a distinct design direction, passes a consultant copy + design QA, has hero and gallery imagery generated via nano banana MCP, and ships at a subdomain under deezeai.com. lovable build distinct direction consultant-pass copy + design QA nano banana MCP hero + gallery *.deezeai.com subdomain · live
Cardinal Heating sample site

Cardinal Heating

HVAC
cardinal.deezeai.com
Shift Heating sample site

Shift Heating

HVAC
shift.deezeai.com
Cavallo's Service sample site

Cavallo's Service

Auto
cavallos.deezeai.com
Buckley Brothers sample site

Buckley Brothers

Plumbing
buckley.deezeai.com
Mokena Plumbing sample site

Mokena Plumbing

Plumbing
mokena.deezeai.com
O'Malley's Auto sample site

O'Malley's Auto

Auto
omalleys.deezeai.com
Simmons Landscape sample site

Simmons Landscape

Landscape
simmons.deezeai.com
Hickory Creek sample site

Hickory Creek

Landscape
hickory.deezeai.com

Mission Control

Paused

Next.js + Convex dashboard to watch every other project in one place. Pulls state from Rainman, calendars, pipelines, memory, and renders the whole picture on one screen.

Mission Control dashboard flowProject state feeds (Rainman state, calendar, pipelines, memory, team) sync via Convex into a Next.js single-screen dashboard. project state feeds rainman state calendar pipelines memory team convex sync live state replication next.js dashboard single-screen overview

Sitekit

On laptop · not deployed

Live-preview tool for the agency. Paste a prospect's URL, scrape their branding and copy, take a screenshot via Microlink, render the prospect's business in three different template designs with their real data baked in.

Sitekit prospect-preview flowPaste a prospect URL. Cheerio scrapes branding and copy. Microlink captures a screenshot. The prospect data renders in three template designs side by side. paste URL prospect site cheerio scrape branding + copy microlink shot screenshot api 3 templates render w/ their data preview side-by-side
1 Console is single-user-gated on production; demo credentials available on request for review.
Last updated 2026-05-18