← Build journal
| Build Plan v4 · 15 Aug 2026
Last session completed
S24
Current stage
4 · Infrastructure move3 of 3 sessions still to run
S2511030Next upGOOGLE WORKSPACE MIGRATION — move every client system off the personal Google account onto the Workspace tenant. Runbook EyeQ_Google_Workspace_Migration_Runbook_v1.md, executed in order: snapshot row counts → deactivate 6339708, 6339716, 6709006 → transfer Drive/Sheets ownership at folder level (verify file IDs and link-sharing survive on the FIRST file before continuing) → re-authorise Make connections 8390284 and 8390409 in place → verify in risk order → close out. Wednesday by design; never a Friday.
Soft launch · S135, 111 sessions awayFull launch · S206, 182 sessions awayForecast · soft launch late Jul 2027 at 2.7 sessions a week (measured) — a read-out, not a commitmentPlan v4 · 15 Aug 2026
205
Working sessions
2,330
Estimate-hours
S135
Soft launch · end of stage 18
S206
Full launch · end of stage 25
+83
vs v1

Progress

37.89%
TO SOFT LAUNCH72 of 190 milestones · ends at S135 · 111 sessions away
27.59%
TO FULL LAUNCH72 of 261 milestones · ends at S206 · 182 sessions away
Show Gantt chart
Done Foundation R&D / test Prep / spec Build (Wix + modules) Launch
S25 S50 S75 S100 S125 S150 S175 S200
Done — PLAN stages since the pivot (18 Jul 2026), sized by milestones
PLAN 1 2 entries → Pivot — AI-first model lockedSix CROSS modules · category as filter · one product one price · Approval Dashboard scoped · 15-min guarantee
PLAN 1 · 100%
5/5
PLAN 2 Client-site delivery infrastructurestudio-clients monorepo · GitHub Actions wrangler@3 · Cloudflare token · deploy proven · first test slug
PLAN 2 · 100%
5/5
PLAN 3 3 entries → R&D framework — form, hub, registryweb-rnd-test · web-rnd-review · tests.json registry · same-origin localStorage
PLAN 3 · 100%
4/4
PLAN 4 3 entries → Voice R&D — Test Bed 3 openedVendor ElevenLabs Scribe v2 · lab form · MUSTA field arm live · retention decision · Chirp control (pending) · WER scoring (pending)
PLAN 4 · 67%
4/6
PLAN 5 10 entries → VAT R&D — Test Bed 2, sales sideCorpus + answer key · extraction schema · scenarios A/B/runner/readers · 60-col results sheet · money 23/23 · Z-reading capture rules
PLAN 5 · 100%
6/6
PLAN 6 2 entries → Pricing V2 locked€1,250 setup · CROSS-1+2 included · per-module prices · prepaid top-ups · accountant handoff · no free trial · stage-on-depth rule · Malta SMS rate closed
PLAN 6 · 100%
8/8
PLAN 7 Plan v2 built (188 sessions)v1 gaps identified · voice R&D moved earlier · four-module R&D added · image testing · UX shell · feedback + quality · 188 sessions · launch dates
PLAN 7 · 100%
8/8
PLAN 8 1 entry → DigiScore V2 metal ladder lockedTwo-object design · Bronze→Diamond ladder · graduation thresholds · voice branch non-scored · task rewritten · build (pending)
PLAN 8 · 83%
5/6
PLAN 9 3 entries → api.eyeq.studio + rules layer LIVEPages Function deployed · pipeline.sh fixed · vat-rules-v1.js at sites/api/lib · POST /vat/rules/v1 · scenario 6762417 wired · Welbee's proof · Ela's run 1 (6/11, money 6/6) · observability designed
PLAN 9 · 100%
8/8
Ahead — build stages, sized by sessions, S2 to S206
0 Clear the decks
S0 · 100%
2/2
1 The data store
S1 · 33%
2/6
2 CROSS-1 R&D
S2 · 100%
8/8
3 Foundations
S3 · 100%
7/7
4 Infrastructure move
S4 · 0%
0/3
5 Foundations
S5 · 0%
0/7
6 Voice R&D
S6 · 0%
0/6
7 Conversational UX/UI shell
S7 · 0%
0/9
8 AI Approval Dashboard
S8 · 0%
0/9
9 R&D for the four untested modules
S9 · 0%
0/19
10 Site generation prompt v3
S10 · 0%
0/5
11 DigiScore rebuild
S11 · 0%
0/6
12 Build spec per module
S12 · 0%
0/2
13 Wix editor — the product path
S13 · 0%
0/13
14 Compliance
S14 · 0%
0/1
15 Soft-launch modules
S15 · 0%
0/14
16 Quality test
S16 · 0%
0/8
17 Mon's ops console
S17 · 0%
0/4
18 SOFT LAUNCH
S18 · 0%
0/5
19 Feedback stage. The soft launch is a learning stage, not a release
S19 · 0%
0/5
20 Wix editor — the shopfront
S20 · 0%
0/20
21 Messaging channel and offers pages
S21 · 0%
0/5
22 Build spec
S22 · 0%
0/3
23 Paid modules
S23 · 0%
0/24
24 Quality test
S24 · 0%
0/8
25 FULL LAUNCH
S25 · 0%
0/6
PIVOT · 18 Jul 26
Now · S24
Soft launch · S135 · 37.89%
Full launch · S206 · 27.59%

Build plan — by stage

Who does the work Claude Both of us Mon A decision, not a task The traffic light and the % bar show progress — these colours never do.
0Clear the decksS2–S3 · 2 sessions100%Journal · 3 entries →

Close out VAT R&D observability from test bed 2, then settle the two things every later stage rests on: where data lives, and a build plan that stays true on its own.

