Main to-do list
Structured by week: this week, next week, then later, with finished work in Completed at the bottom. Tasks and ticks are saved on the server, so this list reads the same on your phone and your laptop. Unfinished items roll into next week on their own. claude items happen when you say go; you means it is genuinely yours.
Pavan's two '25' companies on one page: Virtue25, the media studio, and Optimize25, the AI company that builds agent systems for owner-operated local businesses. True Figure, the bookkeeping service, sits inside Optimize25 and is paused. Pick a business at the top to narrow the sidebar and this page.
Media studio
- Web analytics needs Google access
AI agent systems
- CozyInkz (Vik), client #1 ·
- Squints Optical, prospect ·
- The Painting Plastering Specialist (Ramzy), client ·
- Website preview only
Bookkeeping (paused)
- Site live at truefigure.ca
- Wave 2 240 sent, 0 meetings
- Prospects on file 896
Virtue25 Productions, the media studio. virtue25.com runs the OG2 design (live since Sep 29) as the Cloudflare Worker virtue25; the site source is virtue-twenty-five/ in this repo.
Google Analytics and Search Console for virtue25.com, baked at deploy like True Figure's numbers and shown only after unlock.
Needs Google access. virtue25.com has no Google Analytics tag and no Search Console property yet. They go in the True Figure Google account for now, so the same login reads both sites. Once Pavan has done the steps below, the numbers show here on the next deploy.
- Google Analytics: signed in as the True Figure Google account, create a GA4 property and web stream for https://virtue25.com and send us its measurement ID (G-...) and property ID (the number). The tag then goes on the site in a normal pull request.
- Search Console: add virtue25.com as a Domain property and verify it with the DNS TXT record Google gives (the virtue25.com zone is on Cloudflare).
- First pull: the True Figure login files aren't on the agent's machine, so Pavan decides where the first pull runs.
Top search queries Search Console
| Query | Clicks | Impr. | Pos. |
|---|
Pages Google surfaces Search Console
| Page | Clicks | Impr. |
|---|
Top pages by views GA
| Page | Views |
|---|
Where sessions come from GA channels
Optimize25 client builds (optimize25/clients/). Previews are public links, safe to show a client. The open to-dos are the top of each client's TODO file, baked at deploy by tools/bake_clients.py.
CozyInkz (Vik)
- Loads after unlock.
Squints Optical
- Loads after unlock.
The Painting Plastering Specialist (Ramzy)
- Loads after unlock.
The Optimize25 website: generic "AI solutions for every kind of business", six pages, source in optimize25/site-src/. Preview only; it is not on a domain yet.
The whole funnel in one view. The pipeline reads every list in the sidebar; the scoreboard is a self-saving weekly log; web numbers come from Google Analytics and Search Console (links below), copied into the log each week.
Weekly scoreboard
Log the sales inputs and the web totals once a week. Pipeline is the leading indicator; revenue lags it.
| Week of | Touches | Replies | Reviews | Closes | Web sessions | Web leads | Notes |
|---|
Web analytics and search
Everything measuring truefigure.ca, wired and verified Jul 7, 2026. Connect once and the real numbers from Google Analytics and Search Console load straight into this page; the latest snapshot stays cached on this device.
Top search queries Search Console · 28d
| Query | Clicks | Impr. | Pos. |
|---|
Top pages by views GA · 28d
| Page | Views |
|---|
Pages Google surfaces Search Console · 28d
| Page | Clicks | Impr. |
|---|
Where sessions come from GA channels · 28d
Stack status
Verified end to end on Jul 7. Headless-browser test: the tag injects, hits reach Google carrying G-1FQLQJ3FFG, and Google accepts them (HTTP 204). If Realtime shows 0, that is your ad blocker or a brand-new property still warming up, not the site. Standard reports fill in 24 to 48 hours.
Every event we track
Fired by the site's shared app.js on truefigure.ca. These names are exactly what you will see in GA reports.
| Event | Fires when | Why it matters |
|---|---|---|
| generate_lead money event | A click on any email link, "email to book your review" | The lead itself. Star it as a key event and judge every page and channel by it |
| book_review_click | A click through to the contact / booking page | Intent, one step earlier in the funnel |
| phone_click | A tap on the phone number | The mobile lead path |
| email_copy | The copy-email button | Leads who copy the address instead of clicking |
| calculator_use | First interaction with the HST Quick Method calculator | Engaged visitor; the tool is the content magnet |
| page_view, scroll, outbound | Automatic, GA enhanced measurement | Sessions, top pages, traffic sources: the base layer |
Measurement to-dos
The last clicks to finish the stack. These save on this device, separate from the 33-step launch plan.
Wave 2, live: 240 emails Aug 10 to Sep 3, Mon to Thu, sent by the cloud scheduler. Everything on this page bakes from the campaign plan at deploy.
Sends per day
solid = sent · outline = scheduled · hover for detail
Cumulative progress
bold = actually sent · faint = the full plan
Vertical mix by week
| Template | Vertical | Pool | Sends |
|---|
Upcoming send days
Every human who has ever written back, newest first, with what happened next. Reply same day; the playbook lives on the Reply kit page.
Never email these addresses again. campaign.py enforces this file automatically on every build; check it by hand before any manual send.
| Address | Business | Category | Note |
|---|
Canned responses for the two most likely replies, and the command that builds a personalized one-pager + full-width draft. Click to copy.
What a client signs and what happens next. Rewritten Sep 21 for any business rather than restaurants only, on the current plans, with the dashboard and the closed-by-the-10th promise in the letter. Baked from the repo at deploy time; re-run outreach/bake_client_kit.py after editing.
Search Console, standalone: what Google shows you for, and where you rank. Positions 1 to 10 are page one; that is the whole game.
| Query | Clicks | Impr. | Pos. |
|---|
Position mix
| Page | Clicks | Impr. |
|---|
One pipeline for the London walk-ins. Website and bookkeeping sit on the same record on purpose, because a walk-in is one visit with two things to sell and the relationship history should not be split. Saved in Cloudflare D1, so your phone and laptop show the same thing.
Business expenses for the two businesses, Virtue25 and Optimize25 (True Figure's costs count under Optimize25), in CAD. Saved in Cloudflare D1 behind the PIN. "Owed to Pavan" is everything he paid personally that has not been marked repaid.
| Date | Business | Vendor | Description | Amount | Tax | Paid by | Receipt |
|---|
Wave 1 complete: all 86 emails sent Jul 2 to 21 (6 bounces, 3 declines, 0 meetings; touch-2 follow-up still open). Real Gmail sends sync in automatically and rows you set by hand always win.
| Business | Area | Owner | Status | Notes |
|---|
Toronto new-business pipeline from the Aug 4, 2026 email sweep: 777 signals, 411 unique new 2026 businesses; the 173 workable ones are below (25 with a published CASL-eligible email ★ incl. source proof in outreach/toronto-new-businesses.md, 133 pre-open for walk-in/DM, 9 opened with an Instagram channel, 6 to verify). The other ~240 opened-2026 rows with no public contact stay in the .md archive; the raw city-data universe (DineSafe first-inspections, licences, permits) is in outreach/toronto-universe/. Check suppression-list.md before any send.
| Business | Type | Where | Stage | Contact | Status | Notes |
|---|
Tier 2 volume pool from the Aug 5, 2026 batch harvest (40 agents, 7 verticals x neighbourhoods): 533 net-new CASL-emailable EXISTING Toronto businesses, each email verified on the business's own page with the source URL kept as consent proof in outreach/toronto-emailable-existing.md. Deduped against wave 1 and the Toronto-new tab. Sequences A (food), B (fitness) and C (clinics) already exist; beauty, retail, trades and pro services still need templates written. 6 rows are flagged no MX and must not be sent. Check suppression-list.md before any send.
| Business | Segment | Area | Vertical | Contact | Status | Notes |
|---|
London ON expansion pipeline from the 71-agent lead-engine sweep (Jul 13, 2026): 121 new or upcoming businesses found; the 85 actionable ones are below. Chains/corporate, the not-actually-new rows, coverage gaps and the re-run recipe live in outreach/london-new-businesses.md (+ .json). ★ = conspicuously published email (CASL-eligible; log the source URL before sending). Pre-open spots have no incumbent bookkeeper: walk-in and DM convert best.
| Business | Type | Where | Stage | Contact | Status | Notes |
|---|