Marketing with Brentinsights
ClientInternal — build status
Last refreshupdated on each request
insights-progress.brentneale.au · drift-prevention surface

Build progress

The Insights Platform enables Brent to identify, investigate, and explain Google Ads campaign impact with sufficient confidence and clarity that (a) it becomes his primary tool for optimisation decisions across active Shopify clients, and (b) every shared finding stands on its own as a structured story with a clear takeaway.

6/23 tasks complete26%
Phase tree

Where the build is up to

Each phase has its own task list. Quality scores show against completed tasks (composite from QUALITY_LOG.md).


Phase 1

Single-client proof of concept

Rover Pet Products — daily ingestion, modelling, dashboard

6/10 complete

Prove the platform end-to-end with one client. Ingest Google Ads + Shopify daily into BigQuery, model the data layer in dbt, surface the operator dashboard. Phase 1 closes when 7 days of unattended refresh succeeds and the Phase Validator passes.

  • T1.1
    Repo + monorepo scaffold
    q 1.00
  • T1.2
    GCP infra setup
    Project, BQ datasets, service accounts, AUD $300/mo budget alerts
    q 0.96
  • T1.3
    dbt project scaffold + GitHub Actions
    Daily 22:00 UTC workflow + PR workflow + smoke test
    q 0.94
  • T1.4
    Frontend scaffold + brand tokens + Vercel
    Next.js 16 + Tailwind v4 + tokenised proxy + Vercel deploy
    q 0.88
  • T1.5
    Google Ads ingestion
    BQ DTS standard reports + custom GAQL Cloud Run service for PMax / channel breakdown
    q 0.90
  • T1.6
    Shopify ingestion via Airbyte
    Airbyte Cloud connection — 10 streams, 57k orders backfilled to 2016
    q 0.90
  • T1.7
    Frontend data wiring + KPI views
    Design system + Tremor + first KPI strip — in progress
    in progress
  • T1.8
    dbt mart models + scheduled run
    DAG built (5 marts, 36 tests pass). Awaiting Brent's reconciliation against Google Ads UI for final tag.
    q 0.92
  • T1.9
    Reconciliation + data quality panel
    pending
  • Phase Validator
    Phase Validator + 7-day unattended observation
    Automated checklist + week of unattended daily refresh observation
    pending
Phase 2

Multi-tenancy + detection engine

Second client + signal/anomaly surfacing

0/5 complete

Onboard a second client (likely Sage x Clare) and refactor the data layer for per-client templating. Build the detection engine that turns search-term and product-mix signals into operator-facing flags.

  • T2.1
    Per-client dbt templating
    pending
  • T2.2
    Second client onboarding
    pending
  • T2.3
    Detection engine MVP
    pending
  • T2.4
    Worth-investigating queue UI
    pending
  • T2.5
    Phase 2 Validator
    pending
Phase 3

Causal inference + attribution

CausalPy + Shopify gclid → campaign linking

0/5 complete

Add the causal investigation layer (CausalPy on Cloud Run for marginal ROI / counterfactual analysis) and wire gclid-based campaign attribution from the Shopify storefront.

  • T3.1
    Storefront gclid capture snippet
    pending
  • T3.2
    Attributed-revenue mart columns
    pending
  • T3.3
    Causal engine Cloud Run service
    pending
  • T3.4
    Investigation request UI
    pending
  • T3.5
    Phase 3 Validator
    pending
Phase 4

Commercial rollout

Productisation + onboarding playbook

0/3 complete

No code work. Pricing, onboarding playbook, client success. Commercial readiness only — closure at Brent's discretion.

  • T4.1
    Pricing + commercial model
    pending
  • T4.2
    Onboarding playbook
    pending
  • T4.3
    Validation Gate (4 weeks post-launch)
    pending
Live data freshness

Pipeline health right now

15 ingestion sources monitored. Updated every 5 minutes from `_meta.freshness_check` — refresh the page to re-query.

  • google_ads_dts_account_basic144 rows2d lag
  • google_ads_dts_adgroup_basic342 rows2d lag
  • google_ads_dts_campaign_basic419 rows2d lag
  • google_ads_dts_keyword_basic563 rows2d lag
  • google_ads_gaql_channel72 rows2d lag
  • google_ads_gaql_pmax1,188 rows2d lag
  • shopify_customers82,672 rowstoday
  • shopify_fulfillments57,775 rowstoday
  • shopify_inventory_items643 rowstoday
  • shopify_inventory_levels1,530 rowstoday
  • shopify_locations1 rowstoday
  • shopify_orders57,814 rowstoday
  • shopify_product_variants1,617 rowstoday
  • shopify_products1,498 rowstoday
  • shopify_shop1 rowstoday
