← Back to the dashboard

Plan: 90-day targets (Definition of done item 8)

Status: 2026-10-24. Storage and display are built and tested (20 tests in db/tests/run-targets.mjs). The three definitions were decided on 2026-10-24 (section 4). No target number is set yet: those come after the baseline weeks. Made for gap 6 of gaps-2026-10-24.md.

Source: Definition of done item 8 in spec.md, from Screenshot 2026-10-21 at 6.21.13 PM.png: "Numeric targets set: A 90-day target for organic clicks and AI share of voice, measured against the baseline."

1. The deliverable

  1. A place to keep each site's targets, with their history: db/config/targets-<site>.json, tracked in git like the other inputs (data rules §6).
  2. Code that measures each baseline from the stored results and says where each target stands: db/targets.mjs.
  3. The dashboard (6.2) shows a "90-day targets" panel, and the digest (6.3) a "90-day targets" block, each saying what's set or what it waits on.

How we know it works: the tests work each answer out by hand from small made-up weeks (section 6).

2. How the baseline is measured

MeasureDataBaseline
Organic clicksSearch Console clicks (2.1), full Sunday-to-Saturday weeks, Pacific timeClicks in the first N full weeks ÷ N. Example from the tests: 70, 140, 70, 140 clicks over 4 weeks = 105 a week
AI share of voice4.4's share of mentions (the user's ruling of 2026-10-23), weekly AI runsOur mentions ÷ all tracked brands' mentions, summed over the first N weeks. Never an average of weekly percents: 1 of 2 and 3 of 18 pool to 4 of 20 = 20%, while averaging 50% and 17% would say 33%

N is the baseline length, the first definition in section 4. "The first N weeks" means the first N full weeks of data the site has, so a site added later gets its own baseline.

3. Where targets are stored and shown

4. The definition question (decided 2026-10-24)

Decided: you said "Use your picks for the 90-day targets: a 4-week baseline, one pooled share-of-voice target, and Search Console clicks for organic clicks." They're in db/config/targets-blueforest.json. The options as they were put to you:

  1. How many weeks the baseline covers: 2 or 4? Data rules §5 says "Weeks 1 and 2 of the proof run are the baseline", while the share-of-voice card says the noise band "comes from the four baseline weeks", and the normal range needs at least 4 earlier weeks (MIN_WEEKS in db/noise-band.mjs). With 2, you can set targets two weeks sooner. With 4, the baseline is steadier: at 30 prompts a week, one week holds only a few dozen brand mentions per engine, so a 2-week share of voice can swing by 10 points or more on chance alone (data rules §3's worked example puts the plausible range for 18 of 90 at 10% to 37%).
  2. Share of voice: one target, or one per engine? One pooled target over all five engines is steadier (five times the mentions). Five targets match 4.4's "per engine" and the spec's sample panel (ChatGPT 34%, Claude 28%, Perplexity 41%, Gemini 19%, AI Overviews 22%), but each rests on a fifth of the data.
  3. "Organic clicks": Search Console clicks or GA4 visits? Search Console counts clicks from Google search results, which is the word the spec uses, and is built (2.1). GA4 counts visits from all search engines, and isn't built (2.3). Proposed: Search Console.

5. Interpretation calls (mechanical, listed)

  1. A target's 90 days start on set_on, the day it's set, not the day the baseline ends.
  2. "Now" is the newest full week after the baseline, shown beside the target as a plain number. It isn't yet judged against chance; the search and AI panels already do that week to week.
  3. The baseline is clicks per week averaged over its weeks (total ÷ weeks); a week Search Console revises is re-read each time, since only settled ("final") data is stored.

6. Tests

db/tests/run-targets.mjs, 20 tests: the real file holds your three choices and no numbers, and its targets wait on data; missing definitions are named; a value outside the choices is refused; no data says why; 3 of 4 weeks is "measuring"; the 4-week and 2-week baselines; a set target's due date and days left; the GA4 choice says 2.3 isn't built; share of voice pools counts; a mismatch between "per engine" and the file is named; the dashboard panel and digest block show it.

7. Budget

$0. It reads stored results.

8. Next steps

  1. ~~You answer section 4.~~ Done 2026-10-24.
  2. After the baseline weeks (which wait on the Google sign-in and the AI keys), you set the two numbers; Claude adds them with the date.