---
id: "2.3"
title: "v2 PRD"
dept: product
status: draft
owner: Param
branded: false
last_verified: 2026-10-26
sources:
  - "brew origin/main b91e364: SCOPE.md:14, SCOPE.md:36-38, docs/connectors-approvals.md"
  - "brew origin/main: public/post-open.js:43, slack-routes.js:2, brief-status.js:8"
  - "brand-directions/docs2/content/pages.mjs:200-229, 262-280, 312-360; decisions.mjs:8; inventory.mjs ENDS"
  - "brand-directions/BRIEF.md section 3.6"
  - "brand-directions/_shared/product-model.md:56-58, 110"
  - "brand-directions/book/content/a.js a-5 v2; c1.js c-3 approvals-later, c-4 dial, versions, exits, per-area, groundwork; d1.js d-4 j-post-schedule"
  - "brew working tree docs/pricing.md:17-22, not on origin/main"
  - "memory: brew-meta-app-review, brew-google-oauth-scopes, brew-shopify-app-review, brew-real-connectors, brew-copy-and-open, brew-jam-v2, brew-name-and-scope"
---

# v2 PRD

## Answer

v2 adds one power on top of v1: after a person's yes, Brew posts or schedules the finished piece on the brand's own connected accounts, and saved workflows start a Play when something happens, always stopping for that yes.

## Today

### What exists that v2 builds on

| Piece | State today | Source |
|---|---|---|
| Posting | Brew posts nothing anywhere except the brand's own Slack thread | [src: SCOPE.md:14] [src: SCOPE.md:36-37] |
| Copy and open | The manual post: copies the words and opens the exact place to post, prefilled on Reddit, X, LinkedIn and Pinterest | [src: public/post-open.js:43] [src: memory brew-copy-and-open] |
| Publish pack | Every size, the words, links and a readme saying where each part goes | [src: brand-directions/docs2/content/inventory.mjs ENDS] |
| Post or schedule for you | Listed as Off, New, v2 in today's inventory | [src: brand-directions/docs2/content/inventory.mjs ENDS] |
| Workflows | 20 templates in five groups, documented and specified, not built; every template starts off and every run stops for a yes | [src: brand-directions/docs2/content/pages.mjs:338-360] [src: brand-directions/docs2/content/decisions.mjs:8] |
| Workflow rules | Starts off, every run makes a card, a post or spend waits for a yes, a weekly cap, pause, undo and history on every run | [src: brand-directions/docs2/content/pages.mjs:215-221] |
| Workflow states | Off, On, Waiting, Paused | [src: brand-directions/docs2/content/pages.mjs:222-227] |
| Slack | Posts cards and jams to the picked channel; a change or paid make from Slack is a proposal that runs only on a yes | [src: SCOPE.md:14] [src: slack-routes.js:2] |
| Scheduling slots | The retired Jam v2 had a "pick a day" slot picker | [src: memory brew-jam-v2] |

### What blocks posting

| Platform | Access held today | What posting needs | Source |
|---|---|---|---|
| Meta | App Review asks only ads_read, business_management, public_profile; ads_management and Pages, Threads and WhatsApp permissions were removed; business verification in review | Publishing permissions and a fresh App Review | [src: memory brew-meta-app-review] |
| Google | Verified for adwords and analytics.readonly on 21 Oct; any new scope triggers review again | No organic posting surface needed for v2 | [src: memory brew-google-oauth-scopes] |
| Shopify | Read scopes only; public app submitted 21 Oct | Write scopes for any page or product change | [src: docs/connectors-approvals.md] [src: memory brew-shopify-app-review] |
| Klaviyo | Read only private key | A write key for drafts or sends | [src: docs/connectors-approvals.md] |

### Price proposal

v2 plan at $119 or ₹7,999 a month, $18 or ₹1,500 into the wallet, still a proposal [src: brew working tree docs/pricing.md:17-22].

## Tomorrow

| Item | Version | Tag | What it is |
|---|---|---|---|
| Schedule it, the second exit | v2 | New | Beside Hand it off in the one sheet behind Make it; shows only where the dial and the connection allow it [src: book c1.js c-4 exits] |
| Prepare | v2 | New | Files ready per channel, posted with one tap from a connected account [src: brand-directions/BRIEF.md 3.6] |
| Need your yes as the control centre | v2 | Changes | Every post and schedule asks here: one question, what happens either way, Yes and Not now, undo until it goes out [src: brand-directions/_shared/product-model.md:56-58] |
| Work columns Scheduled and Live | v2 | New | After Handed off [src: brand-directions/_shared/product-model.md:110] |
| The dial per area and channel | v2 | New | Suggest, Prepare, Schedule; every brand starts at Suggest; turning down is always allowed |
| Workflows | v2 | New | A saved Play with a trigger, what it reads, the jam it makes and how it ends; until posting ships for a channel it ends in a brief or a pack |
| Workflow cap | v2 | New | A weekly cap per workflow so a busy trigger cannot run up a bill |
| Hand it off | v2 | Stays | Never goes away |
| Copy and open | v2 | Stays | Still the way to post where Brew has no write access |

### Requirements with acceptance

| Requirement | Acceptance |
|---|---|
| Nothing posts without a yes | A post or schedule exists only after a Yes in Need your yes from a person allowed to give it |
| Undo until it goes out | A scheduled post can be cancelled until its time; the cancel leaves a line in the jam |
| The post is the approved version | What goes out matches the version, words, link and size that were approved, byte for byte |
| A failed post says so | A refused or failed post shows the platform's reason and never reads as posted |
| Every run makes a card | Each workflow run lands in the feed or Need your yes, with what it read and what it made |
| Starts off | Every workflow template is off until an admin turns it on |
| Cap holds | A workflow that hits its weekly cap moves to Paused and says why |
| Read only stays the default | A connection without write access never shows Schedule it |

### Groundwork v2 needs from v1

Each pick stores its destination channel, the brief is saved as structured data, a decision log of hearted, made and handed off, and one status field that can grow [src: book a.js a-5 v1].

### Workflow templates, first set

All 20 are listed in [workflows spec](workflows-spec.md). The groups are Listen, Catalog, Ads and site, Calendar, and Briefs and posting [src: brand-directions/docs2/content/pages.mjs:360].

## How we do it

1. Pick the first channel and request only its publishing permission; do not bundle scopes.
2. Build the groundwork in v1 first, behind switches.
3. Add Schedule it behind a per brand switch; turn it on for one partner.
4. Record the platform review screencast on a test brand, never on Arata [src: memory never-disconnect-arata-meta].
5. Turn on one workflow template at a time, starting off for every brand.

## Numbers

| Metric | Definition | Where measured | Status |
|---|---|---|---|
| Approved post rate | Share of hand-offs that become an approved scheduled post | Decision log | Proposed |
| Undo before send | Share of scheduled posts cancelled before their time | Decision log | Proposed |
| Post failures | Posts the platform refused, per week | Post log | Proposed |
| Workflow yes rate | Share of workflow runs that get a Yes | Need your yes log | Proposed |

## Open

1. **Which channel posts first?** Proposal: Instagram and Facebook Page posts through Meta, because the Meta app and business verification are already in progress.
2. **Who may approve a post?** Proposal: admins and members both may approve, only admins may turn the dial up.
3. **Which three workflows ship first?** Proposal: Answer a new question about you, Get ready for a festival, Brief your agency on a heart, since each can end in a brief before posting exists.
4. **Does Prepare need write access?** Proposal: yes, so Prepare and Schedule ship together per channel.
5. **v2 price.** Proposal: keep $119 or ₹7,999 as the working number and decide with Sai after the partnership.