253786MixedCreate ExtractionDiagnostics Wix collection (5 min hand-job) → deploy diagnostic route to api.eyeq.studio/diagnostic/anthropic-response/v1 → wire into scenario 6762417 as module 12 between Anthropic and ParseJSON → verify on one failed Ela row ✓journal →
323884MixedLock the data architecture: managed Postgres, EU region, one door at api.eyeq.studio, tenant isolation enforced by the database, append-only event log, images outside the database → re-cut the build plan to v4 and make the page generate itself in CI ✓—
1The data store — one system of record NEWDEFERREDS4–S9 · 6 sessions33%

Build the system of record every module writes to: managed Postgres in an EU region, reached only through api.eyeq.studio. Five decisions here are expensive to reverse and nearly free now — Postgres, one door, database-enforced tenant isolation, an append-only event log, and images held outside the database. ⚠ STAGE DEFERRED 16 Aug 2026 (Mon) — the design is locked (master record §3.2, only piece 4d open) but nothing is provisioned, because renting a database starts a monthly bill at zero clients and the account must sit on a business address, not a personal mailbox. Resumes after the Google Workspace migration (stage 4). Stage 2 (CROSS-1) runs first. ⚠ The stages have NOT been renumbered — the physical re-order is a separate task, so read the deferral, not the position.

490407DecisionDECIDE THE HOST. Verify against live docs — managed Postgres pricing, which EU regions are actually live, current Cloudflare Hyperdrive support. All three are currently unverified. Boring institutional option preferred over developer convenience. ✓—
568744MixedSCHEMA DESIGN LOCKED before anything is provisioned: tenant isolation enforced by the database, an append-only history rule, six shared tables named after the question they answer plus a small private set per module, and the object-store rules — Cloudflare R2 with the EU jurisdiction flag, an opaque key we mint rather than a URL, short-lived signed links served from api.eyeq.studio at a configurable 15-minute default, and delete-plus-tombstone as one action. Full text in master record §3.2. Only piece 4d, what else besides images lives in object storage, is still open. ✓—
638212ClaudeSchema v1 — clients, runs, documents, extractions, events. Tenant isolation enforced BY THE DATABASE, not by application code: every record carries its client and a query cannot cross that line—
788408ClaudeAppend-only event log. Prove the test: “what did the system say about this receipt on 14 March” must be answerable from the store alone—
876553ClaudeObject storage for captured images; the database holds pointers only; wire capture to write there—
997373ClaudeMigrate the temporary ExtractionDiagnostics Wix collection into the store and retire it. Wix keeps only what Wix is good at.—
2CROSS-1 R&D — finish what is in flightS10–S17 · 8 sessions100%

Finish CROSS-1 R&D: the date fix, the run-record door, identity from the account, then the full corpus and a build spec. Moved ahead of the foundations because it is already in flight, has a live test bed and a real client corpus, and its findings have already changed the architecture once.

1049969Claude✅ CLOSED 18 Aug 2026 — the PROMPT half is live in module 4 of scenario 6762417 (FISCAL_CONFIG and PERIOD_RANGE added, TRANSACTION tightened to dates tied to the trade on the document), shipped in the same blueprint replace as the Fix 2 error handlers on modules 11 and 9. Run h1 fired all ten live Ela documents on the live configuration — v2 prompt, adaptive thinking, the 09:07 taxonomy — rows 203-212, and was scored into records/rnd-vat-corpus/scoring.md. THE GATE SHUT THERE: h1 was not clean, and r6 had already measured that preferring a surviving TRANSACTION date over a PRINT stamp in vat-rules-v1.js would be wrong on every sampled document. The RULES half is blocked on measurement, not skipped for time — do not re-list it as an unstarted task. ✓—
1196763ClaudeBuild PDF-to-image conversion step in scenario A; verify on the Anthropic invoice ✓—
1290125ClaudeWrite extraction prompt v2 with the 5 date rules. ⛔ CARRIED IN 2026-08-19 (Mon) - DO NOT WRITE THE PROMPT WITHOUT ANSWERING THIS FIRST: can the extraction schema express REVERSE CHARGE at all, or does it collapse to a zero rate? Anthropic receipt 2007-3698-2504 (1 May 2026, EUR 180.00, Anthropic PBC US to MT VAT MT19796030) shows tax 0% with the footnote 'Tax to be paid on reverse charge basis'. That is NOT exempt and NOT zero-rated - the Maltese recipient self-accounts, declaring it as BOTH output and input tax. If CROSS-1 reads the 0% as no VAT, the record is wrong in a way an accountant will catch. Cross-border services from a non-EU supplier to a VAT-registered Maltese business is a COMMON case, not an edge one. Never checked. Full write-up in records/pending/2026-08-18-corpus-candidates.md item 1; the receipt is also still unfiled into records/rnd-vat-corpus/documents.md. Note that S13 74551 and S14 55414 already plan to RUN a reverse-charge corpus batch - so if the schema cannot express it, those two sessions are measuring against a gap the prompt never closed. ✓—
1374551ClaudeRun the new corpus batch: twins, reverse charge, non-euro, foreign language — part 1 of 2 ⭐ ALL SIX DOCUMENTS HAVE ALREADY FIRED — DO NOT RE-FIRE THEM. a1, a2, b, c and d ran 19 Aug 2026; e ran 20 Aug 2026 as vat-online-e-01-r3, results row 244, status extracted. What is STILL OUTSTANDING and is the whole of this session: the v4 RE-SCORE. Extraction prompt v4 went live in module 4 of scenario 6762417 on 19 Aug 2026, so every score taken before that date predates the prompt now running. Expect vat_method to come back EMPTY on documents that used to answer confidently — that is the reader being honest under the new ordering rule, NOT a regression. Scores go ONLY in records/rnd-vat-corpus/scoring.md. ⛔ Row 243 vat-imgfix-01 is a DIAGNOSTIC and must be excluded from every denominator — its category and vat_liable labels are wrong. ⚠️ A day/month date flip was PROVEN on document e (reader said 8 September 2026, receipt says 9 August 2026); it is recorded in records/rnd-vat/scenario-a-to-b-handoff.md and is NOT part of this session. ✓—
1455414ClaudeRun the new corpus batch: twins, reverse charge, non-euro, foreign language — part 2 of 2 ✓—
1591289ClaudeDraft the 5-field spine prompt; write the first merchant pack — part 1 of 2 ✓—
1640594ClaudeDraft the 5-field spine prompt; write the first merchant pack — part 2 of 2 ✓—
1783592ClaudeMerchant-layer cheat sheet — per-merchant learned facts ✓—
3Foundations — design systemS18–S24 · 7 sessions100%

Build the visual design system that every client website inherits. Generate proof-of-concept directions, rate them against the quality bar, and lock the design language.

1820125Mixed✅ LANDED 21 Aug 2026 — F&B research, done in place of S18 46217, which did not land. Everything below is measured, and written up in records/rnd-web/archetypes-and-capture.md. (1) COLOUR CANNOT DIFFERENTIATE A CAFÉ. Of the 39 rows of the web-creation-1 capture form, 9 of 9 café submissions extracted an orange/terracotta family colour, against 6 of 13 retail and 3 of 6 trades — so the extractor is honest and the warmth is a fact about cafés, not an artefact. Terracotta is a BANNED DEFAULT, so a palette taken from a café's own photos lands on the banned colour every time. Distinctiveness must be spent on typography, layout structure and the signature element. NEVER on hue. Not tested for retail, beauty or trades — do not generalise it to them. (2) FIVE F&B ARCHETYPES, measured against 61 real Maltese businesses read from Google Places (39 ordinary localities, 22 tourist strip): multi-mode day→evening 22, early+lunch snack bar 15, day café 14, counter/takeaway 6, evening-only bar 4. Nothing unclassified. The strongest discriminator is WHO WALKS IN, not what is sold — 19 of 39 ordinary-locality businesses open by 6:30am against 2 of 22 on the tourist strip. (3) FIVE CAPTURE QUESTIONS drafted and approved in principle — transaction model, dwell, shape of the day, the hero, the crowd — re-wordable across all twelve categories. ⚠️ NOT YET BUILT into the form. Also locked by Mon this session: the BESPOKE RULE (a sub-category sets the STARTING POINT, never the finish; two sites from one sub-category that a stranger cannot tell apart is a FAILED build), and NEVER ROUTE ON A PLATFORM'S OWN CATEGORY LABEL (Google types three businesses all trading 5am–3pm as cafe, restaurant and manufacturer) — the same lesson CROSS-1 learned about doc_type. ⛔ The 154 photographs attached to those 39 rows are EARMARKED for S25 68135. Do not analyse them before then; it would mean doing the work twice. OPEN, needs Mon: renaming the category "Café / Restaurant" to "Food & Beverage" touches master record §8's one-font-per-category lock and has NOT been decided. ✓—
1946217MixedDesign system POC — generate 3 café directions for a REAL Maltese café that NOBODY in the project has studied. ⛔ MUSTA IS RETIRED AS THE TEST SUBJECT (Mon, 21 Aug 2026): we hold ~87 KB of locked MUSTA brand — palette, typefaces, canonical photography, voice — and a real client arrives with a filled-in survey and a few phone photos, so testing on MUSTA would measure whether Claude can design from a complete brand book, which will never happen. That is a RIG, and rigs are banned. Two conditions or the switch is pointless: STARVE THE INPUT — survey answers plus a handful of photos and nothing else; reading the café's Facebook or Instagram before designing rebuilds the rig. PICK IT BLIND — choose before knowing anything about it, and log what was known at the moment of choosing. Judge the output against the café's real online presence at REVIEW TIME ONLY, never before. Read records/rnd-web/archetypes-and-capture.md PART E and PART B first: the five archetypes and the colour finding both constrain what the three directions may differ on. ✓—
2042765MixedRate all 3 against the quality bar; log what failed ✓—
2190369Mixed✅ LANDED 22 Aug 2026 — the measurement was wrong, and fixing it changed which direction is weakest. Inserted because S21 91418 ran but did NOT regenerate anything; this is what it actually did. Written up in records/rnd-web/ratings.md. (1) TWO FAULTS IN THE AUDIT, NOT THE DESIGN. The CTA detector read s.querySelectorAll('a'), which returns DESCENDANTS ONLY, so counter's four .t go c2 browsing tiles — which ARE anchors — scored zero; and CTA_EXEMPT_CLASSES was one hardcoded set, excusing the facts and numbers blocks on courtyard and terrace but COUNTING them on counter, where the same roles are .t.dark and .t.num-t. Six of counter's seventeen home units were marked down for a rhythm they cannot structurally carry. ⛔ The S21 brief called counter's missing links "REAL, NOT A DETECTOR ARTEFACT". It was a detector artefact. DO NOT RE-OPEN COUNTER. (2) COURTYARD IS THE WEAKEST DIRECTION. Home pages, criteria 3 / 4 after both fixes: courtyard 60% / 40%, terrace 83% / 67%, counter 73% / 73%. Across all non-contact pages courtyard 38% / 31%, counter 48% / 48%, terrace 77% / 69%. Criteria 1, 2, 5, 6, 7, 8 and 9 pass on all three. (3) COURTYARD'S JUMP-SCROLL DEFECT IS FIXED and was worse than S20 recorded: landing at the bottom left EVERY revealing element hidden on three of four pages, not six on one. Reproduced first, then fixed, then re-tested to 0 in both cases with reduced-motion, mid-page landing and console all clean. Three files pushed, each proved by a returned blob sha equal to a fingerprint computed locally on the tested file: tools/theme_counter.py 57e4280f, tools/audit_quality.py 378a30ef, tools/theme_courtyard.py 7c99cd5a. ⚠️ OPEN, needs Mon: audit_quality.py's "permanently-hidden elements" line is NOT a defect count — it read 8 for courtyard both before and after a fix proven to work, because it measures at load at the top of the page. Never quote it as evidence. Also open: whether picture tiles should be excused from criteria 3 and 4 (currently counted, consistently; does not change the ranking). ⛔ THE METHOD LESSON: every fault found in S20 and S21 was in the MEASUREMENT. Read the theme source before believing a bad score, and check that a number MOVES when you break what it watches before treating it as evidence. ✓—
2291418MixedRegenerate the weakest direction with fixes ✓—
2323627MixedSecond rating pass — GO / NO-GO on the design system ✓—
2458204MixedContent model — sections declare their ROLE, and the role says what parts it must carry. Replaces the named-field stopgap taken in S22 (say_eyebrow / say_cta / say_to, entry_grid.eyebrow / heading). Role-based, NOT a blanket section_cta on everything — a statement band, a browsing grid and a photo wall have different jobs, which is exactly what the 2026-08-22 picture-unit exemption established. Lets audit_quality.py read the declaration instead of guessing selectors per direction, which is the bug class behind every S20 and S21 fault. Touches all three directions and the capture form; data-store-schema.md's two pending fields land first. ✓—
4Infrastructure move — Google Workspace and email domains NEWS25–S27 · 3 sessions0%

Move every client system — sheets, Drive folders, receipt corpus — off the personal Google account onto Google Workspace Business Starter, then move email onto the same tenant. Shared-Drive method only: file IDs, URLs and version history all survive, so every hardcoded Sheet and Drive ID in Make stays valid. Runbook-driven, Wednesday by design.

2511030ManualGOOGLE WORKSPACE MIGRATION — move every client system off the personal Google account onto the Workspace tenant. Runbook EyeQ_Google_Workspace_Migration_Runbook_v1.md, executed in order: snapshot row counts → deactivate 6339708, 6339716, 6709006 → transfer Drive/Sheets ownership at folder level (verify file IDs and link-sharing survive on the FIRST file before continuing) → re-authorise Make connections 8390284 and 8390409 in place → verify in risk order → close out. Wednesday by design; never a Friday.—
2644970ManualEMAIL DOMAINS AND ALIASES — move mail to Google Workspace alongside the files, not Microsoft. Add eyeq.group, eyeq.fun, eyeq.consulting and eyeq.studio to the Workspace tenant, set MX/SPF/DKIM/DMARC per domain, then aliases. Supersedes the v3 Microsoft-alias plan (Mon, 14 Aug 2026).—
2739944Mixed⚠ DEFERRED 16 Aug 2026 (Mon) — not started until after the Google Workspace migration earlier in this stage and a business-owned Scaleway account exists, so no hosting cost is incurred at zero clients. THEN: provision the instance in an EU region; secrets and connection handling; health check through api.eyeq.studio; nothing else may reach it—
5Foundations — images and deployS28–S34 · 7 sessions0%

Test the website image pipeline on 20 real SME photographs. Build the photo validity gate, the no-photo-first render, and the invalid-photo fallback. Deploy and verify end to end.

