{
 "id": "11.7",
 "title": "Onboarding playbook",
 "department": "Sales and partnerships",
 "department_slug": "sales-and-partnerships",
 "direction": null,
 "branded": false,
 "status": "draft",
 "owner": "Param",
 "last_verified": "2026-10-26",
 "holds": "From yes to first win, step by step",
 "urls": {
  "html": "https://handbook.joinsquareup.com/sales-and-partnerships/onboarding-playbook",
  "markdown": "https://handbook.joinsquareup.com/sales-and-partnerships/onboarding-playbook.md",
  "json": "https://handbook.joinsquareup.com/sales-and-partnerships/onboarding-playbook.json"
 },
 "other_directions": [],
 "tldr": {
  "headline": "From yes to first win: team in, account connected, brief handed off",
  "points": [
   {
    "icon": "people",
    "text": "The brand's own people sign in with work emails; invites last 14 days."
   },
   {
    "icon": "rocket",
    "text": "On a brand's first read, Plays start only when someone first opens the feed."
   },
   {
    "icon": "link",
    "text": "Connect one real account; Shopify through the brand's own app is the strongest first choice."
   },
   {
    "icon": "flag",
    "text": "The first win is the first brief handed off; Param runs the five partner calls."
   },
   {
    "icon": "lock",
    "text": "Arata's connections are protected and never touched."
   }
  ],
  "stat": {
   "value": "30",
   "label": "minute onboarding call"
  },
  "decide": "Is the first hand off within 7 days of sign in the activation we count?",
  "mood": "building"
 },
 "sources": [
  "brew origin/main a559de6: auth.js:78-110, build.js:93, 239, 363 and 1070, confirm-remind.js:10-33 and 114-122, public/app.js:78-90 and 276-288, docs/connectors-approvals.md:6-37, docs/production.md:117-127, connectors/protected.js:3",
  "brew commit 119dc8a",
  "brand-directions/book/content/c1.js c-1b path, who-onboards, activation, after-day-one",
  "memory: brew-access-rules, brew-feed-open-moves, brew-connect-refresh, brew-real-connectors, brew-prod-backend, brew-drop-learnings, brew-absorb-all-learnings, brew-setup-v2, brew-shopify-app-review, brew-meta-app-review, brew-closed-store-gate"
 ],
 "open_questions": [
  "**Is the first hand off the activation we count?** Proposal: yes, first hand off within 7 days of the first sign in.",
  "**Does every partner onboard on a call, or alone?** Proposal: on a call for the five design partners; alone, with the first win bar, for everyone after.",
  "**Who runs the calls?** Proposal: Param for the five, with Sai or Arvind shadowing one each.",
  "**When does the new Set-up tab reach production?** Proposal: after the five partners' first calls, so they learn one screen at a time."
 ],
 "parts": {
  "Answer": "The steps from a brand saying yes to its first win, which we define as the first brief handed off: get the brand's own people in, let the Plays write on the first feed open, connect one real account, then make and hand off one piece.",
  "Today": "### Where a partner lands\n\n- Production, feed.joinsquareup.com, is every partner's home since 25 Oct; staging is testing only [src: memory brew-prod-backend] [src: brew commit 119dc8a]\n\n### Getting in\n\n| Step | What happens | Source |\n|---|---|---|\n| Sign in | Google sign in. Our own domains see every brand; anyone else only with the brand's own email or an invite | [src: memory brew-access-rules] |\n| Outsiders | A personal or other company email gets one wall: switch to a work email, or see the demo stores | [src: brew/public/app.js:276-288] [src: brew/public/app.js:78-90] |\n| A new read | A non official email cannot start a new read | [src: memory brew-access-rules] |\n| Teammates | Someone on the owner's company domain joins on their own; for a brand our staff claimed, the brand's site domain counts | [src: brew/auth.js:104-110] |\n| Invites | An invite is good for 14 days and works however the person arrives | [src: brew/auth.js:78] [src: brew/auth.js:101-102] |\n| Closed stores | A store read from the Shopify admin while closed is visible only to its team | [src: memory brew-closed-store-gate] |\n\n### The first read and the Plays\n\n| Step | What happens | Source |\n|---|---|---|\n| Read, check, brief | The read runs, the team checks what it found, the brief is written | [src: brew/build.js:363] |\n| Feed gate | On a brand's first read, the Plays start only when someone first opens the feed; corrections made while waiting go into the brief first | [src: brew/build.js:93] [src: brew/build.js:239] [src: memory brew-feed-open-moves] |\n| Reminders | If nobody opens the feed, the starter and owners get an \"Open my feed\" email at 3 and 24 hours | [src: brew/confirm-remind.js:114-122] [src: memory brew-feed-open-moves] |\n| Learnings | Anything dropped in, such as a deck, notes or an agency plan, becomes context; the Plays it touches are updated | [src: memory brew-drop-learnings] [src: memory brew-absorb-all-learnings] |\n\n### Connecting accounts\n\n| Account | How, today | Source |\n|---|---|---|\n| GA4 | Add the service account as Viewer, paste the property ID | [src: brew/docs/connectors-approvals.md:10] |\n| Klaviyo | A read only private key, pasted | [src: brew/docs/connectors-approvals.md:11] |\n| Judge.me | The API token, pasted with the store address | [src: brew/docs/connectors-approvals.md:12] |\n| Shopify | The brand makes its own app in the Shopify Dev Dashboard and pastes the client ID and secret; one click waits on Shopify's review, submitted 21 Oct | [src: brew/docs/connectors-approvals.md:13] [src: memory brew-shopify-app-review] |\n| Meta Ads | One click, but until App Review the brand's Meta admin must first get a role on our app | [src: brew/docs/connectors-approvals.md:25-29] [src: memory brew-meta-app-review] |\n| Google Ads | One click; Google shows an unverified app screen, 100 user cap | [src: brew/docs/connectors-approvals.md:19-24] |\n| Slack | One click, pick the channel | [src: brew/docs/connectors-approvals.md:15] |\n| Who may connect | Only the owner or our staff; teammates can only sync | [src: memory brew-real-connectors] |\n| After the first connect | The run waits 30 minutes for more accounts and each first read, then rewrites the Plays privately, capped at $40 | [src: brew/build.js:1070] [src: memory brew-connect-refresh] |\n| Arata | Its connections are protected and never touched | [src: brew/connectors/protected.js:3] |\n\n### What is not on production yet\n\n- The new jam Set-up tab is kept on staging, so partners do not see it yet [src: memory brew-setup-v2]\n- Sloosh needs a staff sign in on each site before finals work there [src: brew/docs/production.md:125-126]",
  "Tomorrow": "| Item | Version | Tag |\n|---|---|---|\n| Paste your store, sign in with a work email, watch it read while answering three quick questions, see one finding, then the first win | v1 | Changes, from about 11 screens and 14 choices today |\n| The first win bar: heart one, make one, hand off one; it leaves once all three are done | v1 | New |\n| Activation is the first hand off | v1 | New |\n| Four ways in land on the same Today: founder, invited teammate, agency per brand, Shopify install | v1 | Changes |\n| Nothing nags until the next Monday's picks | v1 | Changes |\n| One click Shopify and Meta once the platform reviews pass | v1 | Changes |\n\n[src: brand-directions/book/content/c1.js c-1b path, who-onboards, activation, after-day-one]",
  "How we do it": "### Before the call\n\n1. Confirm the brand's read is done on production and its Plays are written. Open three Play PDFs and one jam.\n2. Check that nothing dummy shows on the brand's feed.\n3. For Meta, add the brand's Meta admin to our app's roles in advance.\n4. Send the [design partner agreement](/sales-and-partnerships/contracts).\n\n### On the call, 30 minutes\n\n1. The brand's owner signs in at `https://feed.joinsquareup.com/<slug>` with their work email.\n2. They open the feed. If it is a first read, this starts the Plays.\n3. Walk What we know about the store; fix anything wrong on the spot.\n4. Connect one account. Shopify through their own app is the strongest first choice.\n5. Invite one teammate from Team.\n6. Open one card with a first draft, make one version, then share the brief with whoever ships it.\n7. Agree the weekly 15 minute check in.\n\n### After the call\n\n1. Log the call in the [partner feedback log](/product/partner-feedback-log) the same day.\n2. Check 30 minutes later that the connected rewrite ran:\n\n```\ngcloud run jobs execute brew-ops --region=asia-south1\n```\n\n3. Update the brand's page and the [pipeline](/sales-and-partnerships/pipeline) stage.",
  "Numbers": "| Metric | Definition | Where measured | Status |\n|---|---|---|---|\n| Time to team in | From read done to the first brand email joining | `private/members.json` | Proposed |\n| Time to first connect | From first sign in to the first real account reading | Connector ledger | Proposed |\n| Time to first hand off | From first sign in to the first brief shared or sent | Jam records | Proposed, the activation metric |\n| Feed gate wait | Hours from the brief to the first feed open | `status.feedWaitSince` to `feedOpenAt` | Proposed |",
  "Open": "1. **Is the first hand off the activation we count?** Proposal: yes, first hand off within 7 days of the first sign in.\n2. **Does every partner onboard on a call, or alone?** Proposal: on a call for the five design partners; alone, with the first win bar, for everyone after.\n3. **Who runs the calls?** Proposal: Param for the five, with Sai or Arvind shadowing one each.\n4. **When does the new Set-up tab reach production?** Proposal: after the five partners' first calls, so they learn one screen at a time."
 }
}