diff --git a/marketing/README.md b/marketing/README.md new file mode 100644 index 0000000..c2c5dbb --- /dev/null +++ b/marketing/README.md @@ -0,0 +1,24 @@ +# Marketing tree + +One voice, one place. Every later artifact draws on `positioning.md` — do not +invent framing per-asset. + +``` +positioning.md # source of truth: wedge, voice, banned phrasings, approved claims +calendar.json # scheduled pushes: date, channel, status +briefs/.md # per-channel rules, format, limits, what "good" looks like +drafts// # agent output: copy.md, assets/, rationale.md +pending/ approved/ posted/ # human gate by directory move +metrics/weekly.md # funnel snapshot, generated +listening.md # buying-intent threads + drafted replies +``` + +## Hard rule + +**`approved/` is the only thing a human ever publishes from. Nothing posts itself.** + +Workflow: agent drafts into `drafts//` → moves to `pending/` when complete → +a human reviews and moves it to `approved/` → the human publishes from `approved/` +under their own account → the artifact (or a pointer) lands in `posted/`. + +Nothing in `drafts/` or `pending/` is ever publishable, by anyone, by any means. diff --git a/marketing/approved/.gitkeep b/marketing/approved/.gitkeep new file mode 100644 index 0000000..4e1dc34 --- /dev/null +++ b/marketing/approved/.gitkeep @@ -0,0 +1 @@ +# approved diff --git a/marketing/briefs/.gitkeep b/marketing/briefs/.gitkeep new file mode 100644 index 0000000..96b5b82 --- /dev/null +++ b/marketing/briefs/.gitkeep @@ -0,0 +1 @@ +# briefs diff --git a/marketing/calendar.json b/marketing/calendar.json new file mode 100644 index 0000000..a7fede6 --- /dev/null +++ b/marketing/calendar.json @@ -0,0 +1,4 @@ +{ + "$comment": "Scheduled pushes: date, channel, status. Statuses: draft | pending | approved | posted. Move nothing to posted without the artifact living in approved/ first — see positioning.md rule 5.", + "pushes": [] +} diff --git a/marketing/drafts/.gitkeep b/marketing/drafts/.gitkeep new file mode 100644 index 0000000..2c121c7 --- /dev/null +++ b/marketing/drafts/.gitkeep @@ -0,0 +1 @@ +# drafts diff --git a/marketing/listening.md b/marketing/listening.md new file mode 100644 index 0000000..a3db9f5 --- /dev/null +++ b/marketing/listening.md @@ -0,0 +1,15 @@ +# Listening — buying-intent threads + +Agent-found threads where someone is describing a problem The Nook solves, with a +drafted helpful-first reply. Replies are drafted here, reviewed, and posted **by a +human** with a single disclosed mention — helpful first, product second. + +Rules: + +- Real threads only — no invented scenarios. +- The drafted reply must stand alone as a helpful answer if the mention is removed. +- One disclosed mention per reply, maximum. +- Never post from this file; replies move through `approved/`. + +| Date | Source | Thread | Problem signal | Drafted reply | +|---|---|---|---|---| diff --git a/marketing/metrics/weekly.md b/marketing/metrics/weekly.md new file mode 100644 index 0000000..766ca5c --- /dev/null +++ b/marketing/metrics/weekly.md @@ -0,0 +1,4 @@ +# Weekly funnel snapshot + +Generated weekly from the analytics DB + `trials`/`licenses`/`activations`. +Format: the funnel numbers, what moved, and the one thing worth acting on. diff --git a/marketing/pending/.gitkeep b/marketing/pending/.gitkeep new file mode 100644 index 0000000..6a7e93a --- /dev/null +++ b/marketing/pending/.gitkeep @@ -0,0 +1 @@ +# pending diff --git a/marketing/positioning.md b/marketing/positioning.md new file mode 100644 index 0000000..511b2aa --- /dev/null +++ b/marketing/positioning.md @@ -0,0 +1,95 @@ +# The Nook — Positioning (source of truth) + +Every drafted asset draws its voice, claims, and constraints from this file. If an +artifact invents its own framing, fix the artifact or fix this file — never both +silently diverging. + +Primary source: `~/Code/the-nook/docs/marketing-strategy.md`. + +## The sentence + +> **Your Mac and your agents, under control.** The Nook puts your whole coding-agent +> fleet in the notch — twelve agents, local or over SSH — so you see what is running, +> unblock it in one tap, and keep the machine from overheating while it works. + +## The wedge + +The thing to say over and over, in every channel, in slightly different words: + +> **An agent blocked on a permission prompt is the most expensive kind of idle.** +> You pay for the model, you pay for the wait, and you get neither. + +It is acute, quantifiable, and true — and it is the demo: a card appears, you tap +Allow, work resumes. Ten seconds, no explanation needed. + +## The bundling reframe + +Three audiences (agent herders, hardware tinkerers, glanceable-widget users) in one +$10 app reads like a grab bag. Reframe as consolidation, which is the honest story: + +> One $10 app instead of a notch toy, a fan utility, a battery limiter, a menu-bar +> stats strip, and a notification hack. Same one-time purchase, no subscription. + +Price rises to $15 at 1.0 — dated and honest, not a permanent beta. + +## Hard rules + +### 1. Category nouns, never product nouns + +`freno-dev/AGENTS.md` forbids naming any competitor in user-facing copy — landing +pages, marketing copy, comparison tables, meta descriptions, emails, FAQs, all of it. + +- Use **category nouns**: "notch app", "menu-bar monitor", "fan control utility", + "battery charge limiter", "agent notification hack". These carry the same search + intent and are fully compliant. +- Compare against **the status quo, not a competitor**: "vs. a terminal bell you + don't hear", "vs. four utilities in your menu bar", "vs. finding out an hour later." +- The rule does not reach App Store–external review replies, direct email, and + community replies written by a human, where quoting what a user said about another + tool is normal conversation. + +### 2. A claim requires a test to exist + +Copy that says "12 agents" or "no data leaves the device" must have a test backing it. +If a claim cannot be pointed at code or a test, it does not go in copy. + +### 3. Honest privacy scoping + +Telemetry and the trial email **do** leave the device. The defensible claim is: + +> **No prompt or code content leaves the device.** + +Never "no data leaves the device". + +### 4. Sell what works today + +Phone approvals are deferred until a shipped iOS app exists — no "(coming soon)" +parentheticals. The launch story is remote SSH: agents running on other machines, +visible and unblockable from the Mac's notch. + +### 5. Humans hold every account + +No agent authenticates, posts, upvotes, or DMs. No sock puppets, no self-mention +without disclosure. `approved/` **is the only thing a human ever publishes from** — +nothing posts itself. + +## Approved claims (each backed by code) + +| Claim | Backing | +|---|---| +| Twelve hooked agents, one glance | `AgentSpec.all` — claude, codex, opencode, pi, omp, hermes, openclaw, zai, gemini, cline, qwen, deepseek | +| Remote agents over SSH | `hook/setup.go` remote install path; `NOOK_HOST` TCP transport | +| Permission gate answered from a card | awaitPolicyTable + bridge directive path (`hook/normalize.go`, `serialize.go`) | +| Fan / thermal / charge control | `helper/` (privileged helper, SMC, no kext) | +| One-time purchase, no subscription | $10 → $15 at 1.0; Stripe checkout | +| macOS 14+ | 27 source files use the `@Observable` framework | +| No prompt or code content leaves the device | envelope carries session/event/terminal metadata only (see `docs/agent-interface.md`) | + +## Voice + +- Short, concrete, no hype adjectives. Numbers over adjectives ("twelve agents", + "one tap", "$10 once"). +- The notch/island is the product's home; agents are the product's point. +- Never apologize for being a utility. The utility is the point. +- Banned phrasings: competitor names (see rule 1), "AI-powered", "revolutionary", + "game-changer", "seamlessly". Unverifiable superlatives generally. diff --git a/marketing/posted/.gitkeep b/marketing/posted/.gitkeep new file mode 100644 index 0000000..9727ab8 --- /dev/null +++ b/marketing/posted/.gitkeep @@ -0,0 +1 @@ +# posted