2868135MixedIMAGE TEST — 20 real SME photos through hue-family palette extraction; score — part 1 of 2—
2924580MixedIMAGE TEST — 20 real SME photos through hue-family palette extraction; score — part 2 of 2—
3023113ClaudeIMAGE TEST — build and test the photo validity gate (watermark, OCR, triangulation) — part 1 of 2—
3131965ClaudeIMAGE TEST — build and test the photo validity gate (watermark, OCR, triangulation) — part 2 of 2—
3266430MixedIMAGE TEST — no-photo-first render at 390px and 1280px; must look intentional—
3337303MixedIMAGE TEST — invalid-photo fallback: derive palette from words, verify—
3489028ClaudeRewrite deploy.yml for all sites/*/ folders; 2 hardening fixes; deploy 2 test slugs—
6Voice R&D — MOVED EARLIER (every module is voice-driven)S35–S40 · 6 sessions0%

Prove the Maltese voice-to-text layer works before building any module on top of it. ElevenLabs Scribe v2 against real field recordings, WER scoring, Chirp control run.

3571254ClaudeVoice Stage 1 — score the corpus, lock the vendor — part 1 of 2—
3694335ClaudeVoice Stage 1 — score the corpus, lock the vendor — part 2 of 2—
3737876ClaudeVoice Stage 2 — understanding: intent from Maltese-English code-switch — part 1 of 2—
3890359ClaudeVoice Stage 2 — understanding: intent from Maltese-English code-switch — part 2 of 2—
3964140ClaudeVoice Stage 3 — learning loop + storage decision (shared with VAT stage 3) — part 1 of 2—
4072121ClaudeVoice Stage 3 — learning loop + storage decision (shared with VAT stage 3) — part 2 of 2—
7Conversational UX/UI shell — built ONCE, used by all five modulesS41–S49 · 9 sessions0%

Build the shared conversational shell that every module sits on — conversation pattern, voice input component, 390px mobile shell, typing fallback, Maltese speech integration.

4197875MixedDesign the conversation pattern: turn-taking, correction, confirmation, error recovery — part 1 of 2—
4210818MixedDesign the conversation pattern: turn-taking, correction, confirmation, error recovery — part 2 of 2—
4340160ClaudeBuild the voice input component: record - transcribe - show text - edit - confirm — part 1 of 2—
4496388ClaudeBuild the voice input component: record - transcribe - show text - edit - confirm — part 2 of 2—
4537833MixedMobile-first conversational shell at 390px — part 1 of 2—
4613661MixedMobile-first conversational shell at 390px — part 2 of 2—
4739863MixedTyping fallback and accessibility pass—
4834564MixedTest the shell with real Maltese speech; fix what breaks — part 1 of 2—
4963785MixedTest the shell with real Maltese speech; fix what breaks — part 2 of 2—
8AI Approval Dashboard — gates every moduleS50–S58 · 9 sessions0%

Build the AI Approval Dashboard — the human-in-the-loop gate that every module's output passes through before reaching the client. Approve / Edit / Reject-Regenerate. ⚠ Four of these sessions are specified against Wix CMS and Velo, which was rejected as a system of record on 15 Aug 2026. They must be rewritten against the data store before this stage is built.

5013078MixedSettle the 5 design questions: queue shape, retention, batch approve, notifications, route—
5153254MixedWireframe the queue and item detail on mobile—
5240154MixedBuild PendingApprovals CMS collection and schema—
5370584MixedVelo backend — approve / edit / reject state changes—
5449098MixedFront-end queue list and filters—
5577789MixedItem detail view with preview and reasoning—
5679381MixedBatch approve—
5714218MixedWire one Make scenario end to end (CROSS-1 handoff pack)—
5886809MixedRegression on mobile—
9R&D for the four untested modules NEWS59–S77 · 19 sessions0%

R&D for CROSS-2, CROSS-3, CROSS-4 and CROSS-5 — none have ever been tested. Graduated depth: CROSS-5 heavy (8 sessions, photo-to-number), CROSS-4 medium (5), CROSS-2 and CROSS-3 light (3 each). ⭐ CROSS-5 SCOPE, added 2026-08-25: AI Inputs Estimator from Photo — the client photographs a job or a space and the module estimates the INPUTS required, priced from a price list. €30/mo flat, paid subscription. Locked definition: master record §3.0, detail in records/master/module-decisions.md. Same failure class as CROSS-1 — a number pulled out of an image, wrong in ways that look right — which is why this is the heavy arm at 8 sessions. ⛔ TWO THINGS UNRESOLVED. Both must be answered inside this stage, before any build spec. (1) WHERE THE PRICE LIST COMES FROM — client-supplied, read from their own site, or maintained by eyeq. Undecided, and the answer determines who owns the number being quoted to an end customer and who carries it when it is wrong. (2) WHETHER A PHOTO ALONE GIVES USABLE DIMENSIONS — untested, and the whole module rests on it. If it does not, CROSS-5 needs a reference object in frame, a manual measurement, or it does not ship in this form.

5991883MixedCROSS-2 R&D — commitment calendar: can starter lists carry a real business? — part 1 of 3—
6022384MixedCROSS-2 R&D — commitment calendar: can starter lists carry a real business? — part 2 of 3—
6198480MixedCROSS-2 R&D — commitment calendar: can starter lists carry a real business? — part 3 of 3—
6240282MixedCROSS-3 R&D — follow-up: consent capture at the till, opt-out page, template library — part 1 of 3—
6325590MixedCROSS-3 R&D — follow-up: consent capture at the till, opt-out page, template library — part 2 of 3—
6472237MixedCROSS-3 R&D — follow-up: consent capture at the till, opt-out page, template library — part 3 of 3—
6570793MixedCROSS-4 R&D — do the suggestions earn their fee? Test against real MUSTA trading history — part 1 of 5—
6639677MixedCROSS-4 R&D — do the suggestions earn their fee? Test against real MUSTA trading history — part 2 of 5—
6736226MixedCROSS-4 R&D — do the suggestions earn their fee? Test against real MUSTA trading history — part 3 of 5—
6859731MixedCROSS-4 R&D — do the suggestions earn their fee? Test against real MUSTA trading history — part 4 of 5—
6989572MixedCROSS-4 R&D — do the suggestions earn their fee? Test against real MUSTA trading history — part 5 of 5—
7014476MixedCROSS-5 R&D — HEAVY. Photo-to-quantity extraction; same failure class as CROSS-1, zero testing so far — part 1 of 8—
7192636MixedCROSS-5 R&D — HEAVY. Photo-to-quantity extraction; same failure class as CROSS-1, zero testing so far — part 2 of 8—
7212404MixedCROSS-5 R&D — HEAVY. Photo-to-quantity extraction; same failure class as CROSS-1, zero testing so far — part 3 of 8—
7357586MixedCROSS-5 R&D — HEAVY. Photo-to-quantity extraction; same failure class as CROSS-1, zero testing so far — part 4 of 8—
7418576MixedCROSS-5 R&D — HEAVY. Photo-to-quantity extraction; same failure class as CROSS-1, zero testing so far — part 5 of 8—
7518789MixedCROSS-5 R&D — HEAVY. Photo-to-quantity extraction; same failure class as CROSS-1, zero testing so far — part 6 of 8—
7643559MixedCROSS-5 R&D — HEAVY. Photo-to-quantity extraction; same failure class as CROSS-1, zero testing so far — part 7 of 8—
7782329MixedCROSS-5 R&D — HEAVY. Photo-to-quantity extraction; same failure class as CROSS-1, zero testing so far — part 8 of 8—
10Site generation prompt v3S78–S82 · 5 sessions0%

Iterate the site generation prompt to v3, incorporating everything learned from the design system, image pipeline, and R&D stages.

7854564MixedWrite v3 with the two-pass design-plan requirement—
7967878MixedFirst wiretest — 3 outputs—
8079249MixedRate and revise—
8161800MixedSecond wiretest—
8213249MixedTrades cold-brand stress test; lock or iterate—
11DigiScore rebuild — 3-axis, recommendation re-pointed at PAID modulesS83–S88 · 6 sessions0%

Rebuild DigiScore as a metal-ladder system (Bronze → Silver → Gold). Graduation by activity not purchase. Re-point the recommendation at the three paid modules.

8320188ClaudeDesign the CMS-to-embed data shape—
8476985MixedRewrite the questions for the 3 axes and 5 bands—
8541101MixedRebuild the Tally form; update the Make scoring—
8656502MixedUpdate AI Agent Setup for category-as-filter and module starter lists—
8775096MixedBuild the delivery flow into the member profile—
8891073ClaudeWrite all email templates: score, re-engagement, post-call, setup complete; wire to Make—
12Build spec per module — R&D graduates, then spec, then buildS89–S90 · 2 sessions0%

R&D graduates, scope freezes, then build. One session per module to lock the build spec before production work begins.

8934683MixedCROSS-1 build spec — freeze scope from R&D findings—
9012280MixedCROSS-2 build spec—
13Wix editor — the product path SPLITS91–S103 · 13 sessions0%

The part of the Wix build that a live client actually needs: the product page, the two module pages and their embeds, the domain move, and the portal rename. Split from the 33-session Wix stage on 15 Aug 2026 so twenty sessions of shopfront stop standing between us and a working product.

9124473ManualProduct page + 2 module pages + embeds — part 1 of 10—
9266800ManualProduct page + 2 module pages + embeds — part 2 of 10—
9394290ManualProduct page + 2 module pages + embeds — part 3 of 10—
9429329ManualProduct page + 2 module pages + embeds — part 4 of 10—
9546551ManualProduct page + 2 module pages + embeds — part 5 of 10—
9640716ManualProduct page + 2 module pages + embeds — part 6 of 10—
9778989ManualProduct page + 2 module pages + embeds — part 7 of 10—
9860420ManualProduct page + 2 module pages + embeds — part 8 of 10—
9922417ManualProduct page + 2 module pages + embeds — part 9 of 10—
10049725ManualProduct page + 2 module pages + embeds — part 10 of 10—
10168044ManualCustom domain migration + 301s — part 1 of 2—
10245284ManualCustom domain migration + 301s — part 2 of 2—
10388883ManualRename /my-digiscore to /portal—
14ComplianceS104–S104 · 1 sessions0%

Legal review of T&Cs, privacy policy, DPA, cookie policy, cancellation terms. AI disclaimer wording. Lawyer review flagged.

10481776ClaudeEU AI Act + MDIA alignment doc; classify all 5 modules—
15Soft-launch modules — UI then buildS105–S118 · 14 sessions0%

Build CROSS-1 and CROSS-2 production modules — UI on the conversational shell, then the back-end build. The soft-launch pair.

10537238MixedCROSS-1 UI on the conversational shell — part 1 of 3—
10671943MixedCROSS-1 UI on the conversational shell — part 2 of 3—
10775260MixedCROSS-1 UI on the conversational shell — part 3 of 3—
10870038ClaudeCROSS-1 production build — part 1 of 4—
10973867ClaudeCROSS-1 production build — part 2 of 4—
11052718ClaudeCROSS-1 production build — part 3 of 4—
11131656ClaudeCROSS-1 production build — part 4 of 4—
11227331MixedCROSS-2 UI on the conversational shell — part 1 of 3—
11391271MixedCROSS-2 UI on the conversational shell — part 2 of 3—
11434481MixedCROSS-2 UI on the conversational shell — part 3 of 3—
11551160ClaudeCROSS-2 production build — part 1 of 4—
11683910ClaudeCROSS-2 production build — part 2 of 4—
11799362ClaudeCROSS-2 production build — part 3 of 4—
11851895ClaudeCROSS-2 production build — part 4 of 4—
16Quality test — soft-launch pairS119–S126 · 8 sessions0%

Eight sessions of regression testing and live client dry-runs on CROSS-1 and CROSS-2 before they go to real clients.

11988953MixedQuality test — regression + 2 test sites — part 1 of 8—
12063748MixedQuality test — regression + 2 test sites — part 2 of 8—
12124748MixedQuality test — regression + 2 test sites — part 3 of 8—
12288985MixedQuality test — regression + 2 test sites — part 4 of 8—
12327400MixedQuality test — regression + 2 test sites — part 5 of 8—
12462473MixedQuality test — regression + 2 test sites — part 6 of 8—
12539851MixedQuality test — regression + 2 test sites — part 7 of 8—
12697220MixedQuality test — regression + 2 test sites — part 8 of 8—
17Mon's ops console NEWS127–S130 · 4 sessions0%

The back-office view across every client, for Mon and Gayle only — who has work waiting in the approval queue, who is running out of messages, who has gone quiet, what failed this week. Every one of those is a counting question across clients, which is exactly what Wix cannot answer and the store can. Reads through api.eyeq.studio; the browser never touches the database. Placed here so it opens on real data from day one of soft launch.

12730563MixedSettle what the console must answer and what it must never do — cross-client queue, allowance running low, clients gone quiet, failed extractions this week—
12852992ClaudeAggregate read routes on api.eyeq.studio; no direct database access from the browser, ever—
12912143MixedBuild on Cloudflare Pages behind the same Cloudflare Access gate as inside.eyeq.studio — Mon and Gayle only, responsive web, never native—
13094529MixedMobile pass at 390px; run it against real data from the soft-launch pair—
18SOFT LAUNCH — 1 product, CROSS-1 + CROSS-2S131–S135 · 5 sessions0%

First real clients onboarded. One product: website + CROSS-1 (VAT/expenses tracker) + CROSS-2 (ledger and compliance calendar). Learning stage, not a release.

13160177ManualSOFT LAUNCH — part 1 of 5—
13268471ManualSOFT LAUNCH — part 2 of 5—
13371928ManualSOFT LAUNCH — part 3 of 5—
13466291ManualSOFT LAUNCH — part 4 of 5—
13560859ManualSOFT LAUNCH — part 5 of 5—
19Feedback stage. The soft launch is a learning stage, not a release NEWS136–S140 · 5 sessions0%

Collect and act on feedback from the first soft-launch clients. What works, what doesn't, what needs changing before the paid modules ship.

13612617MixedGather structured feedback from first clients; log every friction point — part 1 of 2—
13747512MixedGather structured feedback from first clients; log every friction point — part 2 of 2—
13834046MixedFix what the feedback found; re-verify — part 1 of 2—
13939350MixedFix what the feedback found; re-verify — part 2 of 2—
14076891DecisionDECIDE: what changes in CROSS-3/4/5 scope because of what we learned—
20Wix editor — the shopfront MOVED AFTER SOFT LAUNCHS141–S160 · 20 sessions0%

Marketing pages, Wix Stores, Pricing Plans, checkout, tax and PSD2 — everything needed to sell to a stranger without us in the room. A soft launch to a handful of known clients does not need it, so it moved behind soft launch on 15 Aug 2026. This is the single biggest lever on the soft-launch date.

14121994ManualMarketing pages rewrite — part 1 of 12—
14267402ManualMarketing pages rewrite — part 2 of 12—
14350270ManualMarketing pages rewrite — part 3 of 12—
14446622ManualMarketing pages rewrite — part 4 of 12—
14550708ManualMarketing pages rewrite — part 5 of 12—
14659929ManualMarketing pages rewrite — part 6 of 12—
14797597ManualMarketing pages rewrite — part 7 of 12—
14859076ManualMarketing pages rewrite — part 8 of 12—
14957466ManualMarketing pages rewrite — part 9 of 12—
15035924ManualMarketing pages rewrite — part 10 of 12—
15178906ManualMarketing pages rewrite — part 11 of 12—
15232286ManualMarketing pages rewrite — part 12 of 12—
15341689ManualWix Stores, Pricing Plans, checkout, tax, PSD2 — part 1 of 8—
15419325ManualWix Stores, Pricing Plans, checkout, tax, PSD2 — part 2 of 8—
15571666ManualWix Stores, Pricing Plans, checkout, tax, PSD2 — part 3 of 8—
15659306ManualWix Stores, Pricing Plans, checkout, tax, PSD2 — part 4 of 8—
15737470ManualWix Stores, Pricing Plans, checkout, tax, PSD2 — part 5 of 8—
15891566ManualWix Stores, Pricing Plans, checkout, tax, PSD2 — part 6 of 8—
15938202ManualWix Stores, Pricing Plans, checkout, tax, PSD2 — part 7 of 8—
16068546ManualWix Stores, Pricing Plans, checkout, tax, PSD2 — part 8 of 8—
21Messaging channel and offers pagesS161–S165 · 5 sessions0%

Build the SMS/WhatsApp messaging channel and the offers pages on client sites. The infrastructure that CROSS-3 and CROSS-4 send through.

16125201ClaudeMessaging channel — build the channel-agnostic dispatch adapter — part 1 of 2—
16213776ClaudeMessaging channel — build the channel-agnostic dispatch adapter — part 2 of 2—
16373467ClaudeOffers pages + consent and opt-out — part 1 of 2—
16457754ClaudeOffers pages + consent and opt-out — part 2 of 2—
16534199ClaudeMalta calendars — produce, festa by locality, school, events—
22Build spec — the three paid modulesS166–S168 · 3 sessions0%

Lock the build spec for CROSS-3, CROSS-4 and CROSS-5 based on everything learned from R&D and soft-launch feedback.

16646348MixedCROSS-3 build spec (post-feedback)—
16713442MixedCROSS-5 build spec (post-feedback)—
16850172MixedCROSS-4 build spec (post-feedback)—
23Paid modules — UI then buildS169–S192 · 24 sessions0%

Build all three paid modules — UI on the conversational shell, then production back-end. CROSS-3 (messaging), CROSS-4 (offer suggestions), CROSS-5 (AI Inputs Estimator from Photo — the client photographs a job or a space and the module estimates the INPUTS required, priced from a price list; locked definition master record §3.0). ⛔ The wording here was 'quotes/proposals' until 2026-08-25 07:41 Malta and was never the product.

16976578MixedCROSS-3 UI on the conversational shell — part 1 of 2—
17011523MixedCROSS-3 UI on the conversational shell — part 2 of 2—
17191795ClaudeCROSS-3 production build — part 1 of 5—
17275465ClaudeCROSS-3 production build — part 2 of 5—
17340858ClaudeCROSS-3 production build — part 3 of 5—
17457652ClaudeCROSS-3 production build — part 4 of 5—
17554451ClaudeCROSS-3 production build — part 5 of 5—
17673235MixedCROSS-5 UI on the conversational shell — part 1 of 3—
17734720MixedCROSS-5 UI on the conversational shell — part 2 of 3—
17842356MixedCROSS-5 UI on the conversational shell — part 3 of 3—
17985535ClaudeCROSS-5 production build — part 1 of 6—
18035707ClaudeCROSS-5 production build — part 2 of 6—
18120459ClaudeCROSS-5 production build — part 3 of 6—
18268059ClaudeCROSS-5 production build — part 4 of 6—
18382855ClaudeCROSS-5 production build — part 5 of 6—
18441001ClaudeCROSS-5 production build — part 6 of 6—
18564891MixedCROSS-4 UI on the conversational shell — part 1 of 2—
18643742MixedCROSS-4 UI on the conversational shell — part 2 of 2—
18719578ClaudeCROSS-4 production build — part 1 of 6—
18864597ClaudeCROSS-4 production build — part 2 of 6—
18933366ClaudeCROSS-4 production build — part 3 of 6—
19066980ClaudeCROSS-4 production build — part 4 of 6—
19199716ClaudeCROSS-4 production build — part 5 of 6—
19227926ClaudeCROSS-4 production build — part 6 of 6—
24Quality test — paid modules NEWS193–S200 · 8 sessions0%

Eight sessions of regression testing and live client dry-runs on CROSS-3, CROSS-4 and CROSS-5 before full launch.

19326264MixedQuality test — CROSS-3, CROSS-4, CROSS-5 regression + live client dry run — part 1 of 8—
19480544MixedQuality test — CROSS-3, CROSS-4, CROSS-5 regression + live client dry run — part 2 of 8—
19548318MixedQuality test — CROSS-3, CROSS-4, CROSS-5 regression + live client dry run — part 3 of 8—
19649981MixedQuality test — CROSS-3, CROSS-4, CROSS-5 regression + live client dry run — part 4 of 8—
19764814MixedQuality test — CROSS-3, CROSS-4, CROSS-5 regression + live client dry run — part 5 of 8—
19885831MixedQuality test — CROSS-3, CROSS-4, CROSS-5 regression + live client dry run — part 6 of 8—
19959435MixedQuality test — CROSS-3, CROSS-4, CROSS-5 regression + live client dry run — part 7 of 8—
20018361MixedQuality test — CROSS-3, CROSS-4, CROSS-5 regression + live client dry run — part 8 of 8—
25FULL LAUNCH — five modulesS201–S206 · 6 sessions0%

Full launch — all five modules live, grant spec generator built, concierge onboarding for the first wave of full-product clients.

20155486ClaudeGrant spec generator + concierge—
20261553ManualFULL LAUNCH — part 1 of 5—
20347923ManualFULL LAUNCH — part 2 of 5—
20476556ManualFULL LAUNCH — part 3 of 5—
20597186ManualFULL LAUNCH — part 4 of 5—
20637838ManualFULL LAUNCH — part 5 of 5—

Notes and history

What the v2 rebuild cost, kept as history: soft launch moved from 10 Feb to 09 Apr 2027, full launch from 09 Apr to 08 Jul 2027. v3 then adds two infrastructure sessions, moving them again to 14 Apr and 10 Jul 2027. The delay buys four things v1 did not have. (1) Only CROSS-1 had ever been R&D tested — CROSS-2, 3, 4 and 5 went straight to production build on an assumption. CROSS-1’s own R&D found that 5 of 7 Maltese expense documents print no VAT figure, that a card slip double-counts against its receipt, and a 71% prompt-fatigue rate. None of that was predictable from a spec. (2) The website image pipeline was never tested with real photographs. (3) Every module is driven by back-and-forth voice, and no UX/UI layer existed anywhere in v1. (4) v1 built CROSS-3, 4 and 5 straight into full launch with zero test sessions, while the soft-launch pair got eight.
Four sessions a week, Wednesday to Saturday. A fifth is earned time and pulls both dates left. Sessions are sized on observed output: about 23 estimate-hours when Claude does the work, 8 when you rate and click each loop, 4 in the Wix editor.
What v3 adds, and why it costs two sessions. Every EyeQ client system — sheets, Drive folders, the receipt corpus and soon voice recordings of identifiable people — sits on a personal Gmail account. There is no data processing agreement behind it, no administrator who can recover it if the account locks, and no acceptable answer if a client asks where their data lives. That is a GDPR and continuity exposure today, at forty rows, independent of scale, and it grows every week. S8 is placed before Voice R&D (S17) by design — voice recordings are the heaviest personal data in the whole build and must never land on a personal account. S9 follows immediately because both are DNS work and should be thought about once. Runbook: EyeQ_Google_Workspace_Migration_Runbook_v1.md, 1 Aug 2026. ⚠️ Two runbook questions must be closed BEFORE S8: which domain hosts the Workspace tenant, and whether Drive file IDs survive an ownership transfer (verify on the first file, stop if they change).
Session 1 (Thu 13 Aug) — done. Rules stage is LIVE at api.eyeq.studio/vat/rules/v1. Cloudflare Pages Function running from sites/api/; canonical code at sites/api/lib/vat-rules-v1.js. Scenario VAT R&D — extraction worker (B) (6762417) rebuilt to 10 modules — extraction now goes through the rules layer before writing. Ela's Scissor Hands corpus run 1 fired on 11 closures: money 6/6 exact against the answer key on a second till format, 5 died at ParseJSON module 7 (observability hole surfaced). Observability route designed on api.eyeq.studio with a Wix collection back-end (option iii); lib + 23 tests passing, awaiting deploy in S2. Two ClickUp writes landed (869ehvekz, 869ehpa1w). Five skills saved and verified.
The bottleneck is still the Wix editor, not the modules. Marketing pages, Stores and checkout, product and module pages together are 32 manual sessions on the critical path. All five module production builds are 25. Getting Wix work off Mon remains the single biggest lever on both dates.
Assumptions in this rebuild, stated so they can be argued with. R&D depth per module (CROSS-5 eight sessions, CROSS-4 five, CROSS-2 and CROSS-3 three each) is judgement, not measurement — no module but CROSS-1 has a measured R&D cost. UI session counts are proportional to surface complexity, not tested. Estimate-hours are recomputed on lane rates (Claude 23, mixed 8, manual 4), not re-derived from the original work breakdown. Every one of these is a place to trim if the dates are unacceptable.

What changed against v1

Changev1v2Why
R&D per moduleCROSS-1 and voice onlyAll five, graduatedCROSS-5 is photo-to-number — same failure class as CROSS-1, never tested. CROSS-4 needs real trading history to prove its suggestions earn the fee.
Website image testingNone6 sessionsPalette extraction, photo validity gate, no-photo-first render, invalid-photo fallback. The design system depends on all four and none were tested on real SME photos.
Conversational UX/UINowhere in the plan9 shared + 13 per moduleEvery module runs on back-and-forth voice-to-text. The shell is built once; each module gets its own surface on top.
Voice R&D positionAfter soft launch (S105)Before every module buildModules that are voice-driven cannot be built before the voice layer is proven. v1 had this backwards.
Feedback stageNone5 sessionsv1 built CROSS-3 seventeen days after soft launch ended, regardless of what clients said. That makes the soft launch a release, not a learning stage.
Quality test before full launchNone8 sessionsThe soft-launch pair got eight test sessions. The three paid modules got zero.
Infrastructure move (v3)Not in v1 or v22 sessions (S8–S9)Client data on a personal Google account: no DPA, no recovery path, no answer to a compliance question. Must precede Voice R&D, which generates the heaviest personal data in the build.
Build spec gateImplicit1 session per moduleR&D graduates, scope freezes, then build. Stops R&D findings arriving mid-build.