Content & Writing
3 skillscontent-calendarA script that resolves the assigned monthly topic - and never fabricates one.
How to look it up.
It runs a script. Client and period both accept loose input, so aliases like M&S, ATL, or jbgs resolve, months work as Aug, August, or 2026-08, and weeks work as week 5.
python3 lookup.py "<client>" "<period>" # e.g. "Atlantic Builders" "August"
python3 lookup.py "<client>" # full calendar for that client
python3 lookup.py --list # all clients plus coverage
The script resolves the alias, normalizes the period, and prints the matching title. That exact title is the post topic.
Reading the result, four cases:
- One match. That's the topic. Hand off to the content skill.
NO CALENDAR ON FILE. Currently Nexton, The Grove Frisco, and Ponder. No assigned topic. It does not fabricate one; it tells you the client has no calendar and asks what topic you want, or offers to propose options.- Multiple matches. Some clients run several posts in one month (Grenadier especially), and a bare month name can hit two different years. The script flags the most likely row with
>>(the soonest entry on or after today). If you named a year that disambiguates; otherwise it confirms which one you mean rather than assuming. - No match for that period. The script prints the client's full calendar so you can see what's actually scheduled, and surfaces that rather than guessing.
Notes it carries.
"This month" and "next month" resolve against today's date. Miller & Smith rows include a planned publish date, surfaced when relevant. JBGS Living is sequenced by week 1–12 rather than by calendar month. If a requested client isn't in the list at all it says so rather than silently treating them as a no-calendar client. Topics get added or changed by editing calendar.tsv, which the script reads live.
client-blog-voiceDrafts in the client's authentic voice, then audits against 15 AI-cadence tells.
Step 1 - find the voice profile.
It looks in clients/ for a <client-name>.md profile and reads it if one exists.
Step 2 - build the profile if it's missing.
It needs 2–3 pieces of the client's own published writing as reference. It prefers posts the client wrote themselves over agency-written ones, because the point is matching the authentic voice rather than copying prior AI output. If it isn't sure which posts are client-authored, it asks. Then it fetches the posts, fills out the voice-profile template, and saves the result to clients/<client-name>.md so the profile accumulates for next time.
Steps 3–4.
Read the brief (topic, target length, required links or facts, SEO targets, and the CTA). Then draft in the profiled voice - matching the profile's cadence, point of view, formality, list habits, opening style, and closing/CTA style.
Step 5 - run the self-audit and revise.
Marked as the step where most of the AI cadence actually gets removed, and explicitly not skippable. The 15 cadence rules it audits against:
- Vary sentence length hard. The single biggest tell. At least one genuinely long (25+ word) subordinated or cumulative sentence every few paragraphs, allowed to flow with embedded clauses. Never three short sentences stacked unless the client's own profile does that.
- Kill the rhetorical-question-then-payoff beat. "And the best part? You don't have to go far." Convert to declarative or fold into a longer sentence.
- No fragments for punch. "As in, you can walk." reads as manufactured rhythm.
- Ration the rule of three. Triads feel natural once and robotic by the fourth time. Vary list length and fold most lists into running prose.
- No em dashes.
- Vary how sections open. If every section starts with a one-sentence thesis, the shape itself signals AI.
- Cut AI vocabulary and promotional inflation. Vibrant, bustling, nestled, boasts, elevate, a testament to, in the heart of, look no further, when it comes to, in today's world, whether you're X or Y. Plus quasi-spiritual inflation: ritual, sanctuary, sacred, tapestry, symphony, journey, magic, soul, embrace. "Ritual" in particular reads as cultish applied to everyday things like a walk or a coffee run - call the thing what it is: a habit, a routine, a tradition, a favorite spot. Also intention-attribution (thoughtful, intentional, curated, seamless, elevated, designed to) and stacked intensifiers (really, very, truly, incredibly, absolutely, simply).
- Avoid negative parallelism. "It's not just a house, it's a home."
- Ground claims in specifics. Real numbers, names, places instead of "renowned" or "world-class."
- End on something concrete, not a recap. No "In short," "All in all," "At the end of the day."
- Show significance, don't assert it. Cut "that's the whole point," "that's the beauty of it," "that's exactly why it matters." Also cut audience-widening hedges like "for anyone who travels, or simply wishes they could."
- Cut hedge-stacking. Within what's true and legally safe, commit: "the math favors the townhome owner," not "the math tends to often favor."
- Use concrete verbs, not abstract noun phrases. The offers / provides / delivers / features / boasts / ensures pattern is core AI texture. "Someone else mows the lawn, so your Saturdays are yours," not "offers a low-maintenance lifestyle."
- Vary paragraph length. A one-line paragraph next to a longer one is one of the strongest human signals.
- Give the piece a spine. Concede a real tradeoff and then make the case anyway: "a townhome won't give you a sprawling backyard; what it gives you instead is your weekends."
Step 6 - deliver.
If the brief forced a deviation from the client's normal voice (a legally required disclaimer or a mandated phrase), it notes that briefly so a human can decide. Carries a standing warning not to overcorrect into blandness.
humanizerA taxonomy of named AI tells, each with before/after - leads with soul.
Works through a taxonomy of named AI tells, each with before and after examples.
It leads with personality and soul
rather than mechanics, on the argument that writing can be technically clean and still lifeless. That section covers the signs of soulless writing even when it's clean, how to add voice, and a worked before/after.
Content patterns.
(1) Undue emphasis on significance, legacy, and broader trends. (2) Undue emphasis on notability and media coverage. (3) Superficial analyses with -ing endings. (4) Promotional and advertisement-like language. (5) Vague attributions and weasel words. (6) Outline-like "challenges and future prospects" sections.
Language and grammar patterns.
(7) Overused AI vocabulary words. (8) Copula avoidance (avoiding "is" and "are"). (9) Negative parallelisms. (10) Rule of three overuse. (11) Elegant variation (synonym cycling). (12) False ranges.
Style patterns.
(13) Em dash overuse.