Locked decisions

What is settled

Each entry below is closed to debate. New evidence can re-open one, but a preference or aesthetic argument cannot.

  1. PM-D-001
    Phase 1 client = Rover Pet Products

    All Phase 1 tasks build against Rover. Second-client onboarding is a Phase 2 milestone.

    Single-client proof beats multi-client scaffolding before the platform itself is proven.

  2. PM-D-002
    Brand = Marketing with Brent

    Brand is 'Marketing with Brent'. Subdomains insights.brentneale.au + insights-progress.brentneale.au.

    References to 'Sharpe Media' or marketingwithbrent.com in original scoping are deprecated.

  3. PM-D-003
    Stack = BigQuery + dbt Core + Next.js + Cloud Run + Airbyte

    BigQuery (au-southeast1), dbt Core via GitHub Actions (not dbt Cloud), Next.js 16 / Tailwind v4 on Vercel, Cloud Run for custom jobs + causal engine, Airbyte Cloud for Shopify.

    Cost-controlled, low-ops, and matches Brent's existing toolchain. Each choice rejects a heavier alternative (Snowflake, dbt Cloud, Airflow, Fivetran).

  4. PM-D-C-001
    Type stack = Inter + Manrope + JetBrains Mono

    Inter for display, Manrope for body, JetBrains Mono for metadata / numbers.

    Inter + Manrope cover the brand spec; JetBrains Mono added for tabular numerals where proportional digits would look amateurish.

  5. PM-D-C-002
    v1 notifications = email + in-dashboard only

    No Slack notifications. Token-expiry alerts via plain-text email.

    Slack adds infrastructure with no signal Brent isn't already getting via email.

  6. PM-D-C-003
    All system emails are plain text

    No HTML email templates. Plain text only.

    Internal-facing platform; HTML templates need render testing across mail clients for zero functional gain.

  7. PM-D-C-004
    Investigation flags = in-dashboard only

    Anomaly flags surface in the dashboard. No external pings (email / Slack / push) for flag events.

    External pings would create notification fatigue and bias Brent toward dismissing rather than engaging.

  8. PM-D-C-005
    No guided onboarding tour

    No interactive walkthrough or 'what's new' modal. Empty states + labels do the explaining.

    Brent built it; clients are onboarded via kickoff call. Tour infrastructure costs days for a feature used once per user.

  9. PM-D-C-006
    Accent colour usage constrained

    #ff3f00 used only for large text (24px+) or bold weights at smaller sizes. Never for body text or extended reading.

    Contrast ratio against white is borderline (~4:1). WCAG AA requires 4.5:1 for normal text.

  10. PM-D-D-001
    Search-term-level data removed (2026-04-29)

    Custom GAQL no longer pulls search_term_view. Staging model + raw table dropped.

    ~2% of strategic insight relative to campaign / category / cohort marts. Platform's purpose is strategic decision support, not operational keyword management.

Anti-goals

What this is not

A bounded scope is what makes the in-scope work tractable. Each item below is a rejection — not a backlog candidate.

  • AG-1
    Not a Google Ads management tool

    Bid changes, negative keyword management, and tactical campaign hygiene live in Google Ads (or Optmyzr / Adalysis). The platform surfaces strategic decisions; the operator executes in Google Ads.

  • AG-2
    Not real-time

    Daily refresh cadence by design. Real-time adds infrastructure cost without changing the underlying decisions (which are weekly-to-monthly in scope).

  • AG-3
    Not search-term operational hygiene

    Negative keyword discovery and n-gram analysis are tactical workflows that don't drive strategic decisions. Removed from the data layer 2026-04-29.

  • AG-4
    Not a public marketing surface

    Operator-facing only. No public landing page describing the platform's capabilities to non-clients. robots noindex, nofollow.

  • AG-5
    No Slack / push / SMS notifications

    Email + in-dashboard only. Notification proliferation creates fatigue without improving signal.

  • AG-6
    No HTML emails

    Plain text only. HTML email infrastructure costs days for zero functional value.

  • AG-7
    No guided onboarding tour

    Empty states and labels do the explaining. Operator built the tool; clients are onboarded verbally.

  • AG-8
    No multi-channel ingestion in Phase 1

    Google Ads + Shopify only. Meta, TikTok, Klaviyo etc. evaluated for Phase 2+ when the platform's strategic value is proven on a single demand-source pair.


Marketing with Brent · Insights Platform · Internal build status

source: STATE.md / QUALITY_LOG.md