dashboard.audreyinc.com — proposal sketch

Date: 2026-05-13 Reuses pattern from: dare-pipeline GHA migration, the dare dashboard’s narrator-+-analytics-+-render-+-deploy shape Status: Proposal. Not built. Phase 0–1 ready to start when greenlit.


TL;DR

audreyinc.com is doing 30k requests/day and the questions you’re actually asking — why are people landing, what do they look at, and where does the funnel leak before purchase — are unanswered by any current surface. The dare dashboard pattern transfers cleanly, with one architectural twist: two canonical sources need to coexist in the brief. Cloudflare Analytics owns top-of-funnel (traffic, geo, referrers); Shopify Admin GraphQL owns bottom-of-funnel (orders, AOV, conversion). The dashboard’s job is to make those two sources tell one story.

Same plumbing as dare-pipeline (GHA cron → brief → Haiku narrator → static HTML → CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Pages), same Code Shared credentials, same dev-report lineage. Realistic build: Phase 0–1 (read-only MVP with both sources) in ~3 hours; full conversion-funnel narrative in ~6. Recurring cost: ~$0 (Haiku narrator at ~$0.40/year, everything else free-tier).


Why this earns the build now

Three signals make this load-bearing rather than indulgent:

  1. 30k/day is real traffic. That’s 3× dare’s baseline. At that volume, “I wonder what’s happening” stops being intellectual curiosity and starts being decisions you should be able to make daily — which products to feature, which markets to lean into, which referrers to nurture.
  2. Commerce questions are different from editorial questions. dare’s dashboard answers “is the archive holding up?” — that’s a status question. audrey’s needs to answer “is the funnel working?” — that’s a decision question. Decision-grade analytics needs both halves: top-of-funnel + conversion.
  3. The pattern is proved and cheap to copy. dare-pipeline ships at $0/mo with a Haiku narrator that costs cents. Once the audrey version exists, dogwood is one more copy away. The portfolio-multiplier is real.

Architecture sketch — two sources, one narrative

STASH8

Same shape as dare-pipeline. The only structural change: build_brief.py joins two source fetches into one structured brief before handing to the narrator. The narrator doesn’t know it’s pulling from two sources — it just sees a merged brief with funnel-shaped sections.


The two data sources — what each carries

Cloudflare Analytics GraphQL (top of funnel)

Same surface as dare-pipeline. Daily aggregates of:

Shopify Admin GraphQL (bottom of funnel)

The conversion side. Pull daily via customQuery against the Admin API:

Rate-limit posture: Shopify GraphQL Admin allows 1000 cost-points/second. Daily aggregates cost ~50 points total. Plenty of headroom; no batching needed.

Auth: Custom App in Shopify Admin, scoped read-only to read_orders, read_products, read_customers, read_analytics. Token stored in Code Shared as audrey-shopify-admin (re-using the item that already exists per earlier portfolio audits — currently in Private, would move during Phase 0).


KPI selection — name the headline before designing the dashboard

This is the 80/20 strategic-peer frame applied at design time. Before building the dashboard, name the one number that proves the business is healthy when it ticks up.

Candidates worth considering for audrey:

Metric Reads as Why it might be the headline
Conversion rate (orders ÷ unique sessions) “Our funnel is working” Most direct measure of dashboard intent — what % of visitors buy
Repeat-customer rate (returning ÷ total orders) “Customers love it” Luxury depends on loyalty; one strong cohort beats ten weak ones
AOV trend (rolling 7d vs. prior 7d) “Customers are buying more” Pricing/positioning power
Top-product velocity (units/day) “We know what’s working” Inventory + featuring decisions

My read: conversion rate for the headline, with AOV and repeat-customer as supporting metrics directly under. Reasons: conversion rate ties top-of-funnel (CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Analytics) to bottom-of-funnel (Shopify) in one number — exactly the two-sources-one-story shape the dashboard is built around. If you only see one number, you want it to be the one that says “the joined funnel is or isn’t working.”

Open question for you to settle: see §Open questions below.


Phased plan

Phase Outcome Effort Status
0 Foundation: repo + Shopify Custom App + tokens in Code Shared + CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Pages project + DNS ~45 min Ready to start
1 Read-only MVP — both sources fetched daily, raw numbers in a static table, no narrator ~2 hrs Phase 0 dependency
2 Haiku narrator + KPI headlines + funnel-shaped layout ~3 hrs Phase 1 dependency
3 Cross-source insights — conversion-by-referrer, top products viewed vs. bought, time-of-day patterns ~4 hrs Earnable; defer until Phase 2 proves daily-read habit
4 Real-time augmentation via Shopify Webhooks → CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Worker → KV. Parked from day-one. Multi-session Parked. Resume signal: daily granularity proves insufficient
5+ A/B testing framework, voice-of-customer integration, audrey-pipeline → dogwood-pipeline portability lift Multi-session each Parked

Phase 0–2 (~6 hrs total) gets you to a live, narrating, useful dashboard. Phase 3 is where it starts answering “how do I improve purchases?” with specific deltas.


Phase 0 details — the foundation hour

Step What
Create repo xlab-co/audrey-pipeline (private), structure mirrors dare-pipeline
Shopify Custom App audrey Shopify Admin → Apps → Develop apps → Create app audrey-pipeline-readonly; grant read_orders, read_products, read_customers, read_analytics; install on store; capture admin API access token
1P item Verify audrey-shopify-admin is in Code Shared (it’s currently in Private per earlier portfolio scan — move via op item move)
CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF deploy token Mint audrey-analytics-deploy with Workers Scripts:Edit + Pages:Edit on Dan Sellars account; store in Code Shared
GHA secrets gh secret set SHOPIFY_ADMIN_TOKEN CF_ANALYTICS_TOKEN CF_PAGES_TOKEN ANTHROPIC_API_KEY
CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Pages project audrey-dashboard Pages project in CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF dashboard; custom domain dashboard.audreyinc.com
CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Access policy Gate to dan@dare.co.uk + dan@gf.cx (same pattern as audreyinc-beta)

After Phase 0: nothing’s running yet, but every credential and infrastructure piece is in place. Phase 1 is “wire the code that uses them.”


What the narrator’s brief looks like

A structured object the narrator turns into a paragraph. Mirrors the dare narrator brief but with funnel-shaped sections:

{
  "date": "2026-05-13",
  "comparison": {
    "yesterday": "2026-05-12",
    "last_week_same_day": "2026-05-06",
  },
  "top_of_funnel": {
    "sessions": 4_812,
    "vs_yesterday_pct": +4.1,
    "top_referrer": "google.com (organic)",
    "top_country": "United States (38%)",
    "top_path": "/collections/silk-twill",
    "bot_share_pct": 12.3,
  },
  "bottom_of_funnel": {
    "orders": 47,
    "aov_gbp": 218,
    "revenue_gbp": 10_246,
    "conversion_rate_pct": 0.98,
    "vs_yesterday_pct": -0.2,  # in percentage points
    "top_product": "Astoria Silk Scarf — Ivory",
    "returning_customer_share_pct": 31,
    "abandoned_checkouts": 18,
  },
  "watch_items": [
    "abandoned_checkouts up 64% vs 7d avg — investigate"
  ]
}

The narrator’s prompt instructs it to produce a paragraph that threads top-of-funnel into bottom-of-funnel — “4,812 sessions arrived, 38% from the US, mostly via Google organic to the silk-twill collection. 47 orders at £218 AOV — conversion held at ~1% but abandoned checkouts spiked, worth a look.”

That paragraph is the dashboard’s lede.


Costs

Component Monthly Notes
CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Analytics GraphQL $0 Included with audreyinc.com zone
Shopify GraphQL Admin $0 Generous rate limits; daily aggregates are nothing
Haiku narrator (5 variants × 2× per day × 365 days) ~$0.04/mo Same math as dare narrator — Haiku 4.5 is cheap
CDN, security layer, and DNS provider sitting in front of dare.co.uk.">CF Pages $0 Static site, well under free tier
GHA runner minutes $0 Well under monthly free quota
Total ~$0.04/mo Rounding error

What’s intentionally out of scope (parked from day-one)

Idea Why parked
Real-time purchase tracking Daily granularity is what decision-making needs. Real-time is for monitoring, which the Shopify mobile app already does well. Resume signal: daily granularity feels too lagged for a specific operational question.
Customer-level personalisation Different surface (the storefront itself), different tool, different team-of-one bandwidth.
A/B testing framework Worth it when there are enough orders/day to power statistically valid tests. At 47 orders/day, even big lifts take weeks to validate. Resume signal: order volume crosses ~150/day.
Predictive forecasting (AI lift over Shopify’s built-in) Shopify Analytics already does respectable forecasting. The dashboard’s value is the narrative, not the prediction.
Voice-of-customer (reviews, support tickets) integration Different data sources, different cadence. Earn its place when the narrative starts wanting “why” answers the numbers alone can’t give.

Open questions for you

  1. Headline KPI: conversion rate (my recommendation), or one of AOV / repeat-customer / top-product-velocity? The dashboard’s first-paint should land on the answer to one question.
  2. Cron cadence: 08:00 + 20:00 BST (matches dare) — or different? E-commerce often wants the morning briefing before checking orders.
  3. Audience: just you for now? Or extending Access policy to anyone else (advisor, partner)?
  4. The audrey-shopify-admin 1P item — is the API token currently valid? Per earlier portfolio scan it’s in Private. If stale or pointing at the wrong app, Phase 0 starts with re-minting.
  5. Custom App permissions: read-only on orders/products/customers/analytics is the right starting scope per feedback_principle_of_least_privilege. Confirm before I scope the Custom App.
  6. devreports.audreyinc.com vs. dashboard.audreyinc.com: the audrey devreports lifecycle memory says devreports lives in the dare catalog until trigger criteria. Does dashboard.audreyinc.com graduate sooner because it’s commercial, not editorial?
  7. Cross-portfolio shop comparison view (much later): when dogwood gets its own pipeline, would a meta-view comparing audrey + dogwood AOV/conversion be useful, or is that scope-creep?

Pattern connections — what this builds on / what it teaches


Confirm KPI + cron cadence + Custom App scope above. Then Phase 0 is a ~45-minute setup session — fully repeatable from this proposal alone, no live exploration needed. Phase 1’s read-only MVP gets you to a live dashboard with both sources visible the same day.

Realistic finish line for “a real, narrating dashboard.audreyinc.com I check every morning”: two evenings of work, with the second one optional if Phase 1’s bare-numbers version proves sufficient.


30k/day deserves more than intuition. The narrator’s daily paragraph is the cheapest, most useful thing $0.04/mo can buy you.

Source: audrey_dashboard_proposal_2026-05-13.md · Rendered 2026-05-13 14:48