Salesbrum
Set in Poppins, standing in for a logo. The mark is still to be designed.
One app for the whole of a social-media business.
“Salesbrum is DistroKid for social-media business”
- Post once and it fans out natively to every platform.
- Every DM and comment lands in one inbox.
- Every sale becomes an invoice and a customer record.
This page is written for the product designers, brand and logo designers, and copywriters joining the work. Read it once and you should be able to design and write for Salesbrum without opening a specification.
Who this is for
Chioma, and the phone she runs her business on
She sells ready-to-wear in Aba. She has 4,300 Instagram followers, a Facebook page her cousin set up, and a WhatsApp number that is also her personal number.
Everything below is a design constraint rather than background colour. Each one changes what we are allowed to build.
- She pays for her own data By the megabyte. Nothing auto-plays or auto-downloads, and images load lazily at display resolution.
- She may be sharing the phone Sessions expire, and money actions ask her to confirm it is her.
- Her connection drops Drafting a post or an invoice works offline, and the queue is visible.
- She is checking work, not browsing Usually late at night. Density is high on purpose.
- She sells in naira Money is always shown with the ₦ glyph, thousands separators, and figures that line up in a column.
The line that shapes the whole product
Her customers never sign up, log in, or install anything. The seller stays the face of her own business.
The posture
“an instrument, not a feed”The visual posture. The register is “slick but unshouty”.
What goes wrong today
Five things break, and they break together
- Orders get missed. Enquiries arrive as DMs, comments and story replies across platforms. Spreadsheet-plus-WhatsApp tracking collapses at volume.
- Payment state gets lost. Who paid, who hasn’t, which transfer matches which order, tracked by memory and screenshots.
- Evenings are app-shuffling chaos. Post on each platform separately, then answer each platform’s inbox separately.
- Money is opaque. Sellers see revenue, never profit.
- Demand is terrifying. A slow week is an emergency the seller has no tools to fight.
In sellers’ own words
“If order no come, I’m finished.”A seller, on the fear that sits under a slow week.
“I keep paying bills, is it even worth it.”A seller, on not knowing profit from revenue.
“Some customers stress me more than the money they pay, especially friends.”A seller, on the cost of running a business in a personal inbox.
Client messages get “buried under family and friends’ chats.”Sellers describing a personal WhatsApp number doing business work.
Micro-retailers report managing customers “6 am to midnight.”Sellers describing the working day.
The job to be done, in her terms
“everything handled, zero mistakes.”
The idea
Consolidation is the identity
Three things belong in one place, and everything Salesbrum builds has to land in one of them.
Outbound
One caption and some photos become a native post on every platform she sells on, without her opening any of them.
Inbound
DMs, comments and story replies from every platform arrive in one threaded list, with the customer’s history beside them.
Money
The sale is made inside the conversation, becomes an invoice, and turns the buyer into a customer record on the way past.
“if a feature doesn’t consolidate the seller’s outbound, inbound, or money, it doesn’t ship.”The roadmap test.
The shape of the strategy
Fan-out is the wedge. It gives day-one value with no behaviour change, because she is already posting the same thing to four places by hand. The order and money engine underneath is the retention layer, and it compounds with every invoice she sends.
Invoice-as-checkout
“Own your audience” is a promise most products in this space cannot keep honestly. Salesbrum keeps it by turning selling into the mechanism. Every invoice creates or updates a customer record as a side effect of the sale. No scraping, no follower export. The customer records she earns through sales are the owned audience.
How it works
Four things the app does
The phones below are hand-built from the product’s own tokens and components, so they follow this page’s theme. They are pictures of the design, not working software.
Post once, land natively everywhere
- One caption and some photos become a native post per platform: Instagram a carousel with hashtags queued to the first comment, Facebook a page post, X a thread, TikTok a hook line on top.
- Media is resized and cropped per platform from one upload.
- She previews and edits each version before publishing, and edits never propagate between platforms.
- A failure on one platform never blocks or rolls back the others.
One inbox for every platform
- DMs, comments and story replies from Instagram, Facebook, WhatsApp and X in one threaded list.
- Comments are visually distinguished from DMs, because a public reply is not a private one.
- Story replies arrive as ordinary conversations, and a story reply is frequently the first message of a sale.
- Buying intent is flagged, with Reply and Move to DM offered inline.
- The customer’s history sits beside the thread.
Sell inside the conversation
- Two taps from inside the thread: pick the item, confirm the amount.
- Multi-line, because ₦16,000 set plus ₦2,500 delivery is the ordinary case, and the delivery line is marked so it never counts as a product in top sellers.
- It goes into the chat on the platform the conversation came from, carrying her own bank details and optionally a card link.
- Payment goes straight into her own account. One tap to mark paid, one tap to nudge, and she sees the nudge before it sends.
- The buyer becomes a customer record automatically. She fills in no form.
Know what the week did
- Invoiced, paid, orders and average order, with last week beside each.
- Who still owes, with a Nudge on every row.
- Where the money came from by platform, including the platforms that made nothing, because the zero is the useful number.
- Top items.
- Every figure ends in something she can do.
A night with Salesbrum
Six new pieces to post
Today that takes her ninety minutes across three apps.
- She opens Salesbrum from her home screen. Home shows three cards; the top one is Post something.
- She uploads six photos, types one caption, taps Post.
- The per-platform preview shows what each will actually receive. An amber notice on the X row says a link would cost 13 times more. She edits the X wording; the others are untouched.
- She taps Publish to 4 platforms.
- Outcome rows resolve one at a time as each platform answers. Instagram live. Facebook live. X live. TikTok queued, in amber, saying nothing is lost.
- Twenty minutes later a push notification: three new enquiries. She opens one inbox, not three. A comment on Instagram reads “how much for the blue one?”, flagged as buying intent.
- She moves it to DM, agrees ₦18,500, and taps Invoice without leaving the conversation.
- The invoice goes into the chat carrying her bank details. Ada becomes a customer record automatically. Chioma filled in no form.
- Ada pays by transfer. Chioma taps Mark paid, and the Home card that said ₦74,500 still owed rewrites itself to ₦56,000 as she watches.
Ninety minutes becomes under ten.
And when it goes wrong
If publishing fails on Facebook only, that row shows a plain reason and a retry. The other three stay live, and are said to. The evening is not interrupted.
The Sunday-night question
Was this week any good?
Five weeks in. On Sunday night she wants to know one thing.
- She opens Sales.
- ₦412,000 invoiced, ₦337,500 paid, 23 orders, each with last week beside it.
- ₦74,500 outstanding across 4 invoices. Each row a name, an amount, an age, and one button: Nudge.
- She taps Nudge on two. Salesbrum shows her the short, polite message before it sends, then sends it into the original conversation on the original platform. She composed nothing.
- Where the money came from, platform by platform.
Instagram ₦281,000WhatsApp ₦98,000Facebook ₦33,000X ₦0
X has not made her anything in five weeks, and it uses up posts from her plan. She can switch it off and keep everything else. Turn X off →
The zero is the useful number. It tells her where to stop spending effort.
- The app is volunteering that one of its own features is costing her posts and returning nothing. That is the moment she believes the numbers.
- Top items: the blue two-piece, 7 sold.
She knows what sold, who owes her, and where to spend Monday. Every number ended in something she could do.
The hardest sentence in the product
This is the clearest demonstration of the voice. She taps Connect WhatsApp, and before anything else Salesbrum says:
“Heads up — this one matters. If you move this number over, it leaves the WhatsApp app you use every day. Most sellers keep a second number for business instead.”
Two paths follow: Use a second number, or Move this one anyway. When approval is pending Salesbrum says so plainly, and says what still works meanwhile. She is not blocked, and she was not surprised.
Promises
What we promise, and what we will not build
The second list matters as much as the first. Several of these are decisions already taken, and reopening them is not part of the brief.
What we promise
- No scraping, ever Protecting the seller’s account is part of the promise, not a compliance checkbox.
- Sellers never see each other’s customer lists Her customers are hers.
- Value before setup The first post fans out before any catalogue, cost price or configuration is asked for.
- Flat fee, no cut of sales Salesbrum never touches the seller’s money and adds no fee to a sale. Payment goes straight into her own account, so there is no settlement delay.
- Every insight ends in an action A number with no next step does not ship.
- The seller stays the face of her business Salesbrum is never the brand her customer meets.
What we will not build
- Any customer-facing app No login, no portal. Her customers install nothing.
- Any scraping or browser automation Not as a shortcut, not as a fallback.
- Follower export or audience backup No social platform exposes it, and the honest replacement is invoice-as-checkout.
- Matching one seller’s customers to another seller Not a feature, and not a growth loop.
- Celebratory animation on a payment Money arriving is the job, not an achievement. No confetti, no streaks, no badges.
- An empty dashboard on first run Home is replaced by a three-step lead until she has posted once.
Now, and later
What ships first, and what is waiting
No dates here. The second column is designed and decided rather than speculative, which is why it is worth knowing about while you work on the first.
In the first release
- Fan-out publishingTo Instagram, Facebook and X.
- TikTok posting and the funnel-out linkA personal link for a TikTok bio that opens a WhatsApp or Instagram DM with a prefilled message, so TikTok demand reaches an inbox.
- Invoicing and money-inThe sale made inside the conversation.
- Customer records created by invoicingThe owned audience, earned rather than exported.
- The unified inboxEvery platform in one threaded list.
- The weekly sales summaryWhat happened, with an action on every figure.
Designed, decided, and waiting
- Money ForensicsProfit clarity with optional cost price and weekly alerts. The analytics identity the product grows into.
- Customer memoryLoyalty tiers New, Repeat and VIP, cross-sell suggestions, and due-to-buy detection.
- The order pipelineFrom enquiry through to delivered, with stall alarms.
- Fan-out intelligenceCaption tailoring and best-posting-time recommendations.
- Growth intelligenceTrend alerts and the “slow week? fight back” card.
“The dashboard is a to-do list that pays you.”The first release ships the list of what happened, not yet the list of what to do.
The standing constraint
Home is a state mirror, not an advisor. Every row is a fact the system already holds, paired with an action. No row may be a recommendation the system inferred. When the deferred work lands it adds rows there, and the container is already correct.
The design language
A working specimen, not a description
Everything on this page is already built from these tokens. What follows renders them at their real values so you can take them straight into a file.
Palette
Both light and dark are first-class. Neither is the real one. Each panel below is forced to its own ground so it reads honestly whichever theme you are in.
Light
Dark
Destructive text sits on a white foreground when it is used as a fill. That pairing is named destructive-foreground, #FFFFFF in both modes.
The Pistachio constraint, demonstrated
Both of the buttons below are real. Only one of them is allowed.
Near-black on Pistachio · 8.95:1 in light, 8.87:1 in dark · passes AA
White on Pistachio · 2.01:1 · fails AA. This is the one thing you may never do.
Pistachio is 2.01:1 against white. That is the whole constraint. It can never carry text on a light ground, and it can never take white text. It works as a fill with dark text on it, and nothing else.
“pale-green buttons carrying near-black text are a thing almost nothing else in this category does”Which is exactly why it is the identity rather than a limitation.
Why paid is blue
Blue rather than green, because the accent is green. A seller must never have to work out whether a green thing is a button or a payment.
Why amber is the only warm colour
Amber is confined to caution the seller can act on: a post that will cost more, a reply window closing, something going out private. It is never brand and never decorative. Failure is a separate colour, so “this costs more” never looks like “this broke.”
Type specimen
Poppins, weights 400, 500 and 600 only. Seven roles, no more. The ramp is narrow on purpose. Sizes are specified in px and implemented in rem against the user’s root, so a seller who has enlarged her system type gets larger text rather than a broken layout.
Why tabular figures are not optional
Naira sits in vertical lists: outstanding invoices, tiles, per-platform breakdowns. Proportional digits make those columns ragged and hard to compare. Currency is always the ₦ glyph with thousands separators.
tabular-nums
- ₦412,000
- ₦337,500
- ₦74,500
- ₦18,500
- ₦2,500
proportional
- ₦412,000
- ₦337,500
- ₦74,500
- ₦18,500
- ₦2,500
Spacing
Eight values, and nothing between them. The bars below are drawn at their real widths. Everything on this page is padded and gapped from this scale, including the rail on the left, which is the sidebar width exactly.
Shape and depth
Tighter corners than most component defaults, which is what makes the product read as an instrument.
4px · chips, status pills, Nudge
6px · buttons, inputs, notes
10px · cards
20px · the app frame
9999px · period pills, avatars
There is effectively no elevation. Cards are a muted fill on the paper, not a shadow. That is a legibility decision as much as an aesthetic one: layered shadows read poorly on the low-cost LCD panels common among these sellers, and flat fills survive sunlight better than soft edges. Media thumbnails take the 4px radius, because the seller’s own product photography is the most important image on any screen and heavy rounding crops it.
The focus ring
Tab to the button on the left to see the real one. The example on the right has the ring drawn permanently so you can measure it.
2px ring, 2px offset, never removed.
The ring as it lands on a Pistachio fill.
The 2px offset in the page background is load-bearing rather than stylistic. A single ring colour cannot serve this palette: a light ring vanishes on the pale primary fill, and a dark ring vanishes on the dark ground. Offsetting the ring onto the page means it always contrasts against the page rather than against whatever it happens to surround.
Constraints that bind
Five rules that are settled, and that a new surface has to satisfy before it is finished.
- 44px on the shortest side Every tappable control, with no exception for a small pill or a chip. The header on this page is 60px tall for exactly that reason.
- State is never carried by colour alone A comment carries a left rule and the literal word Comment. A queued platform carries the word queued, not just amber. A failure carries a reason.
- Usable at 200% text With no horizontal scrolling. Arrangement may change under enlarged type; content may not be cut off, and nothing may need a sideways scroll to read.
- Focus is never removed If you replace the ring, replace it with something at least as visible. An invisible focus state is a broken keyboard.
- Every swipe has a visible equivalent A gesture is an accelerator for people who know it is there. It is never the only way to reach an action.
One known divergence, so nobody copies it by accident: the phone screens on this page and the six linked mockups both draw the filter pills, the period pills, the buying-intent buttons, the tab bar and the small inline buttons below 44px. The designer recorded that in the mockups themselves and settled it there. 44px is what to build.
The twelve brand components
These twelve are the brand layer. Everything else is inherited unchanged, and restyling the inherited components is against the discipline.
- button-primary
- Pistachio fill with near-black text. Full-bleed inside the gutter, 44px floor. Never white text.
- button-ghost
- Transparent with a hairline border and an accent-text label. The secondary path at a two-option decision.
- home-card
- Muted fill, 10px radius, a strong title, a caption body, and a right-aligned accent action. Every home card ends in an action.
- home-card-caution
- The same anatomy on the warning surface with an amber title. The only warm surface in the product.
- platform-row
- A neutral 26px glyph tile, the platform name, a right-aligned fact, and an optional cost notice beneath.
- kpi-tile
- A label key over a money value over an optional comparison with last week. Laid out two-up with 1px seams. The comparison takes the paid blue only when it is a gain; a flat or falling period is set in the subtle foreground, because blue may never carry a loss.
- nudge-button
- Pistachio fill at the small radius, sized to sit inline at the end of an outstanding-invoice row.
- cost-notice
- The inline amber panel that says what something will cost or why it is limited. Bold amber lead clause, caption explanation after it.
- tab-bar-item
- Phone and tablet-portrait navigation. Subtle foreground, accent-text when active, 44px floor.
- sidebar-nav-item
- The same five destinations on wider screens. Active is a muted fill with foreground text, not an accent fill, because the sidebar is chrome and must not compete with the one accent on the surface it frames.
- pane-divider
- The 1px rule between list and detail. Identical to the rule between rows, deliberately: the wide layout is the phone layout given room, not a second visual language.
- focus-ring
- 2px in the ring colour with a 2px offset in the surrounding background.
Layout across four widths
| Width | Navigation | Panes | Measure |
|---|---|---|---|
| Phone | Bottom tab bar | One | Full width inside the gutter |
| Tablet portrait | Bottom tab bar | One | Centred at a readable measure |
| Tablet landscape, small laptop | Sidebar | Two on list-detail surfaces | List at a fixed width, detail takes the rest |
| Laptop, desktop | Sidebar | Two | Detail capped, surplus width becomes margin |
The discipline behind that table matters more than the table. The phone is the design target and wider screens are accommodations. Arrangement changes with width; content never does. The layout never goes full-bleed, because a very wide row of invoice text is worse than a narrow one, not better. And nothing appears on desktop that is missing on the phone.
Home is the one surface where the number of columns changes with width: one column on phone and tablet portrait, two from tablet landscape up, with the weekly-totals card spanning the full width beneath. That is permitted because the content does not change, only its arrangement. Post stays single-column at every width, because a composer split across two panes helps nobody.
Do and don’t
| Do | Don’t |
|---|---|
| Put dark text on Pistachio fills | Put white text on Pistachio — 2.01:1, fails AA |
| Use accent-text for inline links in light mode | Use Pistachio itself for small text on a light ground |
| Reserve amber for caution the seller can act on | Use amber decoratively, or for failure |
| Keep money in tabular figures with the ₦ glyph | Abbreviate money, or drop separators |
| Separate content with 1px rules | Add shadows to cards to create hierarchy |
| Let every card and every figure end in an action | Ship a number with no next step |
| Inherit the base component library for everything outside the twelve brand components | Restyle the inherited dialog, toast or tabs |
| Keep the platform glyphs neutral | Colour platform rows with platform brand colours |
| One accent, one caution, one failure colour | Introduce a second brand colour, or any warm red-orange |
| Draw focus rings with a background-coloured offset | Use a single flat ring, or remove focus outlines |
| Implement the type ramp in rem against the user’s root | Lock type to px and ignore the operating system’s font scaling |
| Let surplus width past the measure cap become margin | Stretch text to full-bleed on a wide screen |
| Separate panes with the same 1px rule used between rows | Float panes as cards, or separate them with shadow |
| Keep the phone layout untouched by wide-screen decisions | Design for the laptop and let the phone inherit the compromise |
| Let arrangement change with width | Let content change with width |
One more, which is not in the table but binds just as hard: platform brand colours are not used anywhere. A platform row is about what Salesbrum will do, not about whose logo it is, and four brand colours in a stack would out-shout the one accent.
How it speaks
Warm and personal, and longer than strictly necessary
Salesbrum says that something matters before it says what it is, gives the consequence in plain words, then tells the seller what other sellers do. It uses more words than strictly necessary, on purpose, because this product has an unusual amount of complicated news to deliver and a seller who is surprised by any of it has been failed.
Never apologise for the platform’s rules, and never blame the seller.
Do and don’t
| Do | Don’t |
|---|---|
| “Heads up — this one matters.” | “Warning: irreversible action” |
| “It leaves the WhatsApp app you use every day.” | “Number migration to WABA will deregister the MSISDN” |
| “Most sellers keep a second number for business instead.” | “Consider using an alternative number.” |
| “Nothing is lost — it will finish on its own and tell you.” | “Status: PENDING” |
| “Four people haven’t paid yet. The oldest is six days.” | “4 outstanding invoices” |
| “A post with a link costs 13× more on X.” | “Surcharge applies (see pricing)” |
| “You won’t be able to use it there anymore.” | “Some functionality may be affected.” |
| Name the platform in the seller’s words, “the WhatsApp app on your phone” | Platform or API jargon, “the consumer client”, “Cloud API” |
| Say what still works when something breaks | Report a failure without a next step |
Words we have settled on
- SellerNot vendor, not merchant, not user, in product copy.
- Money ForensicsCapitalised, and reserved for the deferred profit capability. Never used for the sales summary that ships first.
- Chioma and AdaChioma is the seller in every example. Ada is the customer. Keep them.
- MoneyAlways ₦18,500. Never ₦18500, never 18.5k, never without the glyph.
- Sentence case everywhereIncluding buttons. The only uppercase role is the small section label.
- English only at launchWritten in the register the sellers we are building for actually speak.
One statistic is banned
“91% of Nigerian SMEs operate mainly on WhatsApp” has no primary source. It must never appear in any Salesbrum material. There is no replacement figure offered here, because this page carries no market data at all.
Patterns to keep
- Second person, with contractions.
- A reassurance immediately after any bad news.
- Fact, then explanation, then a verb-phrase action ending in an arrow
- The system says “we”, the seller is “you”, the customer has a first name.
- Inference is labelled as inference.
Real strings from the product
Verbatim, so the voice is audible rather than described.
Home cards
- “3 new enquiries” / “Ada asked how much for the blue one. Two more are waiting on Instagram.” / “Open inbox →”
- “₦74,500 still owed” / “Four people haven’t paid yet. The oldest is six days — you can nudge them from here.” / “See who →”
- “TikTok is still queued” / “From your 21:05 post. Nothing is lost — it will finish on its own and tell you.” / “Check it →”
First run
- “One post, everywhere you sell.”
- “No catalogue, no bank details, no setup. Connect one account and put something up — you can do the rest whenever you like.”
- “Takes about two minutes. Nothing is charged yet.”
Post result
- “4 of 5 live”
- “TikTok is still going. You don’t need to wait — it will finish on its own and tell you.”
- “Nothing is lost. If TikTok is still queued in an hour we’ll retry it for you.”
Cost caution
- “No link on this one. A post with a link costs 13× more on X. Add one and we’ll show you the cost first.”
TikTok state
- “Going out private — TikTok hasn’t approved public posting for us yet. We’ll tell you the day it changes.”
Buying intent, labelled as inference
- “Looks like she wants to buy”
Reply window
- “You have 21 hours to reply. Instagram closes the window a day after her last message — we’ll warn you before it does.”
Invoice
- “Send into the chat”
- “Goes to Ada on Instagram, where you were talking”
- “Paystack pays straight into your own account. Salesbrum never holds your money and adds no fee.”
The X zero
- “X hasn’t made you anything in five weeks — and it uses up posts from your plan. You can switch it off and keep everything else.”
- “Turn X off”
Empty states
- One sentence saying what will appear here and the action that causes it. Never an illustration.
The screens as designed
Six mockups, annotated
These are the designer’s own renderings, annotated, with light and dark on the same page. Each opens in a new tab.
What we need from you
Three briefs
Each one separates what is already settled from what is genuinely open. The settled half is not a starting point for debate; the open half is where the work is.
Product designer
Already settled, do not redesign
- Five destinations named Home, Inbox, Post, Sales and More.
- Home first, and Home as a state mirror.
- The palette and the type ramp.
- No elevation.
- The four-width layout rules.
Open and wanted
- The surfaces that have no mockup yet, notably customers, connections, plan and usage, and data and privacy.
- The empty and error states across every surface.
- The icon set for the five destinations and for the platform glyphs, kept neutral.
- The install and notification prompts.
- The shape of the first-run lead.
Brand and logo designer
There is no logo yet.
What exists
- The name Salesbrum.
- The pistachio green, and Poppins.
- The posture: “an instrument, not a feed”, “slick but unshouty”.
Constraints that bind
- The mark has to work at 20px in a bottom tab bar, and on a phone home screen.
- Pistachio cannot carry small text on a light ground, so a green wordmark is not available.
- There is no second brand colour, and no warm red-orange.
- There are no gradients on surfaces.
- The mark must hold in both light and dark, neither of which is the real one.
Wanted
- Wordmark, app icon, and the smallest legible lockup.
Copywriter
What exists
- The register above, and the strings in the product today.
Wanted
- The first-run and paywall copy.
- The plain-language permission explanations, said in the seller’s terms rather than the platform’s, one per platform.
- The nudge messages the seller sends without writing them.
- The whole family of caution and limit messages.
- The empty states.
- The notification strings, which must say who, which platform, and that it is waiting, and nothing more.
The states that need words
The caution and limit family and the empty states are both asked for above, so here is the list rather than a guess at it. One line each, and every one of them needs the register described in the previous section.
- Partial successSome platforms took the post and some did not. Say which are live before saying which are not.
- QueuedA platform has it but has not finished. Nothing is lost, and she does not have to wait for it.
- Platform failedOne platform refused. A plain reason, a retry, and a sentence saying the others are still live.
- OfflineThe phone has no connection. Lead with what she can still do rather than what she cannot.
- Draft queued offlineA post or an invoice written with no connection, waiting to go out. The queue is visible and she can see her place in it.
- Reply window closingShe has hours rather than days to answer in this thread. Warn her before it shuts, not as it shuts.
- Reply window closedThe platform will no longer deliver a reply here. Say what she can do instead.
- Approaching a limitShe is near a ceiling the plan counts. Say it early, while she can still change what she does.
- At a limitThe ceiling is reached. Say what still works, and what lifts it.
- Throttled by a platformThe platform is holding her back, not Salesbrum. Never apologise for their rules, and never blame her.
- Permission dropped after connectingA connected account has withdrawn something. Name what stopped working and how she gets it back.
- Invoice sent and immutableOnce it is in the chat it cannot be edited. She has to know that before she sends, not after.
- No customer recordA conversation with nobody behind it yet. Say what creates one.
- TikTok private-onlyPosts go out private until TikTok approves public posting for us. We tell her the day it changes.
Where to ask
Bring questions to the product channel rather than guessing. If a constraint on this page looks wrong, say so early: several of them are load-bearing, and a few are simply the first answer we found.
The full written specification lives in _bmad-output/ for anyone who wants it. You should not need it to do the work described above.