Skip to content

Instantly share code, notes, and snippets.

@gsingal
Created May 1, 2026 15:36
Show Gist options
  • Select an option

  • Save gsingal/7a4b7f1a4bf9f3c960210525355eb260 to your computer and use it in GitHub Desktop.

Select an option

Save gsingal/7a4b7f1a4bf9f3c960210525355eb260 to your computer and use it in GitHub Desktop.
RR — Week of May 4 board plan (team-ready summary)

Week of May 4 — Team plan

One-page summary. Detailed plan + checklists in docs/plans/2026-04-30-week-of-may-4-board-plan.md (in repo). Read that for the full skill invocations and per-task details.


What we're driving

Single Q2 metric: Demand Distribution — paid rooms with ≥1 inquiry in 14d. Currently 53.1%, Q2 goal ≥60%. Everything below either moves this directly (more messages, fewer blocked messages) or unblocks future work that will move it.


What ships this week

# What Owner Direct hit on metric?
1 #4429 P1 — Verified Gmail users blocked from sending messages Ahmed (Mon AM) YES — every blocked message hits the numerator
2 #3525 P1 — Blocking a user doesn't deactivate their listings Ahmed (Thu) YES — denominator hygiene
3 6 backlog PRs to master Ahmed Mon-Tue + Mahmoud Mon Indirectly — clears noise + ships small wins
4 Pro+Premium Listing Analytics page (refresh, 5 widgets, NO projection) Ahmed BE + Mahmoud FE Indirectly — drives Pro/Premium retention + price-tier nudges
5 Pro Video Tour (Cloudflare Stream) Ahmed BE + Mahmoud FE Indirectly — Pro retention; possible inquiry-rate lift on video'd listings
6 Broadcast CTA prework — migrate broadcast_cta_clicked GA4 → PostHog Ahmed (Thu) Setup for future A/B

Cut after review: price-projection widget (statistically indefensible without panel study), broadcast CTA A/B test (mathematically underpowered at current traffic).


Daily breakdown

Day Ahmed Mahmoud
Mon #4429 P1 first (use /bug-fix). Then drive backlog: #4544, #4485, #4496, #4326, #4006, #4052 Ship pre-rebased #3759, #3863, #3855. Start analytics mockup + video-tour mockup
Tue Audit existing analytics service. Add rooms.last_analytics_view_at migration. Update getPricePosition copy to descriptive percentile only. Video back end: rooms migration + Pro accessor Both mockups → /design-review → Gaurav approval
Wed Video back end: upload-URL endpoint + webhook (signature verification non-negotiable) + delete Build refreshed analytics page Vue (5 widgets, no projection). Add vue-echarts to package.json
Thu #3525 P1. Broadcast CTA migration: swap trackGA4track in RoomsGallery.vue:262 + broadcast_sent Build video tour FE: upload widget, <stream> player on Room.vue, play overlay on ResultsCard.vue
Fri Tier-2 fixes (#3556, #3526) or shepherd PRs through staging→master Finish video FE + analytics. Filter analytics audit. Visual self-review

Process — non-negotiable

This is your week. Each task has a checklist in the full plan doc — check items off in your branch's PR description as you complete them.

  1. One issue, one branch, one PR. Use rr-new <name>. Never branch from staging. Never commit to master.
  2. Use the listed Claude skills — they're listed in the full plan per task. They exist because we hit specific failure modes without them. Don't shortcut.
  3. Tests first. /test-writing/create-test. Don't claim "done" without tests.
  4. Visual changes are mockup-first. /create-mockup/design-review → Gaurav approval BEFORE coding.
  5. /iterative-review before requesting human review. Get to zero Critical findings.
  6. Then /ready-for-review — adds label, requests reviewer, posts breadcrumb.
  7. Audit block at end of every PR per CLAUDE.md — list which tool calls back each "tests pass / review done" claim.
  8. No --no-verify. No skipped tests. No weakened assertions.

Stuck? Tried 2+ hypotheses on the same bug? /codex:rescue --background. Designing a feature? /writing-plans first.


Instrumentation — cost-aware

PostHog free tier (1M events/mo, $100/mo cap per #3945). Don't reflexively send events to PostHog — most of what we want to measure can stay in GA4.

Use useAnalytics().trackGA4() (free, unlimited) for:

  • analytics_page_viewed, analytics_widget_impression (IntersectionObserver), analytics_widget_clicked, analytics_recommendation_seen, analytics_recommendation_cta_clicked

Use useAnalytics().track() (PostHog + GA4) ONLY for:

  • analytics_action_completed — fires from downstream save handlers (HaveRoom etc.) when a user takes an action that was preceded by an analytics-page view in the same session. Debounced 7-days per rule_key per user.

Derive from existing data, no new events:

  • Pro/Premium retention → Stripe pipeline
  • Median z-score → SQL on rooms ⨝ city_price_stats monthly cron
  • Time-on-page, scroll → GA4 auto-captures

The funnel: GA4 (volume) → PostHog (per-person bridge) → SQL/Stripe (retention outcome). One PostHog event for the entire feature.


Definition of done — Friday EOD

  • #4429 P1 merged to master
  • #3525 P1 merged to master
  • ≥6 backlog PRs merged to master
  • Pro+Premium Listing Analytics page deployed to staging — 5 widgets, gate verified, descriptive percentile copy, GA4 events wired, single PostHog event wired, separate "Boost further with Pro" sub-section for Premium users
  • Pro Video Tour deployed to staging — Cloudflare Stream upload + player + search-card overlay, webhook signature verification tested with valid + invalid + expired signatures, Pro gate working
  • Broadcast CTA prework merged — broadcast_cta_clicked + broadcast_sent dual-firing to PostHog
  • Filter analytics audit posted to #3944

Why some things changed from the original plan

This plan went through two reviews that materially changed scope:

  1. First review (Claude /reviewing-plans): Caught that the original 5-arm broadcast CTA test would need ~5 months per arm at current traffic. Caught that per-city price IRRs aren't statistically reliable.
  2. Codex adversarial challenge: Caught that ListingAnalyticsService and Pro+Premium gate are already on master (the cherry-pick task was wrong). Caught that the price-projection widget isn't causally identified. Caught that several PostHog events the plan referenced don't exist in the codebase. Caught that even a 2-arm broadcast CTA test has only ~17% power at 4 weeks.

Result: we cut the price-projection widget (defer until we run a within-listing panel study), cut the broadcast CTA A/B (run later when we have more traffic or move to a higher-volume surface), and restored the Pro Video Tour (capacity freed by the cuts).


Tracking + links

  • Full plan: docs/plans/2026-04-30-week-of-may-4-board-plan.md in the repo
  • GitHub issues: comments on #2964 (analytics scope), #3944 (broadcast CTA), #4429 + #3525 (P1 schedule), #3087 (video tour)
  • Daily digest: items will be queued for each weekday with the specific task, owner, and skills to use
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment