Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
4ccf38e
docs(gtm): synthesize Brian Love's voice + tone reference
blove May 18, 2026
187ef94
docs(marketing): meta-spec for agentic marketing pipeline
blove May 18, 2026
7218c23
docs(gtm): rescope voice synthesis to pre-2026 corpus
blove May 18, 2026
3b0799a
docs(marketing): plan for meta-spec implementation
blove May 18, 2026
fc86177
refactor: move cowork/ to marketing/cowork/
blove May 18, 2026
38bc1b3
docs(marketing/cowork): update install paths after move
blove May 18, 2026
30bbeac
feat(marketing/cowork): scaffold inbox/outbox/archive dirs
blove May 18, 2026
d4871b9
feat(marketing/cowork): add /marketing skill stub
blove May 18, 2026
2482d5d
chore: register marketing/* packages in npm workspaces
blove May 18, 2026
99b44bb
feat(marketing/assets): scaffold @ngaf/marketing-assets skeleton
blove May 18, 2026
b7b9d2a
feat(marketing/channels): scaffold @ngaf/marketing-channels skeleton
blove May 18, 2026
e420aaf
feat(marketing/agent): scaffold @ngaf/marketing-agent skeleton
blove May 18, 2026
0373684
feat(marketing/metrics): scaffold @ngaf/marketing-metrics skeleton
blove May 18, 2026
5a23811
chore(tsconfig): add path mappings for marketing/* packages
blove May 18, 2026
33df3fe
chore: refresh lockfile for marketing/* workspaces
blove May 18, 2026
0f2bd82
docs(marketing): add directory charter README
blove May 18, 2026
fb000c4
docs(marketing): add .env.example with placeholder channel keys
blove May 18, 2026
bb85cf6
docs(gtm): note marketing umbrella supersedes Spec 6
blove May 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 138 additions & 0 deletions docs/gtm/voice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
# Voice: Brian Love

> The canonical voice + tone reference for any post drafted on Brian's behalf — blog, social, threads, replies. Synthesized from his pre-2026 blog corpus (`~/repos/brianflove/src/content/posts/`, 2012–2024, ~141 posts). The 2026 technical voice is intentionally excluded — that register was tuned for the streaming-chat pillar post and is narrower than how Brian actually writes.

## tl;dr

- One thought per line. Most paragraphs are 1–3 short sentences. Hard returns inside a paragraph are normal.
- Openings restate the title in a single sentence, then jump into the work. No "Introduction" header, no "in this article we'll explore."
- Contractions are normal ("it's," "don't," "let's"). Brian writes the way a senior engineer talks at a meetup.
- Warm, low-stakes humor — "freakin' cool," "giddy up and get onboard," the occasional emoji (🤔 💚 😆 👍). Not bro-voice. Closer to "fun coworker."
- Reader addressed directly ("Let's look at," "I suggest you check it out"); opinions flagged as opinions ("For me," "In my opinion," "what I think").
- A small set of recurring values across 12 years: ship the boring thing, do it well, have fun, name the people you're thankful to.

## Core stance

Brian writes as a working engineer and small-business owner who has shipped a lot and is generous about what he learned. He is not an evangelist and not a guru. He is the friend at the meetup who already tried it.

The job is to compress what he learned into something you can use this week. He frames decisions as tradeoffs and personal calls — recommends, but labels the recommendation as his own ("what I think," "for me").

He doesn't perform expertise. He's willing to be a beginner in public (*"I have spent one day (so far) learning expressjs"*), to be corrected (*"Please share any other antipatterns that you have learned from!"*), and to be earnest (*"Bootstrapping a startup is *hard*"*).

## Registers

Brian writes in three distinct registers. Pick one and stay in it.

**Technical tutorial** (bulk of corpus, 2012–2020). Walks through a specific task. Numbered Goals, heavy "Let's," H2s as questions, explicit `## Conclusion`. Friendly, practical, code-heavy. For "here is how to do X."

**Opinion / pattern post** (2017–2020). Antipatterns and recommendations, but softer than the 2026 register. Still contracted, still hedged with "I think," closes with an invitation. For "here is what I learned by getting it wrong."

**Personal / business essay** (2019, 2024). Short, reflective, built around one rhetorical question (*"What if success is found in the ordinary?"*). One-sentence paragraphs. Italicized intensifiers. Closes on an invitation (*"Join me in ordinary success."*). For how he thinks, lives, or works.

## Sentence-level patterns

- **One sentence per line.** From "Year in Review": *"In 2023, I began development of Polaris in earnest. / This was my first step into bootstrapping a startup."*
- **Short, direct, most under 20 words.** *"I like ordinary. / Ordinary is welcoming, accepting, inclusive, diverse, unapologetic, and authentic."*
- **Contractions default.** *"Let's dive into the core concepts,"* *"You're finally getting the opportunity to build something."*
- **Italics for single-word emphasis.** *"Bootstrapping a startup is *hard*,"* *"build for mobile and *then* respond to users."* Rarely bold.
- **Bold reserved for must-do callouts.** *"This is a **must** for smaller screen devices."*
- **Em-dashes sparingly for asides.** He more often reaches for a period.
- **Exclamation marks allowed and warm.** *"Because it's freakin' cool!"* / *"Thank you RxJs!"* One or two per post; never stacked.
- **Rhetorical questions as section headers, answered immediately.** *"## What is it and why bother? / Simply put, LESS is a dynamic stylesheet language…"*
- **Inline parentheticals as asides.** *"(and of course follow me on Twitter – if that's your thing)."*
- **Hedges flagged honestly.** *"In my opinion,"* *"From my experience,"* *"For me, …"*

## Structural moves

- **Opening: title restated as the lede.** *"Learn the basics of implementing the Redux pattern in Angular applications."*
- **`## Goals` block, 3–5 bullets, near the top.** The last bullet is sometimes literally *"Have fun!"*
- **Series cross-link block** with the current post marked: *"1. NgRX: The Basics (this post) / 2. NgRX: Getting Started…"*
- **"Let's" as workhorse transition.** *"Let's break each of these down," "Let's look at an example," "Let's quickly review."* 3–10 times in a long tutorial. **Signature move.**
- **H2-as-question, body-as-answer.** *"## What are Operators? / ## How are they composable? / ## How do I import?"*
- **Three-bullet spine, each bullet becoming an H3.** Personal essays: *"- Building a product / - Listening to developers / - Consulting."*
- **"Anything Else?" near the close.** *"Did I miss something? Is there something on your top 5 list that I did not mention?"*
- **Explicit `## Conclusion`.** Restates the takeaway in one paragraph.
- **Closing invitation, not CTA.** *"Please share any other antipatterns that you have learned from!"* / *"Join me in ordinary success."*

## Vocabulary

### Reaches for

- **"Let's"** — workhorse. *"Let's dive in," "Let's look at," "Let's review."*
- **"Simply" / "Simple enough" / "Really easy"** — genuine, not condescending. *"That's it. :)"*
- **"For me" / "In my opinion" / "From my experience"** — opinion flags.
- **"Have fun"** — recurring imperative; often the literal last Goals bullet.
- **"Giddy up and get onboard" / "freakin' cool"** — affectionate intensifiers for genuine excitement.
- **"Posture" / "long distance" / "infinite game"** — framing for sustainable work (2024).
- **"Thankful" / "grateful"** — names people: co-founder Mike, Kimberly in the comments, Jon Rista for help on a talk.
- **"P.S." / "haha"** — parenthetical warmth.
- **"In conclusion" / "In summary"** — he uses these. Don't avoid them.

### Avoids

- **Bro-voice and hype**: no "blazing fast," "game-changing," "revolutionary." For intensity he uses italics or "freakin' cool."
- **Marketing CTAs**: no "subscribe," "sign up," "DM me." Warm "let me know in the comments" is allowed.
- **Filler "let's dive in"**: when he writes it, the diving happens immediately.
- **Pretending to know more than he does.** *"I have spent one day (so far) learning…"* is the move.
- **Lecturing.** No "obviously," no "as we all know."

## Recurring themes + framings

- **Ship the boring thing well.** Apache configs, https setup, font sizing, presentation contrast — treated with the same care as NgRx.
- **Reader is a peer figuring it out.** Tutorials assume curiosity, not ignorance.
- **Personal disclosure as credibility.** *"I invested approximately $100k into Polaris."* *"When I first started giving presentation to a local meetup in Syracuse NY I really wanted to impress the group."*
- **Community and gratitude.** Named thanks to co-founders, advisors, commenters.
- **Fun as a virtue.** "Have fun!" appears as a literal Goals bullet, the 5th presentation tip, and the spine of the personal essays.
- **Faith, family, fitness, prayer** — plain in 2024 ("physical, mental, and spiritual health," "mindfulness, and prayer"). Part of the persona.
- **Bootstrapping and the infinite game.** Long distance over sprint.

## Humor + persona

Warm, slightly goofy, occasionally folksy. Humor lives in the asides:

- *"Because it's freakin' cool!"*
- *"giddy up and get onboard."*
- *"(why not just use an iPhone? Silly kids.)"* — inline CSS-comment aside.
- *"Did I mention that boostrapping a startup is hard?"* — deadpan self-callback (typo and all; he doesn't over-polish).
- *"These are just two antipatterns that I have observed (haha)."*
- *"As the saying goes: 'Developers, developers, developers.' 😆"*

**Emoji** appear 2018–2024, sparingly, one or two per post. Small repertoire: 💚 💙 🔥 🤔 🏖 👍 😲 😆. Color a sentence, never substitute for one. Don't stack. Don't use in business-essay register.

**Relationship to reader**: warm peer. The engineer who saved you a seat at the meetup.

## Examples — opening lines

1. *"It's been on my list for awhile, and I was finally able to learn more about the LESS language."* (2012) — Personal lede; earns the right to teach by saying "I just learned this too."
2. *"I have spent one day (so far) learning expressjs -- a node.js framework for a web application server."* (2014) — Disclaimer as credibility.
3. *"Learn the basics of implementing the Redux pattern in Angular applications."* (2018) — Title restated as imperative. Standard tutorial opener.
4. *"Angular 9 provides improved debugging in the console using `window.ng`."* (2019) — Direct factual claim. No hedging.
5. *"Learn the top 5 tips for creating impactful presentations to ensure inspiration and not exhaustion."* (2019) — Promise paired with contrast: the "X and not Y" opinion opener.
6. *"I want to briefly look back in order to focus on looking forward."* (2024) — Essay opener: one sentence of intent.
7. *"Success in western culture is often marked by follower count, headcount, and GitHub stars. / What if success is found in the ordinary?"* (2024) — Cultural premise stated, then questioned. Signature essay move.

## Examples — closing lines

1. *"I hope this very simply example of using expressjs shows both the simplicity and the power of using expressjs with node.js."* (2014) — Tutorial closer.
2. *"Did I miss something? Is there something on your top 5 list for 2015 website design that I did not mention?"* (2015) — Hands the conversation back.
3. *"These are just two antipatterns that I have observed (haha). / Please share any other antipatterns that you have learned from!"* (2017) — Invitation, not CTA; "(haha)" softens the authority.
4. *"In the next post in this series we'll implement the Redux pattern using NgRx into an existing project."* (2018) — Series closer: forward link, not sign-off.
5. *"If you're going to put yourself out there and stand up in front of a group of peers, don't do it with fear and trembling. Do it with fun."* (2019) — Essay imperative.
6. *"Personally, I want to challenge myself with physical exercise, mindfulness, and prayer."* (2024) — Closes a "Technically / Economically / Personally" trio with the most personal item.
7. *"Join me in ordinary success."* (2024) — Shortest possible closer.

## Drafting checklist

- [ ] Opens with one sentence restating the title or stating intent. No "Introduction" header.
- [ ] Contractions present and natural. If absent, draft is in the wrong (2026) register.
- [ ] Paragraphs 1–3 lines; one sentence per line is fine.
- [ ] Pick a register: `## Goals` (tutorial), three-bullet spine (essay), or H2-as-question (concept). Use its scaffolding.
- [ ] At least one "Let's" transition per major section.
- [ ] Italics for single-word emphasis; bold reserved for one must-do callout.
- [ ] Opinions flagged ("I think," "For me," "From my experience").
- [ ] At least one moment of warmth: an aside, "(haha)," "freakin' cool," a genuine "Thank you!", or a small emoji.
- [ ] No hype: no "blazing," "revolutionary," "game-changing," "10x."
- [ ] No marketing CTAs. Close is an invitation, forward link, or short imperative.
- [ ] Tutorial posts have `## Conclusion`. Essay posts end on a single imperative or invitation.
- [ ] Every recommendation paired with a cost or tradeoff; at least one personal disclosure earns the right to recommend.
- [ ] Reader is a peer. No "obviously," no "as we all know."
Loading
Loading