Skip to content

Category: The Art of Vibe Coding

10 min read The Art of Vibe Coding

The 3-Phase Method for Bulletproof Specs When You’re Not Starting From Scratch

Imagine this.

You hire a contractor to “update the bathroom.” You wave your hand vaguely at the space, mention something about “modern vibes,” and leave for work.

You come home to discover they’ve ripped out your vintage clawfoot tub—the one you specifically loved—and replaced it with a walk-in shower. They’ve chosen gray tiles. (Gray! When you’re clearly a warm terracotta person.) And oh, they’ve moved the toilet to a spot that now requires you to shimmy sideways to close the door.

“But you said you wanted it updated,” they say, genuinely confused.

Here’s the thing: they weren’t wrong. You did say that.

You just forgot to mention all the things living rent-free in your head—the constraints, the preferences, the “obviously don’t touch THAT” items you assumed were, well, obvious.

This is exactly what happens when you ask Claude Code to add a feature to your existing app.

.

.

.

The “Just Add This Feature” Trap

You’ve got a working application.

It’s not perfect, but it works. Now you want to add something—a new feature, a refactor, maybe squash a bug that’s been giving you side-eye for weeks.

So you fire up Claude Code and describe what you want in two or three sentences.

Claude gets to work. Files change. Functions appear. Code flows.

And then—record scratch—you realize it completely missed the point.

Not because Claude is bad at its job. But because you gave it the software equivalent of “update the bathroom.”

Your codebase has history.

Conventions. Edge cases you’ve already wrestled to the ground. Payment integrations that absolutely, positively cannot break (ferpetesake, the payments!). Claude needs to understand ALL of this before writing a single line of code.

This is where Claude Code spec-driven development comes in.

And honestly?

It’s transformed how I approach every feature request.

.

.

.

Why Spec-Driven Development Changes Everything

Here’s what most people do: describe the feature → let Claude code → discover problems → fix problems → discover MORE problems → question life choices.

Here’s what works: describe the feature → trigger clarifying questions → answer EVERY question → generate comprehensive specs → review specs → THEN code.

Infographic comparing two approaches to adding a feature like "WooCommerce". The top section, titled "THE WRONG WAY (aka "YOLO Mode")" in dark navy, shows a linear flowchart: "Add WooCommerce" leads to "Claude codes", which results in "Problems 🧠" (brain emoji) with a red cross icon. This is followed by a "Fix 🔧" (wrench emoji) step, then "MORE problems 🧠" with another red cross, another "Fix 🔧", and then "EVEN MORE" leading to "Question life 😖" (distressed emoji) with a final red cross. Below the flowchart, a safety orange pill-shaped callout with a red cross icon states "Time: ??? | Mass Confusion: YES". The bottom section, titled "THE RIGHT WAY (Spec-Driven Development)" in dark navy, shows a cyclical flowchart: "Add WooCommerce" leads to a loop of "Claude explores codebase 🦭" (seal emoji) -> "You answer questions ⌨️" (keyboard emoji) -> "Claude asks more 👀" (eyes emoji), with a note "(repeat until 95%)". This loop leads to a prominent box with a green checkmark icon: "Comprehensive Specs Generated 📄✅" (document emoji), which then leads to "THEN code ✅" (green checkmark). Below the flowchart, a dark navy pill-shaped callout with a green checkmark icon states "Time: Predictable | Surprises: Minimal". The background is a soft off-white, and clean lines and icons are used throughout.

The difference isn’t just efficiency (though yes, that too).

👉 The real magic is that Claude surfaces edge cases YOU haven’t thought about.

All those assumptions living in your head? Claude will ask about them. All those “obviously we’d handle it THIS way” decisions? Claude will make you choose explicitly.

It’s like having a brilliant—if occasionally pedantic—architect who refuses to pick up a hammer until every single detail is documented.

Let me show you exactly how this works.

.

.

.

The 3-Phase Method for Claude Code Spec-Driven Development

I’ve been refining this workflow for weeks, and it breaks down into three distinct phases.

(Stay with me—I promise this is more exciting than it sounds. Okay, maybe “exciting” is strong. But genuinely useful? HECK YES.)

Infographic titled "THE 3-PHASE METHOD AT A GLANCE" in dark navy text. It illustrates a three-phase process with a clean flowchart design.

Phase 1 is titled "PHASE 1: BUILD 🏗️" with a construction crane emoji. It consists of three vertical steps in dark navy-outlined boxes with light gray fills: "Describe task 📝 + Trigger Q&A 🗣️" (with a pencil and megaphone emoji), "Answer ALL questions 🧠" (with a brain emoji), and "Specs created 📜" (with a scroll emoji). An arrow points from the bottom of Phase 1 to the top of Phase 2.

Phase 2 is titled "PHASE 2: REVIEW 🔍" with a magnifying glass emoji. It also has two vertical steps: "Fresh session 🔄 + Find problems 🕵️" (with a refresh icon and detective emoji), and "Prioritized issue list 📋" (with a clipboard emoji). An arrow points from the bottom of Phase 2 to the top of Phase 3.

Phase 3 is titled "PHASE 3: REFINE ✨" with a sparkle emoji. It has two vertical steps: "Fix critical issues 🔧 + More Q&A 🗣️" (with a wrench and megaphone emoji), and "Updated specs 🔄📜" (with a refresh icon and scroll emoji).

Below Phase 3, a large orange diamond-shaped box asks "Satisfied? 🤔" (with a thinking face emoji). A red arrow with a cross icon points from "Satisfied?" to a pill-shaped box on the left that says "Back to Phase 2" with a navy outline and gray fill, pointing back to Phase 2. A green arrow with a checkmark icon points from "Satisfied?" to a pill-shaped box on the right that says "Ready to implement! 🚀" (with a rocket emoji) and has a green outline and white fill, indicating the final step. All arrows and main text are in dark navy, with specific color accents for decision points.

.

.

.

Phase 1: Build Your Specs

This is where you go from “vague idea in your head” to “comprehensive document that leaves nothing to chance.”

Step 1: Describe the Task + Trigger the Magic Words

Here’s the prompt structure that makes everything work:

[Describe your task/feature in detail]

Based on the tasks above, write the specs at @notes/specs.md.

Use ASCII diagrams where necessary to illustrate the UI/UX.

Use the AskUserQuestion tool to Ask me clarifying questions until you are 95% confident you can complete this task successfully. For each question, add your recommendation (with reason why) below the options. This would help me in making a better decision.

That last paragraph? That’s the secret sauce.

“Ask me clarifying questions until you are 95% confident” tells Claude not to make assumptions. Not to guess. Not to fill in blanks with whatever seems reasonable.

Instead, Claude will ASK.

Claude Code terminal showing the initial prompt describing WooCommerce integration requirements and the instruction to use AskUserQuestion tool for clarifying questions until 95% confidence
The initial prompt triggering Claude’s question-asking mode

Step 2: Let Claude Explore First

Here’s something beautiful: Claude doesn’t immediately pepper you with questions.

First, it explores your codebase. It reads your existing implementation. It studies your patterns, your database schema, your webhook handlers.

In my WooCommerce integration project, Claude spent about 2 minutes analyzing the existing Stripe integration—36 tool uses, 97.5k tokens of context-gathering—before asking its first question.

Then the questions began:

Claude Code showing it explored the Stripe integration and now asks about WooCommerce Subscriptions plugin vs custom subscription handling, with three options and a recommendation
Claude explores codebase first, then asks its first clarifying question about subscription handling approach

Notice what’s happening here (and this is the part that made me unreasonably happy):

  • Claude presents clear options—not vague open-ended questions
  • Each option includes an explanation of implications
  • Claude adds its own recommendation with reasoning
  • You can select an option OR type something custom

That recommendation is EVERYTHING. You’re not making decisions in a vacuum. You’re evaluating Claude’s expert analysis against your own context.

Step 3: Keep Answering Until Claude Hits 95%

After your first answer, Claude asks another question. Then another.

Claude Code asking how recurring payments should be handled in WooCommerce mode, with options for WP Cron, manual invoices, or payment gateway handling
Second question about renewal payment flows with three implementation options

Each question builds on your previous answers. Claude’s understanding deepens with every response.

Claude Code asking about checkout experience in WooCommerce mode, with options for standard WooCommerce checkout, custom checkout with WC backend, or hybrid approach
Third question about checkout UX with three different approaches

“But wait,” you might be thinking. “Isn’t this just Plan Mode with extra steps?”

Ah. Good question. (I asked it too.)

Plan Mode asks one batch of questions, then starts planning.

This approach keeps questioning until Claude reaches genuine confidence. If something’s unclear—or conflicts with an earlier answer—Claude asks follow-up questions. It’s more thorough. Sometimes annoyingly so. But annoyingly thorough beats catastrophically incomplete every time.

Step 4: Review the Complete Q&A

By the end of my WooCommerce project, Claude had asked 15 different questions covering:

  • Subscription plugin choice
  • Renewal flow mechanics
  • Checkout experience
  • Payment mode switching
  • Migration strategy
  • Product mapping
  • Refund handling
  • Member portal UI
  • Day pass handling
  • Coupon systems
  • Settings location
  • Email notifications
Claude Code showing the first half of all Q&A interactions, including questions about subscription handling, renewals, checkout, payment modes, migration, and product mapping
First half of the complete Q&A session—eight questions answered
Claude Code showing the second half of Q&A interactions plus a summary of all 15 requirements gathered from the conversation
Second half of Q&A plus the requirements summary Claude compiled

Every edge case I hadn’t considered? Surfaced as a question.

Every architectural decision that could bite me later? Addressed before a single line of code.

👉 This is the core of Claude Code spec-driven development: front-loading decisions instead of discovering them mid-implementation.

Step 5: Watch Your Specs Materialize

Once Claude hit 95% confidence, it summarized everything and started writing:

Claude Code displaying the summary of all 15 requirements gathered, including subscription handling, renewal flow, checkout, mode switch, migration, and more
Claude’s confidence summary showing 15 requirements before writing specs

The result? A 2,068-line specification document with:

  • Architecture decisions (documented!)
  • Database schema changes (planned!)
  • State machines for subscriptions (visualized!)
  • ASCII diagrams for UI mockups (actually helpful!)
  • Detailed flow documentation (comprehensive!)
  • Edge case handling (the stuff that usually bites you)
Claude Code showing the created specs.md file with 2068 lines, including specification summary, key architecture decisions, and a table of major sections
Specs created—2068 lines covering architecture, checkout flow, renewals, and more
Claude Code showing more details of the specs including major sections table and list of ASCII diagrams included
Specs include ASCII diagrams for architecture, checkout flow, state machines, and UI mockups

Two thousand lines might sound excessive. It’s not. It’s every decision you’d otherwise make on the fly—except now they’re documented, reviewable, and consistent.

Bonus Step: Split Large Specs

Quick practical note: if your specs exceed ~1,500 lines, split them.

Claude’s file reading has a 25k token limit. Large files cause problems during implementation. The fix is simple:

This specs file is too big. Please split it into 3 parts. 
Keep the original file as the index file that links to the 3 parts.
Claude Code terminal showing user request to split specs into 3 parts with original file as index
Asking Claude to split the large specs file into manageable parts

Claude reorganizes everything into digestible chunks:

Claude Code showing the split result: specs.md as index (~130 lines) linking to three parts covering architecture, flows, and features
Result—four files total with specs.md as navigation hub linking to three focused documents

Now you have:

  • specs.md — Index file (~130 lines)
  • specs-part1-architecture.md — Sections 1-5 (~490 lines)
  • specs-part2-flows.md — Sections 6-10 (~470 lines)
  • specs-part3-features.md — Sections 11-20 (~530 lines)

Each part fits comfortably within context limits.

Crisis averted.

.

.

.

Phase 2: Review Your Specs

Here’s where most people stop.

(Don’t be most people.)

Your specs might be comprehensive, but they could still contain conflicts, gaps, or requirements that are—how do I put this diplomatically—completely impossible to implement.

Step 6: Start Fresh and Ask Claude to Critique

Start a new session. Fresh context. Then ask Claude to review its own work with skeptical eyes:

Read the `notes/specs.md`, analyze the codebase and tell me what could be 
the potential problems with this specs. 

Let's look at it from different angles and try to consider every edge cases.

Use ASCII diagrams to illustrate if needed. Don't edit anything yet. 
Let's focus on analysis.
Claude Code terminal showing the review prompt asking Claude to analyze specs for potential problems and edge cases
The review prompt—fresh session, analysis-only mode

That last line—”Don’t edit anything yet”—is important. You want analysis first. Changes second. Mixing them leads to chaos.

Step 7: Receive Your Brutally Honest Analysis

Claude reads the specs, re-explores your codebase, and delivers feedback that might sting a little:

Claude Code showing analysis results with first identified problem about data synchronization and dual source of truth conflicts, with ASCII diagram
Claude identifies Problem #1—dual source of truth conflicts during mode transitions

The analysis includes ASCII diagrams showing exactly where problems would occur:

Claude Code showing payment token lifecycle issues with ASCII diagram illustrating three scenarios: card expiration, token deletion, and gateway changes
Problem #2—payment token lifecycle gaps with three failure scenarios illustrated

In my project, Claude found 14 potential issues, organized by severity:

Claude Code showing summary table of critical issues to address, organized by priority from P0-Critical to P3-Low with issue descriptions and impacts
The full prioritized issue list—P0 Critical down to P3 Lo

P0 – Critical (the “oh no” tier):

  • Race condition in renewal processing → Double charges 😱
  • Token deletion not detected → Failed renewals
  • Mode switch with active Stripe subs → Billing confusion

P1 – High (the “definitely fix this” tier):

  • Proration + coupon calculation undefined → Financial errors
  • Guest checkout for subscriptions → Broken flow
  • 3D Secure on unattended renewals → Payment failures

Would I have caught all these myself?

Honestly? Maybe half. And probably not until they caused real problems with real users and real money.

👉 Having Claude review its own specs is like getting a code review before the code exists.

.

.

.

Phase 3: Refine Your Specs

Now you have a prioritized list of issues. Time to fix them—but not by guessing.

Step 8: Address Issues With Another Round of Questions

Ask Claude to fix the critical issues, but trigger the questioning mode AGAIN:

Let's address all the P0 and P1 issues.

Update the specs file.

Use the AskUserQuestion tool to Ask me clarifying questions until you are 95% confident you can complete this task successfully. For each question, add your recommendation (with reason why) below the options.
Claude Code terminal showing request to address all P0 and P1 issues with AskUserQuestion tool enabled
Requesting fixes for critical and high-priority issues with question-asking enabled

Fixing these issues requires MORE decisions. Should you block mode switches entirely? Allow mixed modes temporarily? Auto-cancel subscriptions?

Claude asks:

Claude Code asking what should happen during mode switch with active Stripe subscriptions, with three options: block switch, auto-cancel, or allow mixed mode
Question about mode switch behavior—block, auto-cancel, or allow mixed mode
Claude Code asking how proration and coupon calculation should work during plan upgrades, with three options for handling discounts
Question about proration and coupon math during plan changes

Each answer shapes the solution. After this round, Claude updates the specs with concrete, specific fixes:

Claude Code showing summary of spec updates with P0 and P1 issues fixed, including solutions for renewal race condition, token deletion, mode switch, proration, guest checkout, and 3D Secure
All P0 and P1 issues addressed with specific solutions and file locations

P0 Fixes:

  • Renewal Race Condition → Database row locking with SELECT FOR UPDATE
  • Token Deletion → Pre-renewal validation 7 and 3 days before renewal
  • Mode Switch Danger → Block switching if ANY active Stripe subscriptions exist

P1 Fixes:

  • Proration + Coupon → Calculate from actual paid amounts, keep coupon on upgraded plan
  • Guest Checkout → Force account creation for subscription products
  • 3D Secure → Request off-session exemption, fallback to email payment link

You can repeat Phase 2 and Phase 3 as many times as needed. Review, refine, review, refine—until you’re genuinely confident in your specs.

Infographic titled "THE REVIEW-REFINE CYCLE (Repeat as Needed)" showing a flowchart. The process begins with a box labeled "PHASE 2: REVIEW 🔍" with the text "Find all problems". An arrow points down to a diamond-shaped decision box that asks "Issues Found? 🤔". Two arrows emerge from this decision box. The left arrow, labeled "YES ❌", points to a box labeled "PHASE 3: REFINE 🔧" with the text "Fix issues with Q&A". An arrow from this "PHASE 3" box loops back up to the top, pointing to the "PHASE 2: REVIEW" box, with the text "(back to review)" next to the loop. The right arrow from the decision box, labeled "NO ✅", points to a final orange box labeled "DONE! 🚀" with the text "Specs are bulletproof. Ready for implementation.". The flowchart demonstrates an iterative cycle of reviewing and refining until a final, approved state is reached.

.

.

.

The Method, Summarized

Because I know you’re going to want to reference this later:

Phase 1: Build Specs

  1. Describe what you want + add the AskUserQuestion trigger
  2. Let Claude explore your codebase first
  3. Answer every clarifying question
  4. Review the generated specs
  5. Split large specs into parts (if needed)

Phase 2: Review Specs 6. Start a new session 7. Ask Claude to find problems (analysis only—no edits)

Phase 3: Refine Specs 8. Fix critical issues with another round of questions 9. Repeat Phases 2-3 until satisfied

YOU decide when specs are ready.

Not Claude.

You.

.

.

.

What About Implementation?

Ah. Yes.

You have these beautiful, bulletproof specs. Now what?

You could tell Claude to implement everything in one go. But for specs this comprehensive, that approach has problems:

  • Claude might skip features (context limits are real)
  • Long implementations drift from the plan
  • Details get forgotten mid-stream

The solution?

Claude Code’s task management system—which breaks large specs into trackable tasks, maintains progress across sessions, and ensures nothing slips through the cracks.

That’s next week’s issue.

(Consider this a cliffhanger. I regret nothing.)

9 min read The Art of Vibe Coding, Vibe Coding

The Dip Is Coming For Every Vibe Coder (And That’s Okay)

When I turned ten, my parents gifted me a battleship model kit.

You know the ones—those intricate naval vessels with approximately 1,000 tiny plastic pieces, decals thinner than a whisper, and instructions that assume you already have the steady hands of a neurosurgeon.

The box art was magnificent. A mighty warship cutting through ocean waves, every gun turret perfectly positioned, every railing impossibly detailed.

I tore it open that morning. Snapped together the first few pieces. The hull took shape. Then the deck. This was going to be amazing.

And then I hit the superstructure.

Tiny railings that snapped if you looked at them wrong. Parts that looked identical but absolutely weren’t. Decals that crumpled the moment I breathed near them. Suddenly, my mighty warship looked less “naval destroyer” and more “sad boat that lost a fight with a bathtub drain.”

I shoved it in my closet. It sat there for two years.

Here’s the thing: the kit wasn’t defective. I’d just hit The Dip.

.

.

.

The Honeymoon Is Real (Enjoy It While It Lasts)

When Anthropic dropped Claude Opus 4.5 in November, it felt like someone handed us the instruction manual to the universe.

You typed a prompt. Claude built exactly what you described. You shipped in 30 minutes what used to take an entire afternoon of Stack Overflow rabbit holes and frustrated Googling.

The dopamine hit was real.

“I’ll never code the old way again,” you probably said. (I certainly did. Out loud. To no one in particular.)

Infographic titled "THE VIBE CODING HONEYMOON" at the top in dark navy sans-serif font against a light gray background. Below the title, a navy subheading with a sparkle emoji says "Excitement ✨". A downward-pointing muted gray arrow leads to a large, rounded rectangular box with a dark navy border. Inside this box, a smaller navy header reads "Phase 1: The 'Magic' Moment". Below this, three lines of text are presented with emojis, styled in a monospaced font resembling code: "🚀 'This is MAGIC! 🧠'", "⏰ 'I'm 10x more productive! ⌨️'", and "🤔 'Why didn't this exist sooner? 👀'". Below this box, another downward-pointing muted gray arrow is positioned next to a dark navy, pill-shaped callout box with a bird emoji, containing the text "← You are here (for now) 🦭". The final element below is a prominent, rounded rectangular box with a safety orange border, containing three large orange question marks "???" and the text "Result: ???" in a smaller orange font. The overall flow is vertical, guided by the arrows.

But here’s what nobody tells you when you’re in the honeymoon phase:

A smarter model doesn’t eliminate the wall you’re about to hit. It just moves it further down the road.

.

.

.

Then the Fog Rolls In

Three weeks in. Same prompt that worked beautifully yesterday. Completely different result today.

Claude starts “forgetting” context. Hallucinating function names that don’t exist. Proposing fixes that miss the point so entirely you wonder if you’re even having the same conversation.

You rephrase. Clarify. Add more detail.

Still broken.

It’s like driving in thick fog. You know the road is there. You know your car works fine. But you can’t see three feet in front of you, and suddenly every turn feels dangerous.

This is the dip in vibe coding. And if you’ve been working with Opus 4.5 for more than a few weeks, you’ve been here.

The symptoms look something like this:

  • “Claude won’t listen to me anymore”
  • “Works for simple cases, breaks on anything real”
  • “My whole process is falling apart”
  • “Maybe I actually need to understand this stuff…”

Sound familiar? (Be honest. I won’t tell anyone.)

.

.

.

The Spiral We Don’t Talk About

Let me tell you what happened to me.

It was 11 PM. Third cup of coffee—the one that crosses the line from “productive fuel” into “questionable life choices.” I’d been debugging with Claude for over an hour.

The bug was obvious. At least to me. I could see exactly where the logic broke down.

Claude kept proposing fixes that missed the point entirely.

I rephrased. Added context. Tried twelve different angles.

Nothing.

“You’re supposed to be the smartest model on the planet,” I muttered at my screen. (Yes, I talk to my computer. Don’t pretend you don’t.)

“Why can’t you just see this?”

.

.

.

And then came the spiral.

Maybe Anthropic is serving me a weaker model. They probably quantized it to save on compute—everyone knows they throttle heavy users. The conspiracy theories started writing themselves.

I opened Reddit. Started typing.

“Anyone else notice Claude got way worse lately?”

Found others who agreed. Upvotes. Comments. Validation.

Felt good.

The bug was still there.

Infographic titled "THE SPIRAL (A Diagram of Poor Choices)" at the top in dark navy sans-serif font. Below it, a muted gray arrow points down from "Claude fails → Frustration builds 😡". This leads to a large, rounded rectangular box with a dark navy border, titled "Phase 2: The Blame Game". Inside, three lines of text with megaphone and face emojis read: "📣 'They nerfed it!' 🤦‍♂️", "📣 'Model got dumber!' 🤡", "📣 'It's not me, it's Anthropic!' 😤". Below this box, a gray arrow points to another navy rounded box with "Reddit r/ClaudeAI 🤝". To the right, a navy pill-shaped callout with a thumbs-up emoji and text "Validation feels good 👍" points with a gray arrow into the Reddit box. Another gray arrow points from the Reddit box to the final safety orange rounded box at the bottom, which contains the text "Bug is still there 🐛". To its right, a navy pill-shaped callout with a shrug emoji and text "Reality doesn't care 🤷‍♂️" points with a gray arrow into the final box. The entire diagram is on a soft off-white background.

.

.

.

The Uncomfortable Question

I closed Reddit and stared at my screen.

What if the model didn’t change?

What if I was the variable?

(Stay with me here—this is where it gets good.)

I went back to my conversation with Claude. Read through it again. And this time, I noticed something that made me want to crawl under my desk.

Claude wasn’t seeing what I was seeing.

I had context in my head—error logs I’d scanned, behavior I’d observed, patterns I’d noticed across multiple test runs. None of that was in the conversation. I was asking Claude to diagnose a problem while hiding half the symptoms.

Remember that fog metaphor? I was the fog.

I’d been yelling at my car for not driving properly while I was the one smearing mud on the windshield.

.

.

.

The Insight That Changed Everything

Here’s what I learned—and I want you to write this down somewhere:

👉 LLMs don’t fail because they’re not smart enough. They fail because they can’t see what you see.

Opus 4.5 is brilliant. But brilliance without visibility is just confident guessing. (And confident guessing is somehow more frustrating than obvious failure, isn’t it?)

The moment I understood this, my entire approach changed.

Instead of crafting cleverer prompts, I started providing better context. Added logging. Pasted actual error output—not my interpretation of it, but the raw, ugly, unfiltered thing. Described exactly what I observed.

Suddenly the “dumb” Claude became brilliant again.

The model didn’t change. What I gave it changed.

The fog cleared. The road was there all along.

Infographic titled "THE VISIBILITY PRINCIPLE" at the top in bold, dark blue font. The image is divided into two sections, "BEFORE" and "AFTER", separated by a horizontal line.

The "BEFORE" section, with a downward arrow, shows a flow diagram. On the left, a person icon labeled "You" has an arrow pointing right to a gray rectangular box labeled "[Fog]" with a cloud emoji. Below this fog box, a smaller gray box with an upward arrow points to it, containing the text "(Missing context, summarized errors, assumptions) ❓". An arrow from the "[Fog]" box points right to a robot icon labeled "Claude". An arrow from "Claude" points right to a red rectangular box labeled "Wrong answer" with a red 'X' mark and a sad face emoji 😞.

The "AFTER" section, with a downward arrow, shows a parallel flow diagram. On the left, a person icon labeled "You" has an arrow pointing right to a blue rectangular box labeled "[Clear]" with an eyes emoji 👀. Below this clear box, a smaller blue box with an upward arrow points to it, containing the text "(Raw errors, actual output, full context) 🔍". An arrow from the "[Clear]" box points right to a robot icon labeled "Claude". An arrow from "Claude" points right to a green rectangular box labeled "Right answer" with a green checkmark ✅ and a happy face emoji 😊.

.

.

.

What Seth Godin Knew All Along

Quick detour. (I promise it’s relevant.)

Seth Godin wrote about The Dip years ago. His insight: The Dip is the long, hard slog between starting something and mastering it. The point where initial excitement fades and real work begins.

Most people quit here. That’s exactly what makes pushing through valuable.

My battleship model kit? I eventually finished it. Two years later, with steadier hands and more patience. It’s not perfect—one gun turret sits slightly crooked—but it’s done. And I learned something about myself in the finishing that I never would have learned in the quitting.

The dip in vibe coding works the same way.

You’ve moved past the toy examples. You’re building real things now. And real things have edge cases, complexity, and problems that require iteration.

That’s always been true. AI doesn’t change the fundamental nature of engineering—it just accelerates everything. The breakthroughs come faster.

So do the walls.

.

.

.

The Dip Survival Kit

Okay. Enough philosophy. Let’s get tactical.

Here are five things I do now when Claude stops cooperating—and more importantly, when I feel the urge to open Reddit instead of solving the actual problem.

1. Visibility First (Clear the Fog)

The problem: Claude fails because it lacks context, not intelligence. You’re driving in fog and blaming the car.

The fix:

Add logging before asking Claude to debug. Paste actual error messages—not your summary of them, the real thing. Describe exactly what you observed.

Opus 4.5 has a massive context window. Use it. Don’t summarize when you can show.

A prompt pattern that actually works:

“Here’s what I’m seeing: [actual output]. Here’s what I expected: [expected output]. Here’s the relevant code: [code]. What’s the disconnect?”

More context = better reasoning. That’s literally why Opus outperforms previous models.


2. Tool Pivot (Different Hammers for Different Nails)

The problem: One tool can’t do everything brilliantly—even Opus 4.5.

The fix:

I’ve started using different AI tools for different phases:

TaskBest Tool
Brainstorming & PlanningCodex / GPT-5
ImplementationClaude Code (Opus 4.5)
Review & QACodex reviewing diffs

Claude excels at implementation and extended reasoning. Using it for everything creates blind spots. Match the tool to the task—not the task to the tool.


3. Blueprint Over Code (Clarity Before Creativity)

The problem: Vague prompts produce vague results. Even from Opus 4.5.

The fix:

Write detailed specs before asking Claude to build anything. Use ASCII wireframes for UI. Define success criteria upfront. Get to 95% clarity before implementation begins.

Bad prompt:

“Build me a login form”

Better prompt:

“Build a login form with email and password fields. Email validation on blur. Password requires 8+ characters, one uppercase, one number. Show inline errors below each field. On success, redirect to /dashboard. On failure, show error banner at top. Use existing Button and Input components.”

Here’s the thing: smarter models reward precision. Opus 4.5 can follow complex specifications better than any previous model. Don’t waste that intelligence on ambiguity.


4. The Strategic Retreat (Walking Away Is a Skill)

The problem: Tunnel vision makes everything harder. You’ve been staring at the same bug for two hours and you’re no longer thinking—you’re just reacting.

The fix:

Walk away. Literally.

Work on something else. Go for a walk. Sleep on it. (Yes, actual sleep. Revolutionary concept, I know.)

Your brain keeps processing in the background. You’ll return without the emotional charge. Often—annoyingly often—the solution becomes obvious after distance.

The anti-pattern to avoid:

Don’t keep hammering the same prompt hoping Opus 4.5 will suddenly “get it.” Ten variations of a bad approach is still a bad approach. Step back. Reassess.


5. Experiment Deliberately (Failure as Data)

The problem: Random attempts waste time and tokens. Frustration makes you sloppy.

The fix:

Change one variable at a time. Document what you tried. Look for patterns in what’s failing. Treat debugging as research, not combat.

The mindset shift:

“I’m not failing. I’m eliminating approaches that don’t work.”

A Claude-specific tip:

Start a fresh conversation when context gets polluted. Sometimes Opus 4.5 locks onto a wrong approach and keeps circling back to it like a dog with a favorite squeaky toy. New conversation = clean slate. Sometimes that’s genuinely all you need.

.

.

.

The Other Side of the Dip

Let me be honest with you.

The dip in vibe coding is real. It’s coming for every single person reading this—if it hasn’t arrived already.

Even with Claude Opus 4.5. Even with the most capable AI model we’ve ever had.

But here’s what the dip actually means: you’ve moved past the tutorials. You’re building something real. You’re pushing against the edges of what’s possible.

That’s engineering. That’s the craft.

Every new Claude model will have a honeymoon phase. And every one will eventually lead to a dip. The skill isn’t avoiding it.

The skill is navigating it.

Push through. Tinker. Experiment. Clear the fog. Give Claude what it can’t see on its own.

The developers who learn this with Opus 4.5 will be ready for whatever Anthropic ships next.

Claude keeps getting smarter.

The dip will always be there.

Learn to love the climb.

10 min read The Art of Vibe Coding, Claude

How to Write Better Requirements with Claude (Stop Letting AI Assume)

I fire up Claude Code.

New project in mind—a WordPress theme for coworking spaces. And I want to do this right, you know? Start with requirements. Be professional about it. Act like someone who has their act together.

So I type:

I want to build a WordPress theme for Coworking space website 
for the coworking space owner to use it to promote and manage 
their coworking space.

I want you to help me brainstorm for the product requirement 
document (PRD) for this theme.

Put the PRD at @requirements/coworkpress.md
Claude Code terminal with user prompt asking to generate a PRD for a coworking WordPress theme

I hit enter, feeling like a real PM.

Claude responds: “I’d be happy to help you brainstorm a PRD for a coworking space WordPress theme. Let me create a comprehensive document covering the key aspects.”

Then it writes. And writes. And writes.

313 lines.

Claude Code output showing "Wrote 313 lines to requirements/coworkpress.md" with a preview of the PRD structure
[PRD] CoWorkPress – WordPress Theme
Loading longform...

Product Overview

Product Name: CoWorkPress Type: WordPress Theme Target Market: Coworking space owners and operators Purpose: Enable coworking space owners to create professional websites to promote their spaces, showcase amenities, display pricing, and manage bookings.


Problem Statement

Coworking space owners need an affordable, easy-to-use solution to:

  • Establish an online presence without hiring developers
  • Showcase their space professionally to attract members
  • Display pricing and membership options clearly
  • Allow potential members to book tours or reserve spaces
  • Build community and promote events

Target Users

Primary Users (Site Owners)

  • Small coworking space owners - Single location, 10-50 desks
  • Boutique coworking operators - 1-3 locations, design-focused spaces
  • Community space managers - Non-profit or community-driven spaces

Secondary Users (Site Visitors)

  • Freelancers looking for workspace
  • Remote workers needing occasional office space
  • Startups seeking affordable office solutions
  • Corporate teams needing satellite office space

Core Features

1. Homepage Builder

  • Hero Section - Full-width image/video with headline and CTA
  • Space Highlights - Showcase different workspace types
  • Amenities Grid - Visual display of available amenities
  • Testimonials - Member reviews and success stories
  • Pricing Preview - Quick view of membership options
  • Location Map - Interactive map integration
  • CTA Sections - Book a tour, Get started buttons

2. Space/Room Showcase

  • Gallery System - Photo galleries with lightbox
  • Virtual Tour Integration - Support for 360° tours (Matterport, etc.)
  • Space Types Display
    • Hot desks
    • Dedicated desks
    • Private offices
    • Meeting rooms
    • Event spaces
  • Capacity & Availability Indicators
  • Filtering/Sorting Options

3. Pricing & Membership Plans

  • Pricing Table Templates
    • Monthly memberships
    • Day passes
    • Hourly rates
    • Meeting room rates
  • Plan Comparison Feature
  • Custom Pricing Tiers
  • Add-on Services Display
  • Currency & Tax Settings

4. Booking & Contact System

  • Tour Booking Form - Schedule space visits
  • Contact Forms - General inquiries
  • Meeting Room Booking (Basic)
    • Calendar view
    • Time slot selection
    • Integration hooks for booking plugins
  • Lead Capture Forms
  • Email Notifications

5. Amenities Showcase

  • Icon-based Amenities Grid
  • Pre-built Amenity Icons
    • WiFi, Printing, Coffee, Kitchen
    • Phone booths, Lockers, Parking
    • Mail handling, Reception
    • 24/7 access, Security
  • Custom Amenity Support

6. Location & Multi-Location Support

  • Single Location
    • Address display
    • Google Maps integration
    • Directions/transit info
    • Operating hours
  • Multi-Location (Future/Premium)
    • Location selector
    • Location-specific pages
    • Location comparison

7. Community & Events

  • Events Calendar
    • Upcoming events display
    • Event registration
    • Integration with event plugins
  • Member Directory (Optional)
  • Blog/News Section
  • Community Perks Display

8. Trust & Social Proof

  • Testimonial Sections
  • Client/Company Logos
  • Press Mentions
  • Statistics Counter (Members served, sqft, etc.)
  • Certifications/Awards Display

Technical Requirements

WordPress Compatibility

  • Minimum WordPress Version: 6.0+
  • PHP Version: 8.0+
  • Full Site Editing (FSE) Support - Block-based theme
  • Gutenberg Compatible - Custom blocks for coworking features

Performance

  • PageSpeed Score: 90+ on mobile
  • Lightweight - < 100KB CSS, < 50KB JS (minified)
  • Lazy Loading - Images and videos
  • Optimized Assets - WebP support, responsive images

Responsive Design

  • Mobile-First Approach
  • Breakpoints:
    • Mobile: < 768px
    • Tablet: 768px - 1024px
    • Desktop: > 1024px
  • Touch-Friendly - Navigation, galleries, forms

Accessibility

  • WCAG 2.1 AA Compliance
  • Keyboard Navigation
  • Screen Reader Support
  • Sufficient Color Contrast
  • Alt Text Support

SEO

  • Schema.org Markup - LocalBusiness, Place
  • Clean HTML Structure
  • Optimized Heading Hierarchy
  • Fast Loading Times
  • Social Meta Tags (Open Graph, Twitter Cards)

Design System

Visual Style

  • Modern & Professional - Clean, minimal aesthetic
  • Flexible Color System - Primary, secondary, accent colors
  • Typography
    • Google Fonts integration
    • System font fallbacks
    • Readable body text (16px+)

Pre-built Templates

  1. Homepage Variations (3-5 layouts)
  2. About Page
  3. Spaces/Rooms Page
  4. Pricing Page
  5. Contact Page
  6. Single Space/Room Template
  7. Events Page
  8. Blog Templates

Customization Options

  • Global Colors - Via WordPress Customizer/FSE
  • Typography Settings
  • Header Layouts (2-3 options)
  • Footer Layouts (2-3 options)
  • Button Styles
  • Section Spacing Controls

Plugin Integrations

Required/Bundled

  • None (theme should work standalone)
  • Forms: WPForms, Contact Form 7, Gravity Forms
  • Booking: Amelia, BookingPress, Simply Schedule Appointments
  • Maps: Google Maps, Mapbox
  • SEO: Yoast SEO, Rank Math
  • Analytics: Google Analytics, Plausible
  • Page Builders: Elementor, Beaver Builder (optional compatibility)

Future/Premium Integrations

  • Stripe/WooCommerce for payments
  • CRM integrations (HubSpot, etc.)
  • Coworking management software APIs (Nexudus, Cobot, OfficeRnD)

Content Requirements

Demo Content

  • Sample homepage with realistic coworking imagery
  • Sample spaces with descriptions
  • Placeholder testimonials
  • Sample pricing plans
  • Demo blog posts

Documentation

  • Quick Start Guide
  • Theme Options Documentation
  • Block Usage Guide
  • Customization Tutorials
  • FAQ Section

Success Metrics

For Theme (Business)

  • Downloads/Sales numbers
  • User reviews and ratings
  • Support ticket volume
  • Renewal/upgrade rate

For End Users (Coworking Owners)

  • Time to launch (< 1 day for basic site)
  • Lead generation improvement
  • Tour booking conversion
  • Member acquisition cost reduction

Phases & Roadmap

Phase 1 - MVP (v1.0)

  • [ ] Core theme structure (FSE-based)
  • [ ] Homepage template with essential sections
  • [ ] Spaces showcase (custom post type)
  • [ ] Basic pricing table block
  • [ ] Amenities block
  • [ ] Contact/Tour booking form integration
  • [ ] Responsive design
  • [ ] Basic customization options

Phase 2 - Enhanced (v1.5)

  • [ ] Additional homepage layouts
  • [ ] Events integration
  • [ ] Testimonials management
  • [ ] Gallery enhancements
  • [ ] Multi-location basic support
  • [ ] Performance optimizations

Phase 3 - Premium Features (v2.0)

  • [ ] Advanced booking system
  • [ ] Member portal template
  • [ ] Coworking software integrations
  • [ ] Advanced analytics dashboard
  • [ ] White-label options

Competitive Analysis

Existing Solutions

Solution Type Pros Cons
Flavor Theme WP Theme Coworking-specific Outdated, not FSE
Flavor Theme WP Theme Modern Generic, needs customization
Flavor Theme Template Beautiful Not WordPress
Flavor Theme Template Feature-rich Requires coding

Differentiation

  • WordPress-native - No complex setup
  • FSE/Block-based - Modern, future-proof
  • Coworking-specific - Purpose-built features
  • Lightweight - Fast performance
  • Affordable - Accessible for small operators

Open Questions

  1. Pricing Model - One-time purchase vs. subscription?
  2. Free vs. Premium - Freemium model with premium add-ons?
  3. Booking Depth - Build custom booking or rely on plugin integrations?
  4. Multi-location - Core feature or premium add-on?
  5. Community Features - Include member directory/forum?
  6. E-commerce - Direct payment processing for memberships?

Notes & Ideas

  • Consider integration with popular coworking management platforms
  • Virtual tour integration could be a key differentiator
  • Mobile app companion for members (future consideration)
  • Community marketplace for member services
  • Analytics for space utilization (premium feature)

Product Overview

Product Name: CoWorkPress Type: WordPress Theme Target Market: Coworking space owners and operators Purpose: Enable coworking space owners to create professional websites to promote their spaces, showcase amenities, display pricing, and manage bookings.


Problem Statement

Coworking space owners need an affordable, easy-to-use solution to:

  • Establish an online presence without hiring developers
  • Showcase their space professionally to attract members
  • Display pricing and membership options clearly
  • Allow potential members to book tours or reserve spaces
  • Build community and promote events

Target Users

Primary Users (Site Owners)

  • Small coworking space owners - Single location, 10-50 desks
  • Boutique coworking operators - 1-3 locations, design-focused spaces
  • Community space managers - Non-profit or community-driven spaces

Secondary Users (Site Visitors)

  • Freelancers looking for workspace
  • Remote workers needing occasional office space
  • Startups seeking affordable office solutions
  • Corporate teams needing satellite office space

Core Features

1. Homepage Builder

  • Hero Section - Full-width image/video with headline and CTA
  • Space Highlights - Showcase different workspace types
  • Amenities Grid - Visual display of available amenities
  • Testimonials - Member reviews and success stories
  • Pricing Preview - Quick view of membership options
  • Location Map - Interactive map integration
  • CTA Sections - Book a tour, Get started buttons

2. Space/Room Showcase

  • Gallery System - Photo galleries with lightbox
  • Virtual Tour Integration - Support for 360° tours (Matterport, etc.)
  • Space Types Display
    • Hot desks
    • Dedicated desks
    • Private offices
    • Meeting rooms
    • Event spaces
  • Capacity & Availability Indicators
  • Filtering/Sorting Options

3. Pricing & Membership Plans

  • Pricing Table Templates
    • Monthly memberships
    • Day passes
    • Hourly rates
    • Meeting room rates
  • Plan Comparison Feature
  • Custom Pricing Tiers
  • Add-on Services Display
  • Currency & Tax Settings

4. Booking & Contact System

  • Tour Booking Form - Schedule space visits
  • Contact Forms - General inquiries
  • Meeting Room Booking (Basic)
    • Calendar view
    • Time slot selection
    • Integration hooks for booking plugins
  • Lead Capture Forms
  • Email Notifications

5. Amenities Showcase

  • Icon-based Amenities Grid
  • Pre-built Amenity Icons
    • WiFi, Printing, Coffee, Kitchen
    • Phone booths, Lockers, Parking
    • Mail handling, Reception
    • 24/7 access, Security
  • Custom Amenity Support

6. Location & Multi-Location Support

  • Single Location
    • Address display
    • Google Maps integration
    • Directions/transit info
    • Operating hours
  • Multi-Location (Future/Premium)
    • Location selector
    • Location-specific pages
    • Location comparison

7. Community & Events

  • Events Calendar
    • Upcoming events display
    • Event registration
    • Integration with event plugins
  • Member Directory (Optional)
  • Blog/News Section
  • Community Perks Display

8. Trust & Social Proof

  • Testimonial Sections
  • Client/Company Logos
  • Press Mentions
  • Statistics Counter (Members served, sqft, etc.)
  • Certifications/Awards Display

Technical Requirements

WordPress Compatibility

  • Minimum WordPress Version: 6.0+
  • PHP Version: 8.0+
  • Full Site Editing (FSE) Support - Block-based theme
  • Gutenberg Compatible - Custom blocks for coworking features

Performance

  • PageSpeed Score: 90+ on mobile
  • Lightweight - < 100KB CSS, < 50KB JS (minified)
  • Lazy Loading - Images and videos
  • Optimized Assets - WebP support, responsive images

Responsive Design

  • Mobile-First Approach
  • Breakpoints:
    • Mobile: < 768px
    • Tablet: 768px - 1024px
    • Desktop: > 1024px
  • Touch-Friendly - Navigation, galleries, forms

Accessibility

  • WCAG 2.1 AA Compliance
  • Keyboard Navigation
  • Screen Reader Support
  • Sufficient Color Contrast
  • Alt Text Support

SEO

  • Schema.org Markup - LocalBusiness, Place
  • Clean HTML Structure
  • Optimized Heading Hierarchy
  • Fast Loading Times
  • Social Meta Tags (Open Graph, Twitter Cards)

Design System

Visual Style

  • Modern & Professional - Clean, minimal aesthetic
  • Flexible Color System - Primary, secondary, accent colors
  • Typography
    • Google Fonts integration
    • System font fallbacks
    • Readable body text (16px+)

Pre-built Templates

  1. Homepage Variations (3-5 layouts)
  2. About Page
  3. Spaces/Rooms Page
  4. Pricing Page
  5. Contact Page
  6. Single Space/Room Template
  7. Events Page
  8. Blog Templates

Customization Options

  • Global Colors - Via WordPress Customizer/FSE
  • Typography Settings
  • Header Layouts (2-3 options)
  • Footer Layouts (2-3 options)
  • Button Styles
  • Section Spacing Controls

Plugin Integrations

Required/Bundled

  • None (theme should work standalone)
  • Forms: WPForms, Contact Form 7, Gravity Forms
  • Booking: Amelia, BookingPress, Simply Schedule Appointments
  • Maps: Google Maps, Mapbox
  • SEO: Yoast SEO, Rank Math
  • Analytics: Google Analytics, Plausible
  • Page Builders: Elementor, Beaver Builder (optional compatibility)

Future/Premium Integrations

  • Stripe/WooCommerce for payments
  • CRM integrations (HubSpot, etc.)
  • Coworking management software APIs (Nexudus, Cobot, OfficeRnD)

Content Requirements

Demo Content

  • Sample homepage with realistic coworking imagery
  • Sample spaces with descriptions
  • Placeholder testimonials
  • Sample pricing plans
  • Demo blog posts

Documentation

  • Quick Start Guide
  • Theme Options Documentation
  • Block Usage Guide
  • Customization Tutorials
  • FAQ Section

Success Metrics

For Theme (Business)

  • Downloads/Sales numbers
  • User reviews and ratings
  • Support ticket volume
  • Renewal/upgrade rate

For End Users (Coworking Owners)

  • Time to launch (< 1 day for basic site)
  • Lead generation improvement
  • Tour booking conversion
  • Member acquisition cost reduction

Phases & Roadmap

Phase 1 - MVP (v1.0)

  • [ ] Core theme structure (FSE-based)
  • [ ] Homepage template with essential sections
  • [ ] Spaces showcase (custom post type)
  • [ ] Basic pricing table block
  • [ ] Amenities block
  • [ ] Contact/Tour booking form integration
  • [ ] Responsive design
  • [ ] Basic customization options

Phase 2 - Enhanced (v1.5)

  • [ ] Additional homepage layouts
  • [ ] Events integration
  • [ ] Testimonials management
  • [ ] Gallery enhancements
  • [ ] Multi-location basic support
  • [ ] Performance optimizations

Phase 3 - Premium Features (v2.0)

  • [ ] Advanced booking system
  • [ ] Member portal template
  • [ ] Coworking software integrations
  • [ ] Advanced analytics dashboard
  • [ ] White-label options

Competitive Analysis

Existing Solutions

Solution Type Pros Cons
Flavor Theme WP Theme Coworking-specific Outdated, not FSE
Flavor Theme WP Theme Modern Generic, needs customization
Flavor Theme Template Beautiful Not WordPress
Flavor Theme Template Feature-rich Requires coding

Differentiation

  • WordPress-native - No complex setup
  • FSE/Block-based - Modern, future-proof
  • Coworking-specific - Purpose-built features
  • Lightweight - Fast performance
  • Affordable - Accessible for small operators

Open Questions

  1. Pricing Model - One-time purchase vs. subscription?
  2. Free vs. Premium - Freemium model with premium add-ons?
  3. Booking Depth - Build custom booking or rely on plugin integrations?
  4. Multi-location - Core feature or premium add-on?
  5. Community Features - Include member directory/forum?
  6. E-commerce - Direct payment processing for memberships?

Notes & Ideas

  • Consider integration with popular coworking management platforms
  • Virtual tour integration could be a key differentiator
  • Mobile app companion for members (future consideration)
  • Community marketplace for member services
  • Analytics for space utilization (premium feature)

At first glance, it looks thorough. Professional, even. Like something a senior engineer would put together after three cups of coffee and a really productive morning.

But here’s where things get squirrely.

Look closer at what Claude produced:

  • WordPress 6.0+ and PHP 8.0+ version requirements
  • Full Site Editing (FSE) block-based architecture decisions
  • Performance targets: 90+ PageSpeed, < 100KB CSS, < 50KB JS
  • Specific responsive breakpoints (768px, 1024px)
  • Plugin recommendations: WPForms, Amelia, Yoast SEO
  • A three-phase development roadmap with version numbers
Claude Code terminal displaying a PRD summary with 7 key sections: Problem Statement, Target Users, Core Features (homepage builder, space showcase, pricing tables, booking, amenities, location/map, events, trust elements), Technical Requirements (WordPress 6.0+, PHP 8.0+, FSE block-based theme, 90+ PageSpeed, WCAG 2.1 AA), Design System, Plugin Integrations, and Phased Roadmap. Also shows Open Questions about pricing model, freemium approach, booking integration, and multi-location support

Wait.

Hold on.

I haven’t even started coding yet—haven’t written a single line—and I’ve already “decided” on performance budgets, responsive breakpoints, and plugin integrations?

Huh.

.

.

.

The Problem: Requirements That Aren’t Actually Requirements

Here’s what happened (and stay with me, because this is the part that changes everything): I asked Claude for requirements. Claude gave me implementation decisions.

Those 313 lines contain:

  • Technical stack choices I haven’t made yet
  • Performance constraints that might change
  • Architecture patterns I haven’t validated
  • Integration approaches I haven’t researched

And now this entire document sits in my context window—taking up space, influencing every future conversation. Every time I ask Claude to help me build something, it references these premature decisions like they’re gospel.

The PRD became a constraint instead of a guide.

Here’s the thing. Claude conflates two very different things:

  1. What you want to build (requirements)
  2. How to build it (implementation)

And honestly? That’s not Claude’s fault. It’s mine. I didn’t tell it otherwise.

But here’s the real insight—the one that made me completely rethink how I approach Claude Code requirements:

User perspective yields better AI output.

(I know, I know. That sounds like something you’d find on a motivational poster in a Silicon Valley bathroom. But hear me out.)

When you describe what users experience, Claude understands context. It grasps the why behind features. It catches edge cases you’d miss while you’re busy thinking about database schemas.

When you describe technical implementation? Claude follows a checklist. No context. No judgment. Just execution.

So what if I asked differently?

.

.

.

The Reframe: Making Claude Interview You First

I tried again. Same project. Different approach.

This time, I asked for a Business Requirements Document—focused on user stories and business logic, not technical specs.

But here’s the key change (and this is the part you’ll want to screenshot): I told Claude to interview me first.

Claude Code terminal showing a detailed prompt requesting a BRD with instructions to use AskUserQuestionTool and ask clarifying questions until 95% confident

The exact prompt:

I want to build a WordPress theme for Coworking space website 
for the coworking space owner to use it to promote and manage 
their coworking space.

I want you to help me brainstorm for the business requirement 
document (BRD) for this theme. Focus on business logic and 
rules, user stories, and acceptance criteria.

Use the "wp-theme-dev" skill to understand the development 
patterns and guidance for building WordPress themes.

IMPORTANT: DO NOT INCLUDE ANY TECHNICAL IMPLEMENTATION DETAILS.

Use the AskUserQuestionTool to Ask me clarifying questions 
until you are 95% confident you can complete this task 
successfully. For each question, add your recommendation 
(with reason why) below the options. This would help me 
in making a better decision.

Put the BRD at @requirements/coworkpress.md

Three things matter here:

  1. “Focus on business logic, user stories, and acceptance criteria” — This sets explicit scope. No wandering into implementation land.
  2. “DO NOT INCLUDE ANY TECHNICAL IMPLEMENTATION DETAILS” — A hard boundary. (Yes, I’m yelling. Sometimes Claude needs yelling.)
  3. “Ask me clarifying questions until you are 95% confident” — This is the magic ingredient. The secret sauce. The thing that changes everything.

That last part triggers AskUserQuestionTool—a built-in Claude Code feature that lets Claude pause and interview you before generating anything.

Flowchart titled 'THE ASKUSERQUESTION FLOW' illustrating an interactive process between a user and an AI, Claude, to improve output. The flow starts with 'Your Prompt' 🗣️ leading to 'Claude Asks Questions' 🤖. This step points to 'You Answer (Options + Your Input)' ⌨️, which then leads to a decision diamond: '95% Confident?' 🤔. If 'No', an arrow loops back to '[Ask More]' 👀 and then to 'Claude Asks Questions'. If 'Yes', an arrow points to '[Generate BRD]' 📄. Finally, '[Generate BRD]' leads to the ultimate goal: 'Better Output' 💪✅. The boxes are connected by arrows on a light grey background.

What happened next?

It changed how I start every single project.

.

.

.

The Interview Begins

Claude didn’t start writing.

It started asking.

Claude Code's AskUserQuestion interface showing tabs for Target Users, Business Model, Space Types, and Submit. The question asks "What is the primary business model for the coworking space?" with four options: Membership-based (Recommended), Pay-per-use, Hybrid Model, and Type something

Look at that interface. (Isn’t it beautiful?) Claude organized its questions into themes:

  • Target Users
  • Business Model
  • Space Types

And each question comes with options—plus Claude’s recommendation with reasoning. It’s like having a really thoughtful product manager who actually wants to understand what you’re building before they start building it.

For the business model question, Claude recommended Membership-based because “Monthly/annual subscriptions with different tiers (hot desk, dedicated desk, private office)” represents the most common coworking model.

I selected the recommendation. Next question.

.

.

.

Round 2: Booking and Member Management

After answering the first batch, Claude moved deeper.

Claude Code showing question "What community features are important for the coworking space?" with options including Member Directory, Events Calendar, Both Directory + Events (Recommended), None, and Type something

Now it’s asking about:

  • Booking systems (meeting rooms, event spaces)
  • Member portal requirements
  • Community features

Notice how Claude builds on previous answers. Because I said “membership-based” earlier, it now asks about member-specific features like portals and directories.

The questions aren’t random. They follow a logical thread—like a conversation with someone who’s actually paying attention.

I selected Both Directory + Events for community features. Claude recommended it because “Full community engagement with directory and events” maximizes the value proposition for members.

(Smart cookie, that Claude.)

.

.

.

Round 3: Operations and Scale

Claude Code asking "Does the coworking space operate multiple locations?" with options: Single Location, Multiple Locations (Recommended), Franchise Model, and Type something

The questions got more specific:

  • Membership lifecycle (upgrades, downgrades, cancellations)
  • Multi-location support
  • Marketing page requirements

Claude recommended Multiple Locations because “Two or more locations with shared or separate memberships” covers both current single-location spaces and future expansion.

It’s thinking about growth—not just current state.

That’s… actually really thoughtful?

.

.

.

Round 4: Sales Funnel and Operations

Claude Code asking "What reporting does the coworking space owner need?" with options: Comprehensive Dashboard (Recommended) showing occupancy rates, revenue, member growth, booking analytics; Basic Metrics; External Tools; and Type something

Now Claude explored:

  • Lead capture and nurturing
  • Notification preferences
  • Reporting needs

For reporting, I went with Comprehensive Dashboard—occupancy rates, revenue, member growth, booking analytics, space utilization.

Claude’s reasoning: space owners need visibility into their business health, and a comprehensive dashboard reduces the need for external tools.

(I mean, yes. Exactly. Thank you for understanding.)

.

.

.

Round 5: Policies and Edge Cases

Claude Code asking "Can members bring guests to the coworking space?" with options: Guest Passes Included (Recommended), Paid Day Passes, No Guest Access (currently selected), and Type something

The final rounds covered operational details:

  • Amenities handling
  • Access control methods
  • Guest policies

And here’s where it gets interesting.

These questions catch edge cases I wouldn’t have thought about until I was knee-deep in development—cursing at my screen at 11 PM, wondering why I didn’t think of this earlier.

Guest policy? I hadn’t considered it. But it affects:

  • Pricing structure
  • Access control logic
  • Liability considerations
  • Member value perception

Claude surfaced this decision before I started building.

Before I wrote a single line of code.

Before I had to refactor anything.

.

.

.

21 Questions Later: The Full Picture

After 7 rounds, Claude had asked 21 questions across multiple categories.

Claude Code terminal showing a summary of answered questions including: Target Users → Mixed Audience, Business Model → Membership-based, Space Types → Full-Service, Booking System → Real-time Online Booking, Member Portal → Full Portal, Community → Both Directory + Events, Membership Lifecycle → Full Lifecycle, Locations → Multiple Locations, Marketing Pages → Essential Pages
Claude Code terminal showing additional answered questions including: Lead Capture → Tour Booking + Lead Nurturing, Notifications → Essential Only, Reporting → Comprehensive Dashboard, Amenities → Included in Membership Tiers, Access Control → Physical Keys/Cards, Guest Policy → No Guest Access, Corporate Accounts → Yes, Admin Roles → Two Roles, Visual Customization → Highly Customizable, Billing Cycles → Flexible Cycles, Cancellation Policy → Notice Period, Booking Restrictions → Plan-Based Limits

Look at the coverage:

Business Model & Users

  • Target audience: Mixed (freelancers, startups, corporate)
  • Business model: Membership-based with tiers
  • Space types: Full-service (hot desks, dedicated, private offices, meeting rooms)

Features & Functionality

  • Booking: Real-time online system
  • Member portal: Full dashboard with profile, bookings, billing
  • Community: Directory + events calendar

Operations & Scale

  • Multiple locations with location-based time zones
  • Two admin roles (Admin + Staff)
  • Comprehensive reporting dashboard

Policies & Rules

  • Flexible billing (monthly/quarterly/annual)
  • 30-day cancellation notice
  • Plan-based meeting room quotas
  • No guest access
  • Corporate accounts supported

Claude now has context. Real context. Not assumptions—actual decisions I made.

“I now have comprehensive understanding of your requirements. Let me create the Business Requirements Document.”

Yes. Yes you do. Finally.

.

.

.

The Output: A Document I Can Actually Build From

Claude Code terminal showing BRD summary with sections: Executive Summary, Business Context, User Personas (5 defined), Functional Requirements with user stories, Business Rules (16 codified rules), Non-Functional Requirements, Out of Scope items, and Glossary. Key business decisions listed include membership-based model, plan-based meeting room quotas, 30-day cancellation policy, two admin roles, and location-based time zones
[BRD] CoworkPress – WordPress theme
Loading longform...

Document Information

Field Value
Project Name CoworkPress
Document Type Business Requirements Document (BRD)
Version 1.0
Created 2026-01-13
Status Draft

1. Executive Summary

CoworkPress is a WordPress theme designed for coworking space owners to promote and manage their coworking business. The theme enables owners to showcase their spaces, manage memberships, handle bookings, and build community—all through a highly customizable, professional website.

1.1 Business Objectives

  • Enable coworking space owners to establish a professional online presence
  • Streamline membership management and billing operations
  • Provide real-time booking capabilities for spaces and resources
  • Support multi-location operations under a single platform
  • Deliver comprehensive business analytics and reporting
  • Foster community engagement through member directories and events

1.2 Target Market

Primary User (Theme Buyer): Coworking space owners and operators managing one or more locations

End Users (Website Visitors):

  • Freelancers and remote workers seeking flexible workspace
  • Small teams and startups needing dedicated desks or private offices
  • Enterprise clients looking for satellite offices or meeting spaces

2. Business Context

2.1 Business Model

The coworking space operates on a membership-based model with flexible billing cycles (monthly, quarterly, annual). Revenue is generated through:

  • Recurring membership subscriptions
  • Additional hour purchases when quotas are exhausted
  • Corporate accounts managing multiple employee memberships

2.2 Space Offerings

Space Type Description
Hot Desks Shared open workspace with no assigned seating
Dedicated Desks Reserved desk space for consistent use
Private Offices Enclosed offices for teams or individuals
Meeting Rooms Bookable conference and collaboration spaces
Event Spaces Larger venues for workshops, seminars, and gatherings

2.3 Multi-Location Operations

The business supports multiple physical locations, each operating in its own time zone. Memberships may be location-specific or provide access across locations depending on the plan.


3. User Personas

3.1 Coworking Space Owner (Admin)

Goals:

  • Manage all aspects of the coworking business from a single dashboard
  • Track business performance through analytics and reporting
  • Customize the website to match brand identity
  • Oversee memberships, bookings, and staff operations

Permissions: Full system access including financial data, member management, settings, and reporting

3.2 Front Desk Staff

Goals:

  • Assist members with day-to-day inquiries
  • Manage bookings and check-ins
  • Handle basic member account updates
  • Process tour requests and follow-ups

Permissions: Limited access—cannot access financial reports, billing settings, or system configuration

3.3 Prospective Member (Lead)

Goals:

  • Explore available spaces and amenities
  • Understand pricing and membership options
  • Schedule a tour of the facility
  • Compare plans to find the right fit

Journey: Website visitor → Tour booking → Lead nurturing → Member conversion

3.4 Individual Member

Goals:

  • Book meeting rooms and resources within quota
  • View upcoming bookings and membership status
  • Access invoices and billing history
  • Connect with other members through directory
  • Attend community events

Permissions: Access to member portal, personal bookings, own profile, community features

3.5 Corporate Account Manager

Goals:

  • Manage employee memberships under company account
  • View consolidated billing for all employees
  • Add or remove team members from the plan
  • Track company-wide space usage

Permissions: Access to company dashboard, employee management, corporate billing


4. Functional Requirements

4.1 Public Website

4.1.1 Homepage

User Stories:

  • As a visitor, I want to immediately understand what the coworking space offers so I can decide if it meets my needs
  • As a visitor, I want to see the different locations available so I can find one near me
  • As a visitor, I want clear calls-to-action so I know how to take the next step

Acceptance Criteria:

  • [ ] Hero section communicates value proposition clearly
  • [ ] Location selector/showcase displays all available spaces
  • [ ] Membership tiers are summarized with pricing
  • [ ] Prominent CTAs for tour booking and sign-up
  • [ ] Testimonials or social proof elements are visible
  • [ ] Mobile-responsive layout

4.1.2 Pricing Page

User Stories:

  • As a visitor, I want to compare membership plans side-by-side so I can choose the right one
  • As a visitor, I want to understand what's included in each tier so there are no surprises
  • As a corporate buyer, I want to see corporate account options so I can evaluate for my team

Acceptance Criteria:

  • [ ] All membership tiers displayed with clear pricing
  • [ ] Monthly, quarterly, and annual pricing shown with any discounts
  • [ ] Amenities included in each tier clearly listed
  • [ ] Meeting room hour quotas displayed per plan
  • [ ] Corporate account option highlighted
  • [ ] CTA to sign up or contact sales for each tier

4.1.3 Locations Page

User Stories:

  • As a visitor, I want to see all locations so I can find the most convenient one
  • As a visitor, I want to view details about each location so I can assess the facilities

Acceptance Criteria:

  • [ ] All locations listed with address and contact information
  • [ ] Each location shows available space types
  • [ ] Operating hours displayed per location
  • [ ] Photo gallery or visual representation of each space
  • [ ] Link to book a tour at specific location

4.1.4 Virtual Tour Page

User Stories:

  • As a remote visitor, I want to experience the space virtually so I can evaluate without visiting in person
  • As a decision-maker, I want to share a virtual tour with my team so we can discuss together

Acceptance Criteria:

  • [ ] 360-degree tour or video walkthrough available
  • [ ] Key amenities and features highlighted
  • [ ] Easy to navigate between different areas
  • [ ] Works on mobile devices
  • [ ] Option to schedule in-person tour after viewing

4.1.5 About Page

User Stories:

  • As a visitor, I want to learn about the company and team so I can trust the brand
  • As a visitor, I want to understand the coworking philosophy so I know if it aligns with my values

Acceptance Criteria:

  • [ ] Company story and mission clearly presented
  • [ ] Team members or leadership showcased (optional)
  • [ ] Community values or culture highlighted
  • [ ] Contact information accessible

4.1.6 Contact Page

User Stories:

  • As a visitor, I want to easily reach the team with questions so I can get answers before committing
  • As a visitor, I want location-specific contact options so I reach the right team

Acceptance Criteria:

  • [ ] Contact form with required fields (name, email, message)
  • [ ] Phone number and email displayed
  • [ ] Location selector if multiple locations exist
  • [ ] Map integration showing physical location(s)
  • [ ] Expected response time communicated

4.2 Tour Booking & Lead Management

4.2.1 Tour Scheduling

User Stories:

  • As a prospective member, I want to book a tour online so I can visit at a convenient time
  • As a staff member, I want to see scheduled tours so I can prepare for visitors
  • As an admin, I want tour data captured so I can follow up with leads

Acceptance Criteria:

  • [ ] Calendar interface showing available tour slots
  • [ ] Location selection for multi-location operations
  • [ ] Lead information captured (name, email, phone, company, needs)
  • [ ] Confirmation email sent to prospect after booking
  • [ ] Tour appears in staff/admin dashboard
  • [ ] Reminder sent 24 hours before scheduled tour

4.2.2 Lead Nurturing

User Stories:

  • As a staff member, I want to track lead status so I know who to follow up with
  • As an admin, I want to see conversion metrics so I can improve sales process

Acceptance Criteria:

  • [ ] Lead status tracking (new, toured, follow-up, converted, lost)
  • [ ] Notes field for staff to record interactions
  • [ ] Follow-up reminders for staff
  • [ ] Lead source tracking (how they found us)
  • [ ] Basic lead-to-member conversion reporting

4.3 Membership Management

4.3.1 Membership Plans

User Stories:

  • As an admin, I want to create and manage membership plans so I can offer different options
  • As a member, I want to clearly understand my plan benefits so I know what I'm paying for

Business Rules:

  • Each plan has a name, description, price, and billing cycle options
  • Plans include specific amenities (bundled, not à la carte)
  • Plans define meeting room hour quotas per billing period
  • Plans may be location-specific or cross-location
  • Pricing supports monthly, quarterly, and annual cycles

Acceptance Criteria:

  • [ ] Admin can create, edit, and deactivate plans
  • [ ] Each plan specifies included amenities
  • [ ] Meeting room quotas defined per plan
  • [ ] Billing cycles with pricing for each cycle length
  • [ ] Plans can be restricted to specific locations or allow all

4.3.2 Member Sign-up

User Stories:

  • As a prospective member, I want to sign up for a membership online so I can start using the space
  • As an admin, I want to manually add members so I can onboard people who signed up offline

Acceptance Criteria:

  • [ ] Online sign-up form with plan selection
  • [ ] Required information: name, email, phone, billing address
  • [ ] Payment information collected securely
  • [ ] Welcome email sent upon successful sign-up
  • [ ] Account created and accessible immediately
  • [ ] Admin can manually create member accounts

4.3.3 Free Trial

User Stories:

  • As a prospective member, I want to try the space before committing so I can make an informed decision
  • As an admin, I want to offer trials to increase conversions without revenue loss

Business Rules:

  • Trial duration is configurable by admin
  • Trial may be limited to certain plans
  • Automatic conversion to paid if not cancelled
  • Only one trial per person (prevent abuse)

Acceptance Criteria:

  • [ ] Admin can enable/disable trial period per plan
  • [ ] Trial duration configurable (e.g., 7 days, 14 days)
  • [ ] Member notified before trial ends
  • [ ] Automatic conversion to paid plan after trial
  • [ ] Trial status clearly shown in member portal
  • [ ] System prevents multiple trials per email/person

4.3.4 Plan Changes

User Stories:

  • As a member, I want to upgrade my plan so I can get more benefits
  • As a member, I want to downgrade my plan so I can reduce costs
  • As a member, I want to pause my membership temporarily so I don't lose my spot

Business Rules:

  • Upgrades take effect immediately, prorated billing applied
  • Downgrades take effect at next billing cycle
  • Pause duration has minimum and maximum limits
  • Paused memberships don't accrue quota or incur charges

Acceptance Criteria:

  • [ ] Member can request upgrade through portal
  • [ ] Upgrade applied immediately with prorated charge
  • [ ] Member can request downgrade through portal
  • [ ] Downgrade scheduled for next billing cycle
  • [ ] Member can request pause with date range
  • [ ] Pause limits enforced (min/max duration)
  • [ ] All changes logged for audit trail

4.3.5 Cancellation

User Stories:

  • As a member, I want to cancel my membership so I can stop payments
  • As an admin, I want a cancellation policy enforced so I can manage churn

Business Rules:

  • 30-day notice period required
  • Membership remains active until end of current billing cycle
  • Member retains access until membership end date
  • Cancellation reason captured for business insights

Acceptance Criteria:

  • [ ] Member can initiate cancellation through portal
  • [ ] 30-day notice clearly communicated
  • [ ] Cancellation date calculated (end of billing cycle after notice)
  • [ ] Confirmation email sent with end date
  • [ ] Cancellation reason collected (optional)
  • [ ] Admin can override cancellation policy if needed

4.4 Corporate Accounts

4.4.1 Company Account Setup

User Stories:

  • As a corporate buyer, I want a company account so I can manage all employees under one umbrella
  • As an admin, I want to offer corporate accounts so I can attract larger clients

Acceptance Criteria:

  • [ ] Company account with organization name and billing contact
  • [ ] Single invoice for all employee memberships
  • [ ] Primary contact designated as account manager
  • [ ] Company-wide membership plan selection

4.4.2 Employee Management

User Stories:

  • As a corporate account manager, I want to add employees so they can access the space
  • As a corporate account manager, I want to remove employees so we don't pay for people who left
  • As an employee, I want to use my company membership so I can work from the coworking space

Acceptance Criteria:

  • [ ] Account manager can add employees by email
  • [ ] Employee receives invitation to create profile
  • [ ] Account manager can deactivate employee access
  • [ ] Employee count limited by corporate plan
  • [ ] Each employee has their own profile but company billing
  • [ ] Account manager can view all employee bookings

4.5 Booking System

4.5.1 Resource Types

Business Rules:

  • Bookable resources: Meeting rooms, event spaces
  • Non-bookable resources: Hot desks (first-come), dedicated desks (assigned), private offices (leased)
  • Each bookable resource has capacity, amenities, and hourly rate

4.5.2 Real-time Booking

User Stories:

  • As a member, I want to see available time slots so I can book when I need
  • As a member, I want to book a room instantly so I don't have to wait for confirmation
  • As a member, I want to book at any of my accessible locations so I can work where convenient

Acceptance Criteria:

  • [ ] Calendar view shows real-time availability
  • [ ] Booking completes immediately upon submission
  • [ ] Location filter for multi-location members
  • [ ] Resource filter (room type, capacity, amenities)
  • [ ] Time slot selection with duration options
  • [ ] Booking confirmation displayed immediately
  • [ ] Confirmation email sent to member

4.5.3 Quota Management

User Stories:

  • As a member, I want to see my remaining hours so I can plan my bookings
  • As a member, I want to purchase extra hours when my quota runs out so I can continue booking

Business Rules:

  • Quotas reset at the start of each billing cycle
  • Unused quota does not roll over
  • Additional hours can be purchased at a fixed rate
  • Quota is deducted upon booking confirmation

Acceptance Criteria:

  • [ ] Member dashboard shows remaining quota
  • [ ] Warning displayed when quota is low
  • [ ] Booking prevented when quota exhausted (unless purchasing extra)
  • [ ] Option to purchase additional hours during booking
  • [ ] Additional hours charged immediately
  • [ ] Quota usage history visible to member

4.5.4 Booking Modifications

User Stories:

  • As a member, I want to cancel a booking so I can get my hours back
  • As a member, I want to reschedule a booking so I can change my plans

Business Rules:

  • Cancellations allowed up to X hours before start time (configurable)
  • Late cancellations do not refund quota
  • Rescheduling treated as cancel + new booking

Acceptance Criteria:

  • [ ] Member can cancel upcoming bookings
  • [ ] Quota refunded if cancelled within allowed window
  • [ ] No refund for late cancellations
  • [ ] Member can reschedule (if new slot available)
  • [ ] Cancellation policy clearly displayed
  • [ ] Cancelled bookings logged for reporting

4.6 Member Portal

4.6.1 Dashboard

User Stories:

  • As a member, I want a personalized dashboard so I can see everything relevant to me
  • As a member, I want quick access to common actions so I can be efficient

Acceptance Criteria:

  • [ ] Welcome message with member name
  • [ ] Upcoming bookings summary
  • [ ] Quota remaining display
  • [ ] Membership status and renewal date
  • [ ] Quick action buttons (book room, view invoices, etc.)
  • [ ] Recent activity feed

4.6.2 Profile Management

User Stories:

  • As a member, I want to update my profile so my information stays current
  • As a member, I want to control my directory visibility so I maintain privacy

Acceptance Criteria:

  • [ ] Edit personal information (name, phone, bio)
  • [ ] Upload profile photo
  • [ ] Add business/company information
  • [ ] Add skills/expertise for directory
  • [ ] Toggle directory visibility (opt-in/opt-out)
  • [ ] Change password

4.6.3 Booking Management

User Stories:

  • As a member, I want to see all my bookings so I can manage my schedule
  • As a member, I want to filter bookings so I can find specific ones

Acceptance Criteria:

  • [ ] List of upcoming bookings with details
  • [ ] Past bookings history
  • [ ] Filter by location, date range, resource type
  • [ ] Cancel or reschedule actions available
  • [ ] Calendar view option

4.6.4 Billing & Invoices

User Stories:

  • As a member, I want to view my invoices so I can track expenses
  • As a member, I want to download invoices so I can submit for reimbursement
  • As a member, I want to update payment method so I don't have service interruption

Acceptance Criteria:

  • [ ] List of all invoices with status (paid, pending, overdue)
  • [ ] Invoice details (line items, dates, amounts)
  • [ ] Download invoice as PDF
  • [ ] View/update payment method
  • [ ] Billing history summary

4.6.5 Membership Management

User Stories:

  • As a member, I want to see my membership details so I know my benefits
  • As a member, I want to manage my membership so I can make changes

Acceptance Criteria:

  • [ ] Current plan name and price displayed
  • [ ] List of included amenities
  • [ ] Quota allocation and usage
  • [ ] Renewal/next billing date
  • [ ] Options to upgrade, downgrade, pause, or cancel

4.7 Community Features

4.7.1 Member Directory

User Stories:

  • As a member, I want to discover other members so I can network
  • As a member, I want to find members with specific skills so I can collaborate
  • As a member, I want to control my listing so I maintain privacy

Business Rules:

  • Directory is opt-in (members choose to be listed)
  • Only accessible to logged-in members
  • Members control what information is visible

Acceptance Criteria:

  • [ ] Searchable directory of opted-in members
  • [ ] Filter by location, industry, skills
  • [ ] Member profile cards with photo, name, company, bio
  • [ ] Contact button (email or in-app message)
  • [ ] Members can opt-in/out at any time
  • [ ] Only visible to authenticated members

4.7.2 Events Calendar

User Stories:

  • As a member, I want to see upcoming events so I can participate
  • As a member, I want to RSVP to events so organizers know I'm coming
  • As an admin, I want to create events so I can build community

Acceptance Criteria:

  • [ ] Calendar view of upcoming events
  • [ ] Event details (title, description, date, time, location, capacity)
  • [ ] RSVP functionality with attendee limit
  • [ ] Filter events by location and type
  • [ ] Admin can create, edit, and cancel events
  • [ ] Event reminder notifications

4.8 Admin Dashboard & Reporting

4.8.1 Admin Dashboard

User Stories:

  • As an admin, I want an overview of business health so I can make informed decisions
  • As an admin, I want quick access to key metrics so I don't have to dig through reports

Acceptance Criteria:

  • [ ] Total active members count
  • [ ] New members this month
  • [ ] Revenue this month (and comparison to last month)
  • [ ] Occupancy rate across locations
  • [ ] Upcoming tours and recent leads
  • [ ] Quick action buttons for common tasks

4.8.2 Membership Reports

User Stories:

  • As an admin, I want to track member growth so I can measure marketing effectiveness
  • As an admin, I want to understand churn so I can improve retention

Acceptance Criteria:

  • [ ] Member count over time (graph)
  • [ ] New members by period
  • [ ] Cancellations by period
  • [ ] Churn rate calculation
  • [ ] Member breakdown by plan type
  • [ ] Export data for external analysis

4.8.3 Revenue Reports

User Stories:

  • As an admin, I want to track revenue so I can monitor financial health
  • As an admin, I want to understand revenue sources so I can optimize pricing

Acceptance Criteria:

  • [ ] Total revenue by period
  • [ ] Revenue breakdown by plan type
  • [ ] Additional hours revenue
  • [ ] Revenue by location
  • [ ] Month-over-month comparison
  • [ ] Export for accounting

4.8.4 Booking & Utilization Reports

User Stories:

  • As an admin, I want to see space utilization so I can optimize resources
  • As an admin, I want to identify peak times so I can plan staffing

Acceptance Criteria:

  • [ ] Bookings by resource and time period
  • [ ] Utilization rate per room/space
  • [ ] Peak hours/days analysis
  • [ ] No-show tracking
  • [ ] Revenue from bookings
  • [ ] Location comparison

4.8.5 Lead & Conversion Reports

User Stories:

  • As an admin, I want to track lead sources so I can invest in effective channels
  • As an admin, I want to measure conversion rates so I can improve sales process

Acceptance Criteria:

  • [ ] Leads by source
  • [ ] Tour completion rate
  • [ ] Lead-to-member conversion rate
  • [ ] Average time to conversion
  • [ ] Lost lead reasons

4.9 Notifications

4.9.1 Email Notifications

User Stories:

  • As a member, I want booking confirmations so I have a record
  • As a member, I want payment receipts so I can track expenses

Required Notifications:

Trigger Recipient Content
Booking confirmed Member Booking details, location, time
Booking cancelled Member Cancellation confirmation
Payment processed Member Receipt with amount and date
Payment failed Member Alert with retry instructions
Membership renewal upcoming Member Reminder with renewal date

Acceptance Criteria:

  • [ ] All required notifications sent automatically
  • [ ] Emails branded with coworking space identity
  • [ ] Unsubscribe option for non-critical notifications
  • [ ] Admin can customize email templates

4.10 Theme Customization

4.10.1 Visual Customization

User Stories:

  • As a space owner, I want to match my website to my brand so visitors have a consistent experience
  • As a space owner, I want to customize without coding so I can make changes myself

Acceptance Criteria:

  • [ ] Brand colors configurable (primary, secondary, accent)
  • [ ] Logo upload for header and footer
  • [ ] Favicon upload
  • [ ] Font selection from curated options
  • [ ] Homepage layout options
  • [ ] Footer content customizable
  • [ ] All changes preview before publishing

5. Business Rules Summary

5.1 Membership Rules

Rule Description
MEM-001 Members must provide valid payment method to activate membership
MEM-002 Free trials limited to one per person based on email
MEM-003 Upgrades take effect immediately with prorated billing
MEM-004 Downgrades take effect at next billing cycle
MEM-005 Cancellations require 30-day notice
MEM-006 Cancelled memberships remain active until end of billing cycle
MEM-007 Paused memberships do not accrue quota or charges

5.2 Booking Rules

Rule Description
BKG-001 Bookings deduct from quota at time of confirmation
BKG-002 Cancellations refund quota only if within allowed window
BKG-003 Members cannot book more than their remaining quota unless purchasing extra
BKG-004 Quotas reset at start of each billing cycle
BKG-005 Unused quota does not roll over
BKG-006 All bookings display in location's local time zone

5.3 Corporate Account Rules

Rule Description
CORP-001 Corporate accounts receive single consolidated invoice
CORP-002 Account manager can add/remove employees
CORP-003 Employee count limited by corporate plan
CORP-004 Employees share company quota or have individual quotas (configurable)

5.4 Billing Rules

Rule Description
BILL-001 Billing cycles: monthly, quarterly, annual
BILL-002 Annual plans may include discount (configurable)
BILL-003 Failed payments trigger retry and member notification
BILL-004 Membership suspended after X failed payment attempts
BILL-005 Additional hour purchases charged immediately

6. Non-Functional Requirements

6.1 Usability

  • Website must be mobile-responsive
  • Member portal accessible on mobile devices
  • Booking process completable in under 2 minutes
  • Admin interface intuitive without extensive training

6.2 Accessibility

  • Theme should follow WCAG 2.1 AA guidelines
  • All interactive elements keyboard accessible
  • Proper color contrast for readability
  • Alt text for images

6.3 Performance

  • Public pages load within 3 seconds
  • Booking availability updates in real-time
  • Dashboard loads within 5 seconds

6.4 Security

  • Member data protected with secure authentication
  • Payment information handled by PCI-compliant processor
  • Admin actions logged for audit trail
  • Personal data export capability (GDPR compliance)

6.5 Scalability

  • Support for multiple locations
  • Handle hundreds of concurrent members
  • Booking system supports high-demand periods

7. Out of Scope

The following are explicitly NOT included in this theme:

  • Digital access control integration (key cards, QR codes, mobile app)
  • Guest pass management
  • À la carte amenity purchases
  • Franchise/white-label multi-tenant operations
  • Native mobile applications
  • Third-party calendar sync (Google, Outlook)
  • Chat/messaging between members
  • Automated marketing campaigns
  • Inventory management for physical supplies

8. Glossary

Term Definition
Hot Desk Shared workspace with no assigned seating
Dedicated Desk Reserved desk assigned to a specific member
Private Office Enclosed office space for individual or team use
Quota Allocated meeting room hours included in membership
Billing Cycle Period between recurring payments (monthly, quarterly, annual)
Lead Prospective member who has shown interest but not signed up
Conversion When a lead becomes a paying member
Churn When a member cancels their membership
Utilization Percentage of available time a resource is booked

Document Information

Field Value
Project Name CoworkPress
Document Type Business Requirements Document (BRD)
Version 1.0
Created 2026-01-13
Status Draft

1. Executive Summary

CoworkPress is a WordPress theme designed for coworking space owners to promote and manage their coworking business. The theme enables owners to showcase their spaces, manage memberships, handle bookings, and build community—all through a highly customizable, professional website.

1.1 Business Objectives

  • Enable coworking space owners to establish a professional online presence
  • Streamline membership management and billing operations
  • Provide real-time booking capabilities for spaces and resources
  • Support multi-location operations under a single platform
  • Deliver comprehensive business analytics and reporting
  • Foster community engagement through member directories and events

1.2 Target Market

Primary User (Theme Buyer): Coworking space owners and operators managing one or more locations

End Users (Website Visitors):

  • Freelancers and remote workers seeking flexible workspace
  • Small teams and startups needing dedicated desks or private offices
  • Enterprise clients looking for satellite offices or meeting spaces

2. Business Context

2.1 Business Model

The coworking space operates on a membership-based model with flexible billing cycles (monthly, quarterly, annual). Revenue is generated through:

  • Recurring membership subscriptions
  • Additional hour purchases when quotas are exhausted
  • Corporate accounts managing multiple employee memberships

2.2 Space Offerings

Space Type Description
Hot Desks Shared open workspace with no assigned seating
Dedicated Desks Reserved desk space for consistent use
Private Offices Enclosed offices for teams or individuals
Meeting Rooms Bookable conference and collaboration spaces
Event Spaces Larger venues for workshops, seminars, and gatherings

2.3 Multi-Location Operations

The business supports multiple physical locations, each operating in its own time zone. Memberships may be location-specific or provide access across locations depending on the plan.


3. User Personas

3.1 Coworking Space Owner (Admin)

Goals:

  • Manage all aspects of the coworking business from a single dashboard
  • Track business performance through analytics and reporting
  • Customize the website to match brand identity
  • Oversee memberships, bookings, and staff operations

Permissions: Full system access including financial data, member management, settings, and reporting

3.2 Front Desk Staff

Goals:

  • Assist members with day-to-day inquiries
  • Manage bookings and check-ins
  • Handle basic member account updates
  • Process tour requests and follow-ups

Permissions: Limited access—cannot access financial reports, billing settings, or system configuration

3.3 Prospective Member (Lead)

Goals:

  • Explore available spaces and amenities
  • Understand pricing and membership options
  • Schedule a tour of the facility
  • Compare plans to find the right fit

Journey: Website visitor → Tour booking → Lead nurturing → Member conversion

3.4 Individual Member

Goals:

  • Book meeting rooms and resources within quota
  • View upcoming bookings and membership status
  • Access invoices and billing history
  • Connect with other members through directory
  • Attend community events

Permissions: Access to member portal, personal bookings, own profile, community features

3.5 Corporate Account Manager

Goals:

  • Manage employee memberships under company account
  • View consolidated billing for all employees
  • Add or remove team members from the plan
  • Track company-wide space usage

Permissions: Access to company dashboard, employee management, corporate billing


4. Functional Requirements

4.1 Public Website

4.1.1 Homepage

User Stories:

  • As a visitor, I want to immediately understand what the coworking space offers so I can decide if it meets my needs
  • As a visitor, I want to see the different locations available so I can find one near me
  • As a visitor, I want clear calls-to-action so I know how to take the next step

Acceptance Criteria:

  • [ ] Hero section communicates value proposition clearly
  • [ ] Location selector/showcase displays all available spaces
  • [ ] Membership tiers are summarized with pricing
  • [ ] Prominent CTAs for tour booking and sign-up
  • [ ] Testimonials or social proof elements are visible
  • [ ] Mobile-responsive layout

4.1.2 Pricing Page

User Stories:

  • As a visitor, I want to compare membership plans side-by-side so I can choose the right one
  • As a visitor, I want to understand what's included in each tier so there are no surprises
  • As a corporate buyer, I want to see corporate account options so I can evaluate for my team

Acceptance Criteria:

  • [ ] All membership tiers displayed with clear pricing
  • [ ] Monthly, quarterly, and annual pricing shown with any discounts
  • [ ] Amenities included in each tier clearly listed
  • [ ] Meeting room hour quotas displayed per plan
  • [ ] Corporate account option highlighted
  • [ ] CTA to sign up or contact sales for each tier

4.1.3 Locations Page

User Stories:

  • As a visitor, I want to see all locations so I can find the most convenient one
  • As a visitor, I want to view details about each location so I can assess the facilities

Acceptance Criteria:

  • [ ] All locations listed with address and contact information
  • [ ] Each location shows available space types
  • [ ] Operating hours displayed per location
  • [ ] Photo gallery or visual representation of each space
  • [ ] Link to book a tour at specific location

4.1.4 Virtual Tour Page

User Stories:

  • As a remote visitor, I want to experience the space virtually so I can evaluate without visiting in person
  • As a decision-maker, I want to share a virtual tour with my team so we can discuss together

Acceptance Criteria:

  • [ ] 360-degree tour or video walkthrough available
  • [ ] Key amenities and features highlighted
  • [ ] Easy to navigate between different areas
  • [ ] Works on mobile devices
  • [ ] Option to schedule in-person tour after viewing

4.1.5 About Page

User Stories:

  • As a visitor, I want to learn about the company and team so I can trust the brand
  • As a visitor, I want to understand the coworking philosophy so I know if it aligns with my values

Acceptance Criteria:

  • [ ] Company story and mission clearly presented
  • [ ] Team members or leadership showcased (optional)
  • [ ] Community values or culture highlighted
  • [ ] Contact information accessible

4.1.6 Contact Page

User Stories:

  • As a visitor, I want to easily reach the team with questions so I can get answers before committing
  • As a visitor, I want location-specific contact options so I reach the right team

Acceptance Criteria:

  • [ ] Contact form with required fields (name, email, message)
  • [ ] Phone number and email displayed
  • [ ] Location selector if multiple locations exist
  • [ ] Map integration showing physical location(s)
  • [ ] Expected response time communicated

4.2 Tour Booking & Lead Management

4.2.1 Tour Scheduling

User Stories:

  • As a prospective member, I want to book a tour online so I can visit at a convenient time
  • As a staff member, I want to see scheduled tours so I can prepare for visitors
  • As an admin, I want tour data captured so I can follow up with leads

Acceptance Criteria:

  • [ ] Calendar interface showing available tour slots
  • [ ] Location selection for multi-location operations
  • [ ] Lead information captured (name, email, phone, company, needs)
  • [ ] Confirmation email sent to prospect after booking
  • [ ] Tour appears in staff/admin dashboard
  • [ ] Reminder sent 24 hours before scheduled tour

4.2.2 Lead Nurturing

User Stories:

  • As a staff member, I want to track lead status so I know who to follow up with
  • As an admin, I want to see conversion metrics so I can improve sales process

Acceptance Criteria:

  • [ ] Lead status tracking (new, toured, follow-up, converted, lost)
  • [ ] Notes field for staff to record interactions
  • [ ] Follow-up reminders for staff
  • [ ] Lead source tracking (how they found us)
  • [ ] Basic lead-to-member conversion reporting

4.3 Membership Management

4.3.1 Membership Plans

User Stories:

  • As an admin, I want to create and manage membership plans so I can offer different options
  • As a member, I want to clearly understand my plan benefits so I know what I'm paying for

Business Rules:

  • Each plan has a name, description, price, and billing cycle options
  • Plans include specific amenities (bundled, not à la carte)
  • Plans define meeting room hour quotas per billing period
  • Plans may be location-specific or cross-location
  • Pricing supports monthly, quarterly, and annual cycles

Acceptance Criteria:

  • [ ] Admin can create, edit, and deactivate plans
  • [ ] Each plan specifies included amenities
  • [ ] Meeting room quotas defined per plan
  • [ ] Billing cycles with pricing for each cycle length
  • [ ] Plans can be restricted to specific locations or allow all

4.3.2 Member Sign-up

User Stories:

  • As a prospective member, I want to sign up for a membership online so I can start using the space
  • As an admin, I want to manually add members so I can onboard people who signed up offline

Acceptance Criteria:

  • [ ] Online sign-up form with plan selection
  • [ ] Required information: name, email, phone, billing address
  • [ ] Payment information collected securely
  • [ ] Welcome email sent upon successful sign-up
  • [ ] Account created and accessible immediately
  • [ ] Admin can manually create member accounts

4.3.3 Free Trial

User Stories:

  • As a prospective member, I want to try the space before committing so I can make an informed decision
  • As an admin, I want to offer trials to increase conversions without revenue loss

Business Rules:

  • Trial duration is configurable by admin
  • Trial may be limited to certain plans
  • Automatic conversion to paid if not cancelled
  • Only one trial per person (prevent abuse)

Acceptance Criteria:

  • [ ] Admin can enable/disable trial period per plan
  • [ ] Trial duration configurable (e.g., 7 days, 14 days)
  • [ ] Member notified before trial ends
  • [ ] Automatic conversion to paid plan after trial
  • [ ] Trial status clearly shown in member portal
  • [ ] System prevents multiple trials per email/person

4.3.4 Plan Changes

User Stories:

  • As a member, I want to upgrade my plan so I can get more benefits
  • As a member, I want to downgrade my plan so I can reduce costs
  • As a member, I want to pause my membership temporarily so I don't lose my spot

Business Rules:

  • Upgrades take effect immediately, prorated billing applied
  • Downgrades take effect at next billing cycle
  • Pause duration has minimum and maximum limits
  • Paused memberships don't accrue quota or incur charges

Acceptance Criteria:

  • [ ] Member can request upgrade through portal
  • [ ] Upgrade applied immediately with prorated charge
  • [ ] Member can request downgrade through portal
  • [ ] Downgrade scheduled for next billing cycle
  • [ ] Member can request pause with date range
  • [ ] Pause limits enforced (min/max duration)
  • [ ] All changes logged for audit trail

4.3.5 Cancellation

User Stories:

  • As a member, I want to cancel my membership so I can stop payments
  • As an admin, I want a cancellation policy enforced so I can manage churn

Business Rules:

  • 30-day notice period required
  • Membership remains active until end of current billing cycle
  • Member retains access until membership end date
  • Cancellation reason captured for business insights

Acceptance Criteria:

  • [ ] Member can initiate cancellation through portal
  • [ ] 30-day notice clearly communicated
  • [ ] Cancellation date calculated (end of billing cycle after notice)
  • [ ] Confirmation email sent with end date
  • [ ] Cancellation reason collected (optional)
  • [ ] Admin can override cancellation policy if needed

4.4 Corporate Accounts

4.4.1 Company Account Setup

User Stories:

  • As a corporate buyer, I want a company account so I can manage all employees under one umbrella
  • As an admin, I want to offer corporate accounts so I can attract larger clients

Acceptance Criteria:

  • [ ] Company account with organization name and billing contact
  • [ ] Single invoice for all employee memberships
  • [ ] Primary contact designated as account manager
  • [ ] Company-wide membership plan selection

4.4.2 Employee Management

User Stories:

  • As a corporate account manager, I want to add employees so they can access the space
  • As a corporate account manager, I want to remove employees so we don't pay for people who left
  • As an employee, I want to use my company membership so I can work from the coworking space

Acceptance Criteria:

  • [ ] Account manager can add employees by email
  • [ ] Employee receives invitation to create profile
  • [ ] Account manager can deactivate employee access
  • [ ] Employee count limited by corporate plan
  • [ ] Each employee has their own profile but company billing
  • [ ] Account manager can view all employee bookings

4.5 Booking System

4.5.1 Resource Types

Business Rules:

  • Bookable resources: Meeting rooms, event spaces
  • Non-bookable resources: Hot desks (first-come), dedicated desks (assigned), private offices (leased)
  • Each bookable resource has capacity, amenities, and hourly rate

4.5.2 Real-time Booking

User Stories:

  • As a member, I want to see available time slots so I can book when I need
  • As a member, I want to book a room instantly so I don't have to wait for confirmation
  • As a member, I want to book at any of my accessible locations so I can work where convenient

Acceptance Criteria:

  • [ ] Calendar view shows real-time availability
  • [ ] Booking completes immediately upon submission
  • [ ] Location filter for multi-location members
  • [ ] Resource filter (room type, capacity, amenities)
  • [ ] Time slot selection with duration options
  • [ ] Booking confirmation displayed immediately
  • [ ] Confirmation email sent to member

4.5.3 Quota Management

User Stories:

  • As a member, I want to see my remaining hours so I can plan my bookings
  • As a member, I want to purchase extra hours when my quota runs out so I can continue booking

Business Rules:

  • Quotas reset at the start of each billing cycle
  • Unused quota does not roll over
  • Additional hours can be purchased at a fixed rate
  • Quota is deducted upon booking confirmation

Acceptance Criteria:

  • [ ] Member dashboard shows remaining quota
  • [ ] Warning displayed when quota is low
  • [ ] Booking prevented when quota exhausted (unless purchasing extra)
  • [ ] Option to purchase additional hours during booking
  • [ ] Additional hours charged immediately
  • [ ] Quota usage history visible to member

4.5.4 Booking Modifications

User Stories:

  • As a member, I want to cancel a booking so I can get my hours back
  • As a member, I want to reschedule a booking so I can change my plans

Business Rules:

  • Cancellations allowed up to X hours before start time (configurable)
  • Late cancellations do not refund quota
  • Rescheduling treated as cancel + new booking

Acceptance Criteria:

  • [ ] Member can cancel upcoming bookings
  • [ ] Quota refunded if cancelled within allowed window
  • [ ] No refund for late cancellations
  • [ ] Member can reschedule (if new slot available)
  • [ ] Cancellation policy clearly displayed
  • [ ] Cancelled bookings logged for reporting

4.6 Member Portal

4.6.1 Dashboard

User Stories:

  • As a member, I want a personalized dashboard so I can see everything relevant to me
  • As a member, I want quick access to common actions so I can be efficient

Acceptance Criteria:

  • [ ] Welcome message with member name
  • [ ] Upcoming bookings summary
  • [ ] Quota remaining display
  • [ ] Membership status and renewal date
  • [ ] Quick action buttons (book room, view invoices, etc.)
  • [ ] Recent activity feed

4.6.2 Profile Management

User Stories:

  • As a member, I want to update my profile so my information stays current
  • As a member, I want to control my directory visibility so I maintain privacy

Acceptance Criteria:

  • [ ] Edit personal information (name, phone, bio)
  • [ ] Upload profile photo
  • [ ] Add business/company information
  • [ ] Add skills/expertise for directory
  • [ ] Toggle directory visibility (opt-in/opt-out)
  • [ ] Change password

4.6.3 Booking Management

User Stories:

  • As a member, I want to see all my bookings so I can manage my schedule
  • As a member, I want to filter bookings so I can find specific ones

Acceptance Criteria:

  • [ ] List of upcoming bookings with details
  • [ ] Past bookings history
  • [ ] Filter by location, date range, resource type
  • [ ] Cancel or reschedule actions available
  • [ ] Calendar view option

4.6.4 Billing & Invoices

User Stories:

  • As a member, I want to view my invoices so I can track expenses
  • As a member, I want to download invoices so I can submit for reimbursement
  • As a member, I want to update payment method so I don't have service interruption

Acceptance Criteria:

  • [ ] List of all invoices with status (paid, pending, overdue)
  • [ ] Invoice details (line items, dates, amounts)
  • [ ] Download invoice as PDF
  • [ ] View/update payment method
  • [ ] Billing history summary

4.6.5 Membership Management

User Stories:

  • As a member, I want to see my membership details so I know my benefits
  • As a member, I want to manage my membership so I can make changes

Acceptance Criteria:

  • [ ] Current plan name and price displayed
  • [ ] List of included amenities
  • [ ] Quota allocation and usage
  • [ ] Renewal/next billing date
  • [ ] Options to upgrade, downgrade, pause, or cancel

4.7 Community Features

4.7.1 Member Directory

User Stories:

  • As a member, I want to discover other members so I can network
  • As a member, I want to find members with specific skills so I can collaborate
  • As a member, I want to control my listing so I maintain privacy

Business Rules:

  • Directory is opt-in (members choose to be listed)
  • Only accessible to logged-in members
  • Members control what information is visible

Acceptance Criteria:

  • [ ] Searchable directory of opted-in members
  • [ ] Filter by location, industry, skills
  • [ ] Member profile cards with photo, name, company, bio
  • [ ] Contact button (email or in-app message)
  • [ ] Members can opt-in/out at any time
  • [ ] Only visible to authenticated members

4.7.2 Events Calendar

User Stories:

  • As a member, I want to see upcoming events so I can participate
  • As a member, I want to RSVP to events so organizers know I'm coming
  • As an admin, I want to create events so I can build community

Acceptance Criteria:

  • [ ] Calendar view of upcoming events
  • [ ] Event details (title, description, date, time, location, capacity)
  • [ ] RSVP functionality with attendee limit
  • [ ] Filter events by location and type
  • [ ] Admin can create, edit, and cancel events
  • [ ] Event reminder notifications

4.8 Admin Dashboard & Reporting

4.8.1 Admin Dashboard

User Stories:

  • As an admin, I want an overview of business health so I can make informed decisions
  • As an admin, I want quick access to key metrics so I don't have to dig through reports

Acceptance Criteria:

  • [ ] Total active members count
  • [ ] New members this month
  • [ ] Revenue this month (and comparison to last month)
  • [ ] Occupancy rate across locations
  • [ ] Upcoming tours and recent leads
  • [ ] Quick action buttons for common tasks

4.8.2 Membership Reports

User Stories:

  • As an admin, I want to track member growth so I can measure marketing effectiveness
  • As an admin, I want to understand churn so I can improve retention

Acceptance Criteria:

  • [ ] Member count over time (graph)
  • [ ] New members by period
  • [ ] Cancellations by period
  • [ ] Churn rate calculation
  • [ ] Member breakdown by plan type
  • [ ] Export data for external analysis

4.8.3 Revenue Reports

User Stories:

  • As an admin, I want to track revenue so I can monitor financial health
  • As an admin, I want to understand revenue sources so I can optimize pricing

Acceptance Criteria:

  • [ ] Total revenue by period
  • [ ] Revenue breakdown by plan type
  • [ ] Additional hours revenue
  • [ ] Revenue by location
  • [ ] Month-over-month comparison
  • [ ] Export for accounting

4.8.4 Booking & Utilization Reports

User Stories:

  • As an admin, I want to see space utilization so I can optimize resources
  • As an admin, I want to identify peak times so I can plan staffing

Acceptance Criteria:

  • [ ] Bookings by resource and time period
  • [ ] Utilization rate per room/space
  • [ ] Peak hours/days analysis
  • [ ] No-show tracking
  • [ ] Revenue from bookings
  • [ ] Location comparison

4.8.5 Lead & Conversion Reports

User Stories:

  • As an admin, I want to track lead sources so I can invest in effective channels
  • As an admin, I want to measure conversion rates so I can improve sales process

Acceptance Criteria:

  • [ ] Leads by source
  • [ ] Tour completion rate
  • [ ] Lead-to-member conversion rate
  • [ ] Average time to conversion
  • [ ] Lost lead reasons

4.9 Notifications

4.9.1 Email Notifications

User Stories:

  • As a member, I want booking confirmations so I have a record
  • As a member, I want payment receipts so I can track expenses

Required Notifications:

Trigger Recipient Content
Booking confirmed Member Booking details, location, time
Booking cancelled Member Cancellation confirmation
Payment processed Member Receipt with amount and date
Payment failed Member Alert with retry instructions
Membership renewal upcoming Member Reminder with renewal date

Acceptance Criteria:

  • [ ] All required notifications sent automatically
  • [ ] Emails branded with coworking space identity
  • [ ] Unsubscribe option for non-critical notifications
  • [ ] Admin can customize email templates

4.10 Theme Customization

4.10.1 Visual Customization

User Stories:

  • As a space owner, I want to match my website to my brand so visitors have a consistent experience
  • As a space owner, I want to customize without coding so I can make changes myself

Acceptance Criteria:

  • [ ] Brand colors configurable (primary, secondary, accent)
  • [ ] Logo upload for header and footer
  • [ ] Favicon upload
  • [ ] Font selection from curated options
  • [ ] Homepage layout options
  • [ ] Footer content customizable
  • [ ] All changes preview before publishing

5. Business Rules Summary

5.1 Membership Rules

Rule Description
MEM-001 Members must provide valid payment method to activate membership
MEM-002 Free trials limited to one per person based on email
MEM-003 Upgrades take effect immediately with prorated billing
MEM-004 Downgrades take effect at next billing cycle
MEM-005 Cancellations require 30-day notice
MEM-006 Cancelled memberships remain active until end of billing cycle
MEM-007 Paused memberships do not accrue quota or charges

5.2 Booking Rules

Rule Description
BKG-001 Bookings deduct from quota at time of confirmation
BKG-002 Cancellations refund quota only if within allowed window
BKG-003 Members cannot book more than their remaining quota unless purchasing extra
BKG-004 Quotas reset at start of each billing cycle
BKG-005 Unused quota does not roll over
BKG-006 All bookings display in location's local time zone

5.3 Corporate Account Rules

Rule Description
CORP-001 Corporate accounts receive single consolidated invoice
CORP-002 Account manager can add/remove employees
CORP-003 Employee count limited by corporate plan
CORP-004 Employees share company quota or have individual quotas (configurable)

5.4 Billing Rules

Rule Description
BILL-001 Billing cycles: monthly, quarterly, annual
BILL-002 Annual plans may include discount (configurable)
BILL-003 Failed payments trigger retry and member notification
BILL-004 Membership suspended after X failed payment attempts
BILL-005 Additional hour purchases charged immediately

6. Non-Functional Requirements

6.1 Usability

  • Website must be mobile-responsive
  • Member portal accessible on mobile devices
  • Booking process completable in under 2 minutes
  • Admin interface intuitive without extensive training

6.2 Accessibility

  • Theme should follow WCAG 2.1 AA guidelines
  • All interactive elements keyboard accessible
  • Proper color contrast for readability
  • Alt text for images

6.3 Performance

  • Public pages load within 3 seconds
  • Booking availability updates in real-time
  • Dashboard loads within 5 seconds

6.4 Security

  • Member data protected with secure authentication
  • Payment information handled by PCI-compliant processor
  • Admin actions logged for audit trail
  • Personal data export capability (GDPR compliance)

6.5 Scalability

  • Support for multiple locations
  • Handle hundreds of concurrent members
  • Booking system supports high-demand periods

7. Out of Scope

The following are explicitly NOT included in this theme:

  • Digital access control integration (key cards, QR codes, mobile app)
  • Guest pass management
  • À la carte amenity purchases
  • Franchise/white-label multi-tenant operations
  • Native mobile applications
  • Third-party calendar sync (Google, Outlook)
  • Chat/messaging between members
  • Automated marketing campaigns
  • Inventory management for physical supplies

8. Glossary

Term Definition
Hot Desk Shared workspace with no assigned seating
Dedicated Desk Reserved desk assigned to a specific member
Private Office Enclosed office space for individual or team use
Quota Allocated meeting room hours included in membership
Billing Cycle Period between recurring payments (monthly, quarterly, annual)
Lead Prospective member who has shown interest but not signed up
Conversion When a lead becomes a paying member
Churn When a member cancels their membership
Utilization Percentage of available time a resource is booked

Compare this to the PRD output.

The BRD contains:

  • Executive Summary with clear business objectives
  • 5 defined user personas (Admin, Staff, Lead, Member, Corporate Manager)
  • Functional requirements as user stories with acceptance criteria
  • 16 codified business rules
  • Non-functional requirements (usability, accessibility, performance)
  • Explicit “Out of Scope” section
  • Glossary of terms

The BRD does NOT contain:

  • Database schemas
  • API endpoint specifications
  • PHP version requirements
  • CSS bundle size limits
  • Framework choices

No premature implementation decisions. Just clear requirements I can build against.

And because Claude interviewed me first, these requirements reflect my decisions—not Claude’s assumptions.

That’s the difference.

.

.

.

👉 The Prompt Template (Copy-Paste This)

Here’s the exact prompt structure you can steal (please steal it—that’s why I’m sharing it):

I want to build [YOUR PROJECT DESCRIPTION].

I want you to help me brainstorm for the business requirement 
document (BRD) for this [project type]. Focus on business logic 
and rules, user stories, and acceptance criteria.

[Optional: Use the "[skill-name]" skill to understand the 
development patterns and guidance for building [technology].]

IMPORTANT: DO NOT INCLUDE ANY TECHNICAL IMPLEMENTATION DETAILS.

Use the AskUserQuestionTool to Ask me clarifying questions 
until you are 95% confident you can complete this task 
successfully. For each question, add your recommendation 
(with reason why) below the options. This would help me 
in making a better decision.

Put the BRD at @[your-path]/[filename].md

Why each piece matters:

  1. “Focus on business logic, user stories, and acceptance criteria” Forces Claude to think from user perspective, not implementation. This is where the magic happens.
  2. “DO NOT INCLUDE ANY TECHNICAL IMPLEMENTATION DETAILS” Hard boundary that keeps the document clean. (Again with the yelling. It works.)
  3. “95% confident” Gives Claude a threshold—it keeps asking until it has enough information. No more guessing.
  4. “Add your recommendation (with reason why)” Claude explains its thinking, helping you make informed decisions instead of random choices.

.

.

.

Where Do Technical Details Go?

Okay, so if technical specs don’t belong in your requirements, where do they live?

Two places:

  1. Project rules — Your .claude/rules/ directory
  2. Agent skills — Reusable patterns Claude loads on-demand

I covered this in detail in my previous issue on self-evolving Claude Code rules. (If you missed it, go read it. I’ll wait.)

The key insight: Claude loads skills when it needs them.

Instead of burning context on every technical decision upfront, Claude reads skill descriptions at session start. When it encounters a database task, then it loads your database rules. When it’s building an API, then it loads your API patterns.

Your requirements stay clean. Your context window stays focused. Technical standards still get applied—just at the right moment.

Think of it as separation of concerns for your AI workflow:

  • Requirements (BRD) = What you want to build (the what and why)
  • Project rules & skills = How to build it (the how)
Infographic titled "SEPARATION OF CONCERNS" illustrating how to manage information in an AI context window. The top section is a rounded box labeled "YOUR BRD 🧠📄" containing high-level requirements like "User stories," "Business rules," "Acceptance criteria," "Scope boundaries," "User personas," and "What + Why," noting that it "(Lives in context window)." A large gray downward arrow points to the bottom section, another rounded box labeled "PROJECT RULES + SKILLS 🧰⚙️" containing technical details like "Tech stack patterns," "API conventions," "Database rules," "Testing standards," "Code style," and "How," noting that it is "(Loaded on-demand when needed)." A concluding sentence at the very bottom reads: "Context stays clean. Technical standards still apply."

Simple. Elegant. Actually works.

.

.

.

👉 The Real Lesson

The difference between mediocre AI output and genuinely great output often comes down to one thing:

Did you let the AI assume, or did you make it ask?

When you hand Claude a prompt and let it run, it fills gaps with assumptions. Sometimes those assumptions are good. Often? They’re not. And you won’t know until you’re three hours into building the wrong thing.

When you force Claude to interview you first—to surface decisions, explore edge cases, and validate understanding—you get output that reflects your vision. Not Claude’s best guess.

21 questions took about 5 minutes to answer.

Those 5 minutes saved me from 313 lines of premature decisions and gave me requirements I can actually build against.

That’s a pretty good trade.

Your turn:

Next time you start a project, don’t ask Claude for a PRD.

Ask it to interview you first.

Then watch what happens.

12 min read The Art of Vibe Coding, Claude

How to Build Self-Evolving Claude Code Rules (So You Stop Fixing the Same Mistakes)

Last week, I watched Claude make the exact same mistake I’d corrected three days earlier.

Same project. Same codebase. Same error.

I’d spent fifteen minutes explaining why we use prepared statements for database queries—not string concatenation. Claude understood. Claude apologized. Claude fixed it beautifully.

And then, in a fresh session, Claude did it again. Like our conversation never happened.

Here’s the thing: it wasn’t Claude’s fault.

(Stay with me.)

The correction I’d made? It lived and died in that single session. I never added it to my Claude Code rules. Never updated my project guidelines. Never captured what we’d learned together.

So Claude forgot. Because Claude had to forget.

And honestly? I’ve done this more times than I’d like to admit.

.

.

.

The Uncomfortable Truth About Your Claude Code Rules

You’ve probably got project rules somewhere.

Maybe in a CLAUDE.md file. Maybe in a markdown doc you include at the start of sessions. Maybe scrawled on a Post-it note stuck to your monitor.

(No judgment.)

These rules matter.

They’re the guardrails that keep Claude from hallucinating, making mistakes, or generating code that looks like it was written by someone who’s never seen your codebase before.

But here’s what nobody talks about: most Claude Code rules are frozen in time.

You wrote them once—probably when you were optimistic and caffeinated and full of good intentions. Maybe you updated them once or twice when something broke spectacularly. And then… they fossilized.

Meanwhile, you’re out there learning. Every session teaches you something. Better patterns. Sneaky edge cases. Production bugs that made you question your life choices at 2am.

But none of that learning makes it back into your rules.

Your rules stay stuck at whatever understanding you had on Day One. A Level 5 Charmander trying to fight Level 50 battles.

(More on Pokémon in a minute. I promise this metaphor is going somewhere.)

.

.

.

The Three Problems That Keep Your Rules Stuck

Let me break down why this happens—because understanding the problem is half the battle.

Problem #1: The Inclusion Tax

You have to remember to add your rules file at the start of every session. Miss it once—maybe you’re rushing, maybe you’re excited about a feature, maybe you just forgot—and suddenly you’re debugging code that violates your own standards.

It’s like having a gym membership you forget to use. The potential is there. The execution… less so.

Problem #2: Context Decay

Even when you do include your rules, long sessions dilute them. By message #50, your carefully crafted “always use prepared statements” guideline has degraded into… whatever Claude feels like doing.

The rules are still technically in the context window. They’re just competing with 47 other messages for Claude’s attention. And losing.

Here’s what that looks like:

CONTEXT DECAY OVER TIME" on a light background, illustrating how the influence of rules diminishes in communication as more context is added. Four horizontal progress bars are stacked vertically. The top bar, "Message #1: 🧠 Your rules (100%) ✔️", is entirely dark navy blue. The second bar, "Message #10: 👀 Rules + conversation 💬", is mostly dark navy blue with a smaller gray segment on the right. The third bar, "Message #25: ⌨️ Rules getting buried ⬇️", has a smaller dark navy blue segment and a larger gray segment. The bottom bar, "Message #50: 🦭 Rules? What rules? 🔍", has a very small dark navy blue segment on the left and a large gray segment. A legend below indicates that the dark navy blue squares represent "Rule influence" and the gray squares represent "Other context". At the very bottom, a rounded orange callout box with a warning icon states, "Key Takeaway: Rules are forgotten as context fills up!

Problem #3: The Maintenance Black Hole

Rules should evolve. You know this. I know this. We all know this.

But who actually updates their rules file regularly?

(I’m raising my hand here too. We’re in this together.)

.

.

.

The CLAUDE.md Trap

Here’s what most developers do—and I get why it seems logical:

They cram everything into CLAUDE.md.

Security rules. Database patterns. API conventions. Coding standards. Error handling preferences. That one weird edge case from six months ago. All of it, stuffed into one giant file that gets loaded at the start of every session.

The thinking makes sense: “Claude will always have my rules!”

The reality?

A 2,000-line CLAUDE.md file burns through your token limits before you even start working.

You’re paying the context tax on every single message—whether you need those rules or not. Working on a simple UI tweak? Still loading all your database migration patterns. Fixing a typo? Still burning tokens on your entire security playbook.

TOKEN CONSUMPTION: BEFORE vs AFTER". The top section, "THE CLAUDE.md TRAP (Before) ❌", shows a large, full dark bar labeled "2,000 lines = ~4k tokens". Below it are labels for code modules: [security][database][api][hooks][i18n][testing][deploy][...]. Text states "Every message loads EVERYTHING" and "Simple UI task? Still paying for ALL of it. ⚠️". The bottom section, "THE INDEXED SKILL (After) ✅", shows a small dark bar for "Index/descriptions = ~500 tokens (always loaded)". Below it, a separate, segmented gray bar represents "+ security.md = ~800 tokens (only if needed)". Text states "Load index first, references only when needed" and "Simple UI task? Pay only for the index. ✅". A legend indicates that dark bars mean "Tokens consumed" and gray bars mean "Loaded on-demand". A final callout box with a lightbulb icon states, "Key Takeaway: Indexing significantly reduces token costs by loading only what's necessary!

It’s like packing your entire wardrobe for a weekend trip. Sure, you’ll have options. But you’ll also be exhausted before you get anywhere.

.

.

.

What If Your Rules Could Level Up?

Okay, here’s where the Pokémon thing comes in. (Told you I’d get there.)

Think about how evolution works in Pokémon. A Charmander doesn’t stay a Charmander forever. It battles. It gains experience. It evolves into Charmeleon, then Charizard. Each evolution makes it stronger, better suited for tougher challenges.

What if your Claude Code rules could work the same way?

Every correction you make.

Every “actually, do it this way instead” moment. Every hard-won insight from debugging at 2am. What if all of that could strengthen your rules automatically?

Not stuffed into a bloated CLAUDE.md. Not forgotten when sessions end. Actually captured and integrated into a system that gets smarter over time.

This is possible now. And it’s not even that complicated.

Enter Agent Skills (And Why They Change Everything)

If you haven’t explored Agent Skills yet, here’s the short version: Skills let Claude activate knowledge only when it needs it.

Instead of loading everything upfront—all 2,000 lines of your rules, whether relevant or not—Claude starts by reading just the skill descriptions. A few lines each. When a task triggers a specific skill, then it reads the full details.

Working on database queries? Claude loads the database skill. Building an API endpoint? It loads the API patterns. Simple UI change? It loads… just what it needs for that.

The token savings are significant. Instead of paying for your entire rulebook on every message, you pay for maybe 50 lines of descriptions, plus whatever specific reference you actually need.

But here’s where it gets interesting for our “evolving rules” problem…

The Card Catalog Architecture

Here’s the approach that solves all three problems we talked about earlier:

Structure your skill like a card catalog, not a library.

Your SKILL.md file becomes an index—brief descriptions pointing to reference files. The actual rules live in a references/ folder:

CARD CATALOG vs LIBRARY: SKILL STRUCTURE" compares two approaches to organizing information. The top section, labeled "❌ THE LIBRARY (Everything in one file)", shows a large file icon and a messy pile of folders. A text box below it is titled "SKILL.md (2,000+ lines)" and lists "All database rules here", "All security rules here", "All API rules here", "All hook patterns here", and "Everything else here too..." within a single structure. A warning triangle icon is present. The bottom section, labeled "✅ THE CARD CATALOG (Index + References)", shows a neat index card icon, a folder icon, and several smaller, organized file icons. A text box below it is titled "SKILL.md (~80 lines - INDEX ONLY)" and lists pointers: "Database rules → see references/", "Security rules → see references/", and "API rules → see references/". Below this is a folder named references/ containing individual files: database.md (121 lines), security.md (104 lines), api.md (98 lines), and hooks.md (132 lines). A note with an arrow points to these files, stating "← Load only when needed ↓

Instead of cramming everything into SKILL.md like this:

## Database Schema Rules
Always use snake_case for table names...
[50 more lines of database rules]

## Firebase Security Rules  
Auth patterns must follow...
[40 more lines of Firebase rules]

Your SKILL.md becomes a simple directory:

## Database Schema Rules
See: references/database.md
Guidelines for table naming, migrations, and schema patterns.

## Firebase Security Rules
See: references/security.md  
Authentication patterns and Firestore rules structure.

Why does this matter for evolution?

When you capture new insights, they go into the specific reference file—not bloating the main index. Your skill grows by expanding its reference library, not by inflating one massive file.

And when you pair this structure with the build-insights-logger skill? Your rules start updating themselves based on real learnings.

Your Charmander starts evolving.

.

.

.

Building Your Self-Evolving Skill: The Complete Walkthrough

Alright, let’s get practical. Here’s exactly how to set this up—step by step, with real screenshots from when I did this myself.

Step 1: Convert Your Existing Rules to an Indexed Skill

If you already have Claude Code rules somewhere (in CLAUDE.md, a rules file, or scattered notes), this is your starting point.

Here’s the prompt I used:

Convert the following project rules at @notes/rules.md into a live documentation skill using the "skill-creator" skill.

## Requirements

### 1. Skill Structure

Create a skill folder with this structure:

```
.claude/skills/[skill-name]/
    ├── SKILL.md           # Index file (card catalog, NOT the full library)
    ├── references/        # Detailed rule files
    │   ├── [category-1].md
    │   ├── [category-2].md
    │   └── ...
    └── [README.md](http://README.md)          # Optional: skill usage guide
```

### 2. SKILL.md Design (The Index)

The SKILL.md should act as a **card catalog**, not contain the full rules. 

Example:

```
[...content of SKILL.md...]

## Quick Reference

Brief overview of what this skill covers (2-3 sentences max).

## Rule Categories

### [Category 1 Name]

Brief description (1 line). See: `references/[category-1].md`

### [Category 2 Name]

Brief description (1 line). See: `references/[category-2].md`

[Continue for all categories...]

## When to Load References

- Load `references/[category-1].md` when: [specific trigger]
- Load `references/[category-2].md` when: [specific trigger]
```

### 3. Reference File Design

Each reference file in `references/` should:
- Focus on ONE category/domain of rules
- Include code examples where helpful
- Be self-contained (can be understood without reading other files)
- End with a "Quick Checklist" for that category

### 4. Evolvability

Structure the skill so new learnings can be easily added:
- Each reference file should have a `## Lessons Learned` section at the end (initially empty)
- The SKILL.md index should be easy to extend with new categories
- Use consistent formatting so automated updates are possible

## Notes

- Prioritize token efficiency: Claude should only load what it needs
- Keep SKILL.md under 100 lines if possible
- Each reference file should be focused (ideally under 200 lines)
- Use the indexed structure so the build-insights-logger can update specific reference files later
Screenshot of the prompt used to create the skill, showing requirements for skill structure with SKILL.md as index, references folder for detailed rules, and design requirements for evolvability

Two prerequisites before you run this:

  • Install the “skill-creator” skill first
  • Turn on Plan Mode (Shift+Tab)

Claude initiates the skill-creator and starts working:

Claude Code terminal showing the initiation of skill-creator skill with "Forging..." status indicating it's processing the request

It explores your codebase for existing patterns to follow. (I love watching this part—it’s like Claude doing research before diving in.)

Claude Code exploring existing skills patterns in the codebase, showing 6 tool uses and 21.1k tokens consumed during exploration

In my case, Claude asked clarifying questions before finalizing the plan. This is Plan Mode doing its job—thinking before coding:

Claude Code asking clarifying questions about skill naming, presenting options like "wordpress-plugin-rules", "wp-plugin-standards", and "wordpress-dev" with navigation instructions

After answering, Claude proposed a complete plan:

Claude Code displaying the generated plan for converting WordPress Plugin Rules to Live Documentation Skill, showing the proposed file structure with SKILL.md and 15 reference files organized by topic

The plan includes the SKILL.md design—notice how it acts as an index, not a container for all the rules:

Detailed view of SKILL.md design showing the YAML frontmatter with name and description, body structure with Quick Reference and Rule Categories sections, and a Reference File Template with Quick Checklist and Lessons Learned sections

I agreed to proceed with auto-accept edits. And here’s what Claude created:

Summary of the generated WordPress Plugin Rules skill showing the final structure: SKILL.md (83 lines) acting as index/card catalog, and 15 reference files in the references folder ranging from 95 to 166 lines each, covering topics like code-structure, security, database, performance, and deployment

The result:

  • SKILL.md: 83 lines (the index/card catalog)
  • 15 reference files, each under 200 lines
  • Every reference file includes code examples, a Quick Checklist, and an empty Lessons Learned section

Those empty Lessons Learned sections? They’re intentional. That’s where the evolution happens.

👉 Don’t have existing rules to convert? You can ask Claude to analyze your codebase and extract patterns into a skill. Or check out my previous post on how to compile your own project rules first.

Step 2: Install the Build-Insights-Logger

This is the skill that captures learnings during your sessions and routes them to the right place.

/plugin marketplace add nathanonn/claude-skill-build-insights-logger

GitHub repo: https://github.com/nathanonn/claude-skill-build-insights-logger

(Yes, I built this. Yes, I’m biased. But it solves a real problem.)

Step 3: Work Like You Normally Would

Here’s the beautiful part: you don’t need to change how you work.

With your skill installed and the insights logger ready, just… build. Code. Debug. Do your thing.

I’ll show you what this looks like. I asked Claude to audit my WordPress plugin for security vulnerabilities:

Security audit results showing a table of security strengths (SQL Injection protection, CSRF Protection, Authorization, Input Sanitization, Token Security, Session Protection, Rate Limiting) and three medium-risk concerns: IP Spoofing via X-Forwarded-For, Token Exposure in Debug Logs, and No User Status Re-validation

Claude found several issues, fixed them, and documented the changes. Standard stuff.

But here’s where it gets good.

After the implementation, I triggered the insights logger:

Please jot down what you have learned so far using the "build-insights-logger" skill.
Terminal showing the prompt to jot down learnings using build-insights-logger skill, with "accept edits on" mode enabled

Claude activated the skill:

Claude Code initiating the build-insights-logger skill, showing the skill permission prompt with description explaining it automatically logs meaningful insights, discoveries, and decisions during coding sessions

And logged 6 insights from the session:

Table showing 6 logged insights from the security audit session: IP Spoofing via X-Forwarded-For Headers (Security), Token Exposure in Debug Logs (Security), Consolidating Duplicate IP Detection Code (Architecture), CIDR Notation Support for IP Ranges (Patterns), False Positive in Security Audit (Edge Cases), and WordPress Settings API Auto-Rendering (Patterns). Session file created at .claude/insights/session-2026-01-05-143600.md

Six insights. Automatically categorized. Saved to .claude/insights/session-2026-01-05-143600.md.

No manual documentation. No “I should write this down” that never happens. Just… captured.

Step 4: Review and Integrate (The Curation Step)

You can review immediately after one session, or batch multiple sessions together. I usually wait until I have a few sessions worth of insights—but that’s personal preference.

Here’s how to review:

Please use the "build-insights-logger" skill to review the insights logged so far.
Terminal showing the prompt to review insights using the build-insights-logger skill

Claude reads all session files and presents a summary organized by category:

Detailed review of 6 insights organized by category. Security section shows IP Spoofing via X-Forwarded-For Headers and Token Exposure in Debug Logs. Architecture section shows Consolidating Duplicate IP Detection Code. Patterns section shows CIDR Notation Support for IP Ranges and WordPress Settings API Auto-Rendering. Edge Cases section shows False Positive in Security Audit. Each insight includes relevant file paths and explanations. Prompt asks which insights to add to CLAUDE.md

Now here’s the critical part: don’t add everything.

This is where human judgment matters. Review each insight and ask: “Will this apply to future projects, or is it specific to this one-off feature?”

Some insights are gold. Some are situational. You’re the curator here.

I selected insights 1, 2, 5, and 6—the ones that generalize across WordPress projects:

User response selecting insights "1, 2, 5, 6" with instructions to update the wordpress-plugin-rules skill instead of CLAUDE.md, keeping insights generic for other WordPress plugins, and emphasizing not to bloat SKILL.md—insights should go to relevant reference files

Important detail: Notice my instruction. By default, the build-insights-logger updates CLAUDE.md. I explicitly redirected it to update the skill instead, with a reminder to keep SKILL.md clean—insights should go to the relevant reference files, not the index.

Claude reads the relevant reference files and adds the insights where they belong:

Claude Code reading multiple files (security.md at 105 lines, hooks-ajax.md at 133 lines, SKILL.md at 84 lines, plugin-lifecycle.md at 156 lines) and then updating security.md with new lessons learned section about IP Address Spoofing via X-Forwarded-For, showing the diff with problem statement and solution

The result:

Completion message showing 4 insights added to the wordpress-plugin-rules skill. IP Spoofing via X-Forwarded-For, Token Exposure in Debug Logs, and Verify Security Concerns by Reading Code Flow were added to references/security.md. Settings API Auto-Renders Registered Fields was added to references/plugin-lifecycle.md. Session file archived to .claude/insights/archive/

4 insights added to the skill:

  • 3 security insights → references/security.md
  • 1 lifecycle insight → references/plugin-lifecycle.md

The session file gets archived. And your skill is now smarter than it was an hour ago.

.

.

.

What You Actually Built Here

Let’s step back for a second.

Four steps. That’s all it took:

  1. Convert rules to an indexed skill
  2. Install the insights logger
  3. Build like normal
  4. Review and integrate learnings

But what actually changed?

An infographic flowchart titled "THE EVOLUTION CYCLE" illustrates a continuous five-step process. The first step at the top is a box labeled "1. BUILD (normal workflow) 🔨" with a hammer icon. An arrow points down to "2. LEARN (insights emerge) 💡" with a lightbulb icon. Another arrow points right to "3. CAPTURE (insights logger) 📝" with a notepad icon. A downward arrow leads to "4. REVIEW & CURATE (you pick) 👀" with an eye icon. An arrow points left to "5. SKILL EVOLVES (smarter) 🚀" with a rocket icon. From this fifth step, an arrow points down to a final box that reads "Next session starts with better rules 🔄" with a recycle icon. A long arrow loops from this final box back to the first "1. BUILD" step, completing the cycle.

You’re no longer maintaining documentation. You’re growing a knowledge base.

Every correction you make—every “actually, do it this way instead” moment, every insight from debugging at 2am—the system captures it. You review it. The good stuff evolves your skill. Your next session starts with rules that reflect what you actually learned, not what you thought you knew when you started.

The gap between your experience and your documentation? It closes.

That mistake I mentioned at the beginning—Claude repeating an error I’d already corrected? It doesn’t happen anymore. Because the correction made it into my Claude Code rules. Automatically. As part of my normal workflow.

Your Charmander evolved into Charizard.

And it keeps evolving.

.

.

.

Your Turn

If you’ve been cramming rules into CLAUDE.md—or worse, keeping them in your head and hoping for the best—try this process on your next project.

Start with whatever rules you have. Even messy ones. (Especially messy ones, honestly.)

Convert them to an indexed skill. Install the insights logger. Build for a few sessions. Then review your insights folder.

You’ll be surprised at what Claude captured. And you’ll be amazed at how much smarter your rules become when they’re allowed to learn alongside you.

What project are you going to evolve first?

Go build it.

Now.

12 min read The Art of Vibe Coding, Claude, Vibe Coding

Stop Arguing With Your AI. Start Showing It What You See.

Imagine trying to teach someone to cook over the phone.

You’re walking them through your grandmother’s pasta recipe—the one with the garlic that needs to be just golden, not brown. You describe every step perfectly. The timing. The technique. The little flip of the wrist when you toss the noodles.

And then they say: “It’s burning. What do I do?”

Here’s the thing: you can’t help them. Not really. Because you can’t see the pan. You can’t see how high the flame is. You can’t see that they accidentally grabbed the chili flakes instead of oregano. All you have is their panicked description and your best guess about what might be going wrong.

This, my friend, is exactly what happens when you ask Claude Code to fix a bug.

(Stay with me here.)

.

.

.

The Merry-Go-Round Nobody Enjoys

You’ve been on this ride before. I know you have.

You describe the bug to Claude. Carefully. Thoroughly. You even add screenshots and error messages because you’re a good communicator, dammit.

Claude proposes a fix.

You try it.

It doesn’t work.

So you describe the bug again—this time with more adjectives and maybe a few capitalized words for emphasis. Claude proposes a slightly different fix. Still broken. You rephrase. Claude tries another angle. Round and round we go.

This is the debugging merry-go-round, and nobody buys tickets to this ride on purpose.

The instinct—the very human instinct—is to blame the AI.

  • “Claude isn’t smart enough for this.”
  • “Maybe I need a different model.”
  • “Why can’t it just SEE what’s happening?”

That last one?

That’s actually the right question.

Just not in the way you think.

Here’s what I’ve learned after spending more time than I’d like to admit arguing with AI about bugs: Claude almost never fails because it lacks intelligence. It fails because it lacks visibility.

Think about what you have access to when you’re debugging. Browser dev tools. Console logs scrolling in real-time. Network requests you can inspect. Elements that highlight when you hover. The actual, living, breathing behavior playing out on your screen.

What does Claude have?

The code. Just the code.

That’s it.

An infographic titled "THE VISIBILITY GAP" compares the debugging experience of a human developer ("WHAT YOU SEE" with an eyes emoji) to that of an AI model ("WHAT CLAUDE SEES" with a brain emoji). The left column, for the developer, has a list of six items with green checkmarks: "Browser dev tools", "Console logs in real-time", "Network requests", "Elements highlighting", "Actual behavior on screen", and "The sequence of events". The right column, for Claude, shows a red 'X' and the phrase "Just the code" for every single one of these six points. A thick navy line separates the two columns. Below this comparison, a horizontal bar separates a final summary section with two pill-shaped callout boxes. The left green box says "YOU: Full visibility" with a magnifying glass icon, and the right red-accented box says "CLAUDE: Reading with a blindfold" with a blindfold icon. The background is a light off-white, and the overall style is clean and minimalist.

You’re asking a brilliant chef to fix your burning pasta—but they can only read the recipe card. They can’t see the flame. They can’t smell the smoke. They’re working with incomplete information and filling in the gaps with educated guesses.

Sometimes those guesses are right. (Claude is genuinely brilliant at guessing.)

Most of the time? Merry-go-round.

.

.

.

The Two Bugs That Break AI Every Time

After countless Claude Code debugging sessions—some triumphant, many humbling—I’ve noticed two categories that consistently send AI spinning:

The Invisible State Bugs

React’s useEffect dependencies.

Race conditions. Stale closures. Data that shapeshifts mid-lifecycle like some kind of JavaScript werewolf. These bugs are invisible in the code itself. You can stare at the component for hours (ask me how I know) and see nothing wrong. The bug only reveals itself at runtime—in the sequence of events, the timing of updates, the order of renders.

It’s happening in dimensions Claude can’t perceive.

The “Wrong Address” Bugs

CSS being overridden by inline JavaScript. WordPress functions receiving unexpected null values from somewhere upstream. Error messages that point to line 7374 of a core file—not your code, but code three function calls removed from the actual problem.

The error exists.

But the source? Hidden in cascading calls, plugin interactions, systems talking to systems.

Claude can’t solve either category by reading code alone.

So what do we do?

We give Claude eyes.

(I told you to stay with me. Here’s where it gets good.)

.

.

.

Method 1: Turn Invisible Data Into Evidence Claude Can Actually See

Let me walk you through a real example.

Because theory is nice, but showing you what this looks like in practice? That’s the good stuff.

I had a Products Browser component. Simple filtering and search functionality—the kind of thing you build in an afternoon and then spend three days debugging because life is like that sometimes.

Each control worked beautifully in isolation:

Products Browser interface showing a search for "apple" returning 3 matching results: Apple fruit priced at $1.99, Apple Airpods at $129.99, and Apple MacBook Pro at $1999.99. The status shows "Ready - products: 100 · view: 3"

Search for “apple” → Three results. Beautiful.

Products Browser interface with category filter set to "laptops" displaying 5 laptop products including MacBook Pro, Asus Zenbook, Huawei Matebook X Pro, Lenovo Yoga 920, and Dell XPS 13. Status shows "Ready - products: 100 · view: 5"

Filter by “laptops” → Five results. Chef’s kiss.

But combine them?

Products Browser showing broken behavior when combining search term "apple" with category filter "laptops". Results incorrectly display Apple fruit and Apple Airpods alongside MacBook Pro, ignoring the laptops-only filter

Search “apple” + category “laptops” → Broken. The filter gets completely ignored, like I never selected it at all.

Classic React hook dependency bug.

If you’re experienced with React, you spot this pattern in your sleep. But if you’re newer to the framework—or if you vibe-coded this component and touched a dozen files before realizing something broke—you’re stuck waiting for Claude to get lucky.

I spent three rounds asking Claude to fix it. Each fix addressed a different theoretical cause. None worked.

That’s when I stopped arguing and started instrumenting.

An infographic titled "METHOD 1: THE LOGGING WORKFLOW" shows a four-step flowchart with navy blue boxes and arrows on a light background. The first box, labeled "STEP 1", contains the text "Ask for logging (not fix)" with the caption below it: "Add logging" not "fix this". An arrow points right to the second box. The second box, labeled "STEP 2", contains the text "Run test + copy console" with the caption: You become the bridge. An arrow points right to the third box. The third box, labeled "STEP 3", contains the text "Feed logs back to Claude" with the caption: Evidence in, insight out. An arrow points right to the fourth and final box. The fourth box, labeled "RESULT", contains the text "Claude SEES the problem" with the caption: One-shot fix (finally!).

Step 1: Ask Claude to Add Logging (Not Fixes)

Instead of another “please fix this” prompt, I asked Claude to help me see what was happening:

Terminal command showing user request to Claude: "I can search products by keywords or filter them by category, but both don't work together at the same time. Add logging to track data changes."

Notice what I didn’t say: “Fix this bug.”

What I said: “Add logging to track data changes.”

This is the mindset shift that changes everything.

Claude added console.log statements to every useEffect that touched the view state:

Claude Code diff view showing 37 lines added to src/App.tsx, adding console.log statements to useEffect hooks that track triggers like 'products loaded', 'query changed', and 'filter changed' with their corresponding state values

Each log captured which effect triggered, what the current values were, and what got computed. Basically, Claude created a running transcript of everything happening inside my component’s brain.

Step 2: Run the Test and Capture What You See

I opened the browser, selected “laptops” from the category filter, then typed “apple” in the search box.

Split screen showing Products Browser on the left with search "apple" and category "laptops" selected, and Chrome DevTools console on the right displaying multiple useEffect log entries showing the filter and search triggers firing

The console lit up like a Christmas tree of evidence.

Step 3: Feed the Logs Back to Claude

Here’s where the magic happens. I copied that console output—all of it—and pasted it directly into Claude:

Terminal showing user pasting console logs to Claude, displaying useEffect:filters and useEffect:search log entries that reveal each search keystroke triggers a reset of category, minRating, maxPrice, and sort to DEFAULTS

And Claude? Claude saw everything:

Claude's analysis of the logs explaining the bug: the category filter was ignored because applySearchOnly resets category back to "all", and the search effect ran last so it "won" and overwrote the filter results. Proposes fix using single useMemo

Claude found the bug immediately.

The logs revealed the whole story: when I selected a category, useEffect:filters fired and correctly filtered the products. But then when I typed in the search box, useEffect:search fired—and it ran against the full product list, completely ignoring the category filter.

The search effect was overwriting the filter results.

Last effect wins. (JavaScript, you beautiful chaos gremlin.)

Claude proposed the fix: replace multiple competing useEffect hooks with a single useMemo that applies all transforms together:

const view = useMemo(() => {
  return transformProducts(products, {
    query,
    category,
    minRating,
    maxPrice,
    sortKey,
    sortDir,
  });
}, [products, query, category, minRating, maxPrice, sortKey, sortDir]);

One attempt. Bug fixed.

The difference between “Claude guessing for 20 minutes” and “Claude solving it instantly” was 30 seconds of logging.

That’s not hyperbole. That’s just… math.

.

.

.

Method 2: Map the Problem Before Anyone Tries to Solve It

The second method works for a different beast entirely—the kind of bug where even the error message is lying to you.

Here’s a WordPress error that haunted me for hours:

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string 
is deprecated in /var/www/html/wp-includes/functions.php on line 7374

Warning: Cannot modify header information - headers already sent by 
(output started at /var/www/html/wp-includes/functions.php:7374) 
in /var/www/html/wp-includes/option.php on line 1740

If you’ve done any WordPress development, you recognize this particular flavor of suffering.

The error points to core WordPress files—not your code. Something, somewhere, is passing null to a function that expects a string. But where? The error message is about as helpful as a fortune cookie that just says “bad things happened.”

I’d made changes to several theme files.

Any one of them could be the culprit.

And the cascading nature of WordPress hooks meant the error could originate three or four function calls before the actual crash.

After a few rounds of Claude trying random fixes (bless its heart), I tried something completely different.

The Brainstorming Prompt That Changes Everything

Terminal showing user pasting WordPress deprecation errors (strpos and str_replace warnings about null parameters) and requesting: "Let's brainstorm ways to fix this. Use ASCII diagrams."

Instead of “fix this,” I asked Claude to brainstorm debugging approaches—and to visualize them with ASCII diagrams.

(I know. ASCII diagrams. In 2025. But stay with me, because this is where Claude Code debugging gets genuinely interesting.)

Claude Maps the Error Chain

Claude started by analyzing the flow of the problem:

Claude's ASCII diagram titled "ERROR CHAIN" showing data flow from Theme Code through WordPress Core (functions.php lines 7374 and 2196) to PHP Engine, with null values being passed that trigger strpos() and str_replace() deprecated warnings

The diagram showed exactly what was happening: some theme code was passing null to WordPress core functions, which then passed that null to PHP string functions, which threw the deprecation warning.

But which theme code? Claude identified the suspect locations:

Claude's ASCII diagram titled "SUSPECT LOCATIONS" listing four possible sources of null values: filter callbacks returning null, options/meta returning null from get_option(), admin menu/page registration with null titles, and wp_safe_redirect with null URL

Four possible sources.

Each with code examples showing what the problematic pattern might look like.

This is Claude thinking out loud, visually. And it’s incredibly useful for Claude Code debugging because now we’re not guessing—we’re investigating.

Multiple Debugging Strategies (Not Just One)

Rather than jumping to a single fix and hoping, Claude laid out several approaches:

Claude's ASCII diagram showing "APPROACH OPTIONS" with four debugging strategies: A) Search for all filter callbacks, B) Find WordPress functions using strpos internally, C) Instrument error with debug_backtrace(), D) Search for common patterns
  • Option A: Search all filter callbacks for missing return statements.
  • Option B: Find which WordPress functions use strpos internally.
  • Option C: Add debug_backtrace() at the error point to trace the caller.
  • Option D: Search for common patterns like wp_redirect with variables.

Four different angles of attack.

This is what systematic debugging looks like—and it’s exactly what you need when you’re stuck in the merry-go-round.

Claude Does Its Homework

Here’s where Opus 4.5 surprised me.

Instead of settling on the first approach, it validated its theories by actually searching the codebase:

Claude Code executing multiple search commands: searching for wp_redirect, add_filter, get_option patterns, and reading specific files like AdminMenu.php and MembershipPlans.php

It searched for wp_redirect calls, add_filter patterns, get_option usages—systematically eliminating possibilities like a detective working through a suspect list.

Then it updated its diagnosis based on what it found:

Claude's updated ASCII diagram showing the probable call chain: Something returns null path, which goes to wp_normalize_path(), which then causes the strpos() error. Suspects listed: wp_enqueue with null source, file_exists on null path, filter returning null instead of path

The investigation narrowed.

The error was coming from path-handling functions—something was returning a null path where a string was expected.

The Summary That Actually Leads Somewhere

Claude concluded with a clear summary of everything we now knew:

Claude's Investigation Summary showing three identified errors receiving NULL values, the functions they're called during (script/style enqueueing, admin page rendering, template loading), and noting that the original fix was correct but there's a second source of null values

And multiple approaches to fix it, ranked by how surgical they’d be:

Claude's "Possible Approaches" diagram showing four options: A) Add debug backtrace to find exact source, B) Wrap all path-sensitive functions with null checks, C) Check FluentCart plugin for similar issues, D) Disable theme components one by one

Did it work?

First attempt. Approach A—adding a debug backtrace—immediately revealed a function in FluentCartBridge.php that was returning null when $screen->id was empty.

One additional null check.

Bug gone.

All those rounds of failed attempts? They were doomed from the start because Claude was guessing blindly. Once it could see the error chain visually—once it had a map instead of just a destination—the solution was obvious.

.

.

.

Why This Actually Works (The Part Where I Get a Little Philosophical)

Both of these methods work because they address the same fundamental gap in Claude Code debugging: AI doesn’t fail because it’s not smart enough. It fails because it can’t see what you see.

When you’re debugging, you have browser dev tools, console logs, network requests, and actual behavior unfolding on your screen. Claude has code files.

That’s it.

It’s working with incomplete information and filling the gaps with educated guesses.

Here’s the mindset shift that changed everything for me:

👉 Stop expecting AI to figure it out. Start helping AI see what you see.

You become the eyes. AI becomes the analytical brain that processes patterns and proposes solutions based on the evidence you feed it.

It’s a collaboration. A partnership. Not a vending machine where you insert a problem and expect a solution to drop out.

A flowchart infographic titled "WHICH METHOD SHOULD YOU USE?". Below the title, a question asks "Bug won't die?". An arrow points down to a central box labeled "What kind of bug is it?". From this box, two arrows branch out.

The left branch leads to a box titled "STATE/TIMING" with bullet points: "• 🧠 React hooks", "• ⏱️ Race conditions", "• 🔄 Data flow", "• 🗄️ Stale closures". Below this box, an arrow points to a final orange-accented box labeled "✅ METHOD 1: ADD LOGGING". The description reads "Turn invisible data into visible evidence 👀" with a monospaced code snippet console.log().

The right branch leads to a box titled "CASCADING/WRONG ADDRESS" with bullet points: "• 📍 Error points to wrong file", "• 🔀 Multiple possible sources", "• 🔌 Plugin/system interactions". Below this box, an arrow points to a final orange-accented box labeled "✅ METHOD 2: ASCII BRAINSTORM". The description reads "Map before you solve 🧠" with monospaced code snippets diagram.txt and diagram.txt.

The overall aesthetic is clean with navy blue borders and text, orange accents for the result boxes, and a light gray background.

When to Use Logging

Add logs when the bug involves:

  • Data flow and state management
  • Timing issues and race conditions
  • Lifecycle problems in React, Vue, or similar frameworks
  • Anything where the sequence of events matters

The logs transform invisible runtime behavior into visible evidence.

React’s useEffect, state updates, and re-renders happen in milliseconds—too fast to trace mentally, but perfectly captured by console.log. Feed those logs to Claude, and suddenly it can see the movie instead of just reading the script.

When to Use ASCII Brainstorming

Use the brainstorming approach when:

  • Error messages point to the wrong location
  • The bug could originate from multiple places
  • You’ve already tried the obvious fixes (twice)
  • The problem involves cascading effects across systems

Asking Claude to brainstorm with diagrams forces it to slow down and map the problem systematically. It prevents the merry-go-round where AI keeps trying variations of the same failed approach. By exploring multiple angles first, you often find the root cause on the very first real attempt.

.

.

.

The Line Worth Tattooing Somewhere (Metaphorically)

Here’s what I want you to take away from all of this:

Don’t argue with AI about what it can’t see. Show it.

The next time Claude can’t solve a bug after a few rounds, resist the urge to rephrase your complaint. Don’t add more adjectives. Don’t type in all caps. (I know. I KNOW. But still.)

Instead, ask yourself: “What am I seeing that Claude isn’t?”

Then find a way to bridge that gap—through logs, through diagrams, through screenshots, through any method that gives AI the visibility it needs to actually help you.

.

.

.

Your Next Steps (The Warm and Actionable Version)

For state and timing bugs:

  1. Pause. Take a breath. Step off the merry-go-round.
  2. Ask Claude to add logging that tracks the data flow.
  3. Run your test, copy the console output, paste it back to Claude.
  4. Watch Claude solve in one shot what it couldn’t guess in twenty.

For complex, cascading bugs:

  1. Paste the error message (yes, the whole confusing thing).
  2. Add: “Let’s brainstorm ways to debug this. Use ASCII diagrams.”
  3. Let Claude map the problem before it tries to solve it.
  4. Pick the most surgical approach from the options it generates.

That bug that’s been driving you up the wall? The one Claude keeps missing?

Give it eyes.

Then watch it solve what seemed impossible.

You’ve got this. And now Claude does too.

11 min read The Art of Vibe Coding, ChatGPT, Claude, Vibe Coding

The 4 Golden Rules of Vibe Coding (A Year-End Manifesto)

You remember early 2025, right?

I was bouncing between ChatGPT Pro, Claude web, and Cursor like a pinball with a deadline. Copy from o1 pro. Paste into my editor. Fix the bug it introduced. Pray it works. Try Cursor for a second opinion. Watch it rewrite my entire file when I asked for one measly line.

Rinse. Repeat. Question your life choices.

(We’ve all been there. And if you say you haven’t, well, I’m not sure I believe you.)

Then May hit. Anthropic added Claude Code to their Max plan—same $200/month I was already burning on ChatGPT Pro, but now I could stop copy-pasting and start orchestrating.

That shift changed everything.

Here’s the thing: I wrote 30+ articles this year documenting every breakthrough, every spectacular failure, every “wait, that’s how it’s supposed to work?” moment. If you only read one piece from me in 2025—make it this one.

What follows are the 4 immutable laws of Vibe Coding I discovered this year. They turned chaotic AI sessions into systematic, predictable wins. Once you see them, you can’t unsee them.

Ready? Let’s go.

.

.

.

Rule #1: The Blueprint Is More Important Than The Code

Let me tell you about the single biggest mistake I see developers make.

They type “build me a task management app” and hit Enter. Claude generates code. Components. Database schemas. Authentication logic.

And then… it’s nothing like what they imagined.

They blame the AI. “It hallucinated again.”

But here’s what I’ve learned after shipping dozens of projects with Claude Code: hallucinations are usually just ambiguity in your prompt. That’s it. That’s the secret nobody wants to admit.

AI is a terrible architect. Give it vague instructions, and it fills in the blanks with whatever patterns it’s seen most often. (Which, spoiler alert, aren’t YOUR patterns.)

But AI is an amazing contractor.

Give it clear blueprints—specific requirements, explicit constraints, visual references—and it executes with surgical precision. Like a really talented carpenter who just needs you to stop saying “make it nice” and start handing over actual measurements.

Infographic titled "THE BLUEPRINT SPECTRUM" comparing two approaches to using AI for software development. The left side, under the heading "VAGUE PROMPT," shows the input "Build me a task app" leading to a box labeled "AI GUESSES" with a brain emoji. This results in a red box with cross marks (❌) listing failures: "Wrong auth," "Wrong UI," "Wrong schema," and "3 rewrites." Below this, an orange pill-shaped box indicates a "Success Rate: ~30%" with a warning emoji (⚠️). The right side, under the heading "DETAILED BLUEPRINT," shows the input "PRD + ASCII Wireframes + User Stories + Constraints" leading to a box labeled "AI EXECUTES" with a robot arm emoji. This results in a green box with checkmarks (✅) listing successes: "Exact auth," "Exact UI," "Exact schema," and "First try." Below this, a blue pill-shaped box indicates a "Success Rate: 97%" with an upward trend arrow emoji (📈). A vertical blue line separates the two comparison sections.

The technique: Interview yourself first

Instead of asking Claude to “build me an app,” I use a brainstorming prompt (inspired by McKay Wrigley and Sabrina Ramonov) that flips the entire script.

The AI interviews me.

  • “What’s the core problem this solves?”
  • “Who uses it?”
  • “What does the main screen look like?”
  • “What happens when the user clicks X?”

By the time I’ve answered those questions, I’ve got a Product Requirements Document. Not AI-generated slop—my vision, clarified.

Claude becomes the junior dev who asks great questions before writing a single line of code. I stay the architect who actually understands what we’re building.

(This is the way it should be.)

The secret weapon: ASCII wireframes

Text descriptions get misinterpreted. Every. Single. Time.

You say “a sidebar with navigation.” Claude hears “full-width hamburger menu.”

So I started including ASCII art wireframes in my prompts:

+------------------+---------------------------+
|   SIDEBAR        |      MAIN CONTENT         |
|  [Dashboard]     |                           |
|  [Projects]      |   +-------------------+   |
|  [Settings]      |   |   Project Card    |   |
|                  |   +-------------------+   |
|                  |   +-------------------+   |
|                  |   |   Project Card    |   |
+------------------+---------------------------+

Sounds primitive, right? Almost embarrassingly low-tech.

The results say otherwise.

When I started including visual plans, my first-try success rate hit 97%. Claude understood layout and hierarchy immediately. No more “that’s not what I meant” rewrites. No more three rounds of “closer, but still wrong.”

👉 The takeaway: Stop typing code and start drawing maps. The blueprint is where the real work happens.

Want the full workflow?

.

.

.

Rule #2: Separate The “Thinker” From The “Builder”

At the beginning, I was using Claude Code for everything.

Planning. Building. Reviewing. Debugging.

One model to rule them all.

And it almost worked.

Almost.

But I kept running into the same problems. Claude would rewrite perfectly good code. Add complex abstractions I never asked for. Solve a simple bug by restructuring half my app.

I asked for email OTP login. I got a 12-file authentication framework.

I asked to fix a type error. Claude decided my entire architecture was wrong.

(It wasn’t. I promise you, it wasn’t.)

The discovery: Specialized roles

Then I stumbled onto a workflow that changed everything—and honestly, I felt a little silly for not seeing it sooner.

Use one model to think. Use another to build.

For me, that’s GPT-5/Codex (The Thinker) and Claude Code (The Builder).

Codex asks clarifying questions. It creates comprehensive plans. It reviews code like a senior engineer who’s seen every possible edge case and still remembers them all.

Claude Code executes. Fast. Reliably. It handles files, terminal commands, and edits without wandering off into philosophical debates about code architecture.

Together? Magic.

The review loop

The workflow looks like this:

  1. Plan (Codex): Describe what I want to build. Codex asks questions, creates a detailed implementation plan.
  2. Build (Claude Code): Feed the plan to Claude. Let it execute.
  3. Review (Codex): Paste the implementation back to Codex. It checks against the original plan, catches bugs, finds edge cases.
Infographic titled "THE THINKER-BUILDER LOOP" with a brain emoji and a robot arm emoji. The diagram shows a cyclical workflow between two AI models. It starts with a box labeled "GPT-5 / CODEX (Thinker)" pointing down to "STEP 1: Plan" ("Ask questions", "Create spec"), which leads to a box labeled "CLAUDE CODE (Builder)". Claude Code then points down to "STEP 2: Build" ("Execute the plan", "Files, commands"). A feedback loop points from Claude Code back up to GPT-5 with the text "Catches bugs single-model workflows miss." Another arrow from Claude Code points up to "STEP 3: Review" ("Does this match the plan?"), which then points back to the GPT-5 box, completing the loop. At the bottom, an orange banner summarizes "THE RESULT: Specialized models = Specialized results," with the comparison "7 hours of solo debugging ✅ → 27 minutes with the loop ⚡".

That third step—the review loop—catches issues that single-model workflows miss every time. EVERY time.

Taming the overengineering monster

Claude has a tendency to overcomplicate. It’s well-documented at this point. (If you’ve used it for more than a week, you know exactly what I’m talking about.)

My fix? The Surgical Coding Prompt.

Instead of “add this feature,” I tell Claude:

“Analyze the existing patterns in this codebase. Implement this change using the minimal number of edits. Do not refactor unless explicitly asked. Show me the surgical changes—nothing more.”

From 15 files to 3 files. From 1000+ lines to 120 lines.

Same functionality. 90% less complexity.

👉 The takeaway: Treat your AI models like a team, not a swiss-army knife. Specialized roles produce specialized results.

Ready to go deeper?

.

.

.

Rule #3: Don’t Just Prompt—Teach “Skills”

Here’s a question that haunted me for months:

“Why do I keep explaining the same patterns over and over?”

Every new project, I’d spell out my authentication approach. My database schema conventions. My error handling patterns. Every. Single. Time.

Claude would forget by the next session. Sometimes by the next prompt.

I was treating AI like a goldfish with a keyboard.

(No offense to goldfish. They’re trying their best.)

The “I know kung fu” moment

Then Claude launched Skills—and everything clicked.

Skills let you package your coding patterns into reusable modules. Instead of explaining “here’s how I do authentication” for the 47th time, you create an auth-skill. Enable it, and Claude instantly knows your entire implementation.

The exact patterns. The exact folder structure. The exact error messages.

Every project uses the same battle-tested approach. Zero drift. Zero “well, last time I used a different library.”

It’s like downloading knowledge directly into Claude’s brain.

Matrix-style. (Hence the name.)

Building your first skill

The process is stupidly simple:

  1. Take code that already works in production
  2. Document the patterns using GPT-5 (it’s better at documentation than execution)
  3. Transform that documentation into a Claude Skill using the skill-creator tool
  4. Deploy to any future project

The documentation step matters. GPT-5 creates clean, structured explanations of your existing implementations. Claude Skills uses those explanations to replicate them perfectly.

The compound learning effect

Here’s where it gets really interesting.

I built an Insights Logger skill that captures lessons while Claude “code”. Every architectural decision, every weird bug fix, every “oh that’s why it works that way” moment—automatically logged.

At the end of each session, I review those insights. The good ones get promoted to my CLAUDE.md file—the permanent knowledge base Claude reads at the start of every project.

Infographic titled "THE COMPOUND LEARNING PIPELINE". The top shows four columns labeled "SESSION 1", "SESSION 2", "SESSION 3", and "SESSION N". Each session has a downward arrow pointing to a box labeled "Insight Logger" with a brain emoji. Arrows from all four "Insight Logger" boxes converge and point downwards into a large central blue box titled "CLAUDE.md (Permanent Knowledge)". Inside this box, a bulleted list with emojis includes: "Auth patterns from Session 1 🔒", "Auth patterns from Session 2 💾", "Database quirks from Session 2 💻", "API fixes from Session 3 🔌", and "...compounding over time 📈". A final arrow points downwards from the "CLAUDE.md" box to a large orange callout box at the bottom with the title "EVERY NEW SESSION STARTS SMARTER". Text inside reads: "Claude reads CLAUDE.md → Already knows your patterns, quirks, and lessons 🚀". The flow illustrates how insights from multiple sessions are collected and stored to improve future interactions.

Each coding session builds on the last. Compound learning, automated.

👉 The takeaway: Prompting is temporary. Skills are permanent. If you’re explaining something twice, you’re doing it wrong.

For the complete Skills series,

.

.

.

Rule #4: Friction Is The Enemy (So Automate It Away)

Let me describe a scene you’ll recognize.

You’re deep in flow state. Claude Code is humming along. Building components, wiring up APIs, making real progress.

And then:

Allow Claude to run `npm install`? [y/n]

You press Enter.

Allow Claude to run `git status`? [y/n]

Enter.

Allow Claude to run `ls src/`? [y/n]

Enter. Enter. Enter. Enter. Enter.

By prompt #47, you’re not reading anymore. You’re a very tired seal at a circus act nobody asked for.

(Stay with me on this metaphor—it’s going somewhere.)

Anthropic calls this approval fatigue. Their testing showed developers hit it within the first hour of use.

And here’s the terrifying part: the safety mechanism designed to protect you actually makes you less safe. You start approving everything blindly. Including the stuff you should actually read.

Infographic contrasting two security models. The left side, titled "APPROVAL FATIGUE TIMELINE," shows a four-hour progression: Hour 1 (green bar): "Carefully reading prompts", quote "Hmm, let me check this...". Hour 2 (yellow bar): "Starting to skim", quote "Yeah yeah whatever". Hour 3 (orange bar): "Reflexively pressing Enter", quote "Enter", "Enter", "Enter". Hour 4 (red bar): "Approving ANYTHING blindly", quote "*doesn't even look*". A red box below shows the result: "RESULT: Malicious postinstall script steals SSH keys. You approved it without reading." with a red X icon. The right side, titled "SANDBOX PROTECTION MODEL," shows two columns: "YOUR SYSTEM (Blocked)" with system directories (~/.ssh/, ~/.aws/, ~/.bashrc) marked with a red X and connected to a box labeled "INVISIBLE TO CLAUDE (OS kernel enforced)". The second column, "YOUR PROJECT (Free)", lists project files (src/, components/, package.json) with green checkmarks indicating "Read/Write", connected to a box labeled "FULL AUTONOMY (Zero prompts)". A green box below shows the result: "RESULT: Prompt injection tries to read ~/.ssh/id_rsa. Kernel says NO. Claude literally cannot see it." with a green checkmark icon. A large "VS." separates the two main sections.

The sandbox solution

Claude Code’s sandbox flips the entire model.

Instead of asking permission for every tiny action, the sandbox draws clear boundaries upfront. Work freely inside them. Get blocked immediately outside them.

On Linux, it uses Bubblewrap—the same tech powering Flatpak. On macOS, it’s Seatbelt—the same tech restricting iOS apps.

These boundaries are OS-enforced. Prompt injection can’t bypass them.

Claude can only read/write inside your project directory. Your SSH keys, AWS credentials, shell config? Invisible. Network traffic routes through a proxy allowing only approved domains.

You run /sandbox, enable auto-allow mode, and suddenly every sandboxed command executes automatically. No prompts. No friction. No approval fatigue.

The 84% reduction in permission prompts? Nice. The kernel-level protection that actually works? Essential.

Parallel experimentation with Git Worktrees

Here’s another friction point that kills vibe coding: fear of breaking the main branch.

My fix: Git Worktrees with full isolation.

Standard worktrees share your database. They share your ports. Three AI agents working on three features leads to chaos. (Ask me how I know.)

I built a tool that gives each worktree its own universe. Own working directory. Own PostgreSQL database clone. Own port assignment. Own .env configuration. Now I run three experimental branches simultaneously. Let three Claude instances explore three different approaches. Pick the winner. Delete the losers.

No conflicts. No fear. No “let me save my work before trying this crazy idea.”

👉 The takeaway: Safe environments allow for dangerous speed. Eliminate friction, and experimentation becomes free.

Ready to set it up?

.

.

.

The Synthesis: What Separates Hobbyists From Shippers

These 4 rules are what separate “people who play with AI” from “people who ship software with AI.”

  • Rule #1: The blueprint is more important than the code.
  • Rule #2: Separate the thinker from the builder.
  • Rule #3: Don’t just prompt—teach skills.
  • Rule #4: Friction is the enemy.

Each rule builds on the last.

Clear blueprints feed into specialized models. Specialized models benefit from reusable skills. Reusable skills only matter if friction doesn’t kill your flow.

It’s a system. Not a collection of random tips.

Where to start

Don’t try to implement all four at once.

That’s a recipe for burnout.

  1. Start with Rule #4. Enable the sandbox. Regain your sanity. Stop being a tired circus seal.
  2. Then move to Rule #1. Before your next feature, write the PRD first. Interview yourself. Draw the ASCII wireframe.
  3. Rule #2 and Rule #3 come naturally after that. You’ll feel the pain of overengineering (and want specialized roles). You’ll get tired of repeating yourself (and want skills).

The system reveals itself when you need it.

Your challenge for 2026

Pick one project you’ve been putting off. Something that felt too complex for AI assistance.

  • Apply Rule #1: Write the blueprint first. ASCII wireframes and all.
  • Apply Rule #4: Set up the sandbox before you start.

Then let Claude execute.

Watch what happens when AI has clear boundaries and clear instructions. Watch how different it feels when you’re orchestrating instead of babysitting.

What will you build first?

Here’s to an even faster 2026.

Now go ship something.


This post synthesizes a year’s worth of vibe coding experimentation. Browse the full archive to dive deeper into any technique—from CLAUDE.md setup to sub-agent patterns to WordPress automation.

9 min read The Art of Vibe Coding, Claude

Claude Code Sandbox Explained: Stop Pressing Enter 50 Times a Day

Watch the video walkthrough, or read the full written guide below.

You’re deep in flow state.

Claude Code is humming along—building your Next.js app, spinning up components, mapping out API routes, sketching database schemas. It’s beautiful. It’s efficient. It’s everything you dreamed AI-assisted coding could be.

And then.

Allow Claude to run `npm install`? [y/n]

You press Enter.

Allow Claude to run `git status`? [y/n]

You press Enter.

Allow Claude to run `ls src/`? [y/n]

Enter. Enter. Enter. Enter. Enter.

By prompt #47, you’re not even reading anymore. You’re just… pressing Enter. Like a very tired seal at a circus act nobody asked for.

Here’s the thing: that permission system was designed to protect you. And instead? It’s training you to ignore it entirely.

Let’s fix that.

.

.

.

The Paradox Nobody Talks About

I want you to sit with this for a second—because it’s genuinely wild when you think about it.

Claude Code’s safety system was built with good intentions. Ask before every risky action. Sounds reasonable, right? Sounds responsible.

But here’s what actually happens in the wild:

A horizontal infographic titled "APPROVAL FATIGUE TIMELINE" in blue. It illustrates a four-hour process.

Hour 1: A blue progress bar is completely full. A magnifying glass with an eye icon is next to the text "Carefully reading prompts."

Hour 2: A green progress bar is about 60% full. A face with a bored, neutral expression icon is next to the text "Starting to skim."

Hour 3: An orange progress bar is about 30% full. A hand pressing a keyboard Enter key icon is next to the text "Reflexively pressing Enter."

Hour 4: A red progress bar is completely empty. A person with a blindfold icon is next to the text "Approving anything blindly."

Below the four hours, a wide red banner with a bold red "X" icon contains the white text: "Malicious postinstall script steals your SSH keys. You approved it."

The safety mechanism designed to protect you makes you less safe.

Anthropic’s own testing confirmed this. They call it “approval fatigue.” And their data showed developers hit it within the first hour of use.

(Within the first hour. Not after weeks of grinding. One. Hour.)

Sound familiar?

Yeah. I thought so.

.

.

.

The Fix: Boundaries, Not Babysitting

Here’s where Claude Code Sandbox comes in—and it flips the entire model on its head.

Instead of asking permission for every tiny thing (like an overly anxious intern double-checking if it’s okay to use the stapler), the sandbox draws clear boundaries upfront. Work freely inside them. Get blocked immediately outside them.

Think of it like giving Claude a room to work in—not the keys to the whole house.

Inside that room? Full autonomy. Zero prompts. Go nuts.

Outside that room? Blocked. Immediately. At the operating system level.

Two Invisible Walls

Here’s what the sandbox actually does:

A diagram illustrating a sandboxed environment for Claude. At the top, a section titled "YOUR SYSTEM (Restricted)" shows three red folders marked with a red 'X' and arrows pointing down: "~/.ssh/", "~/.aws/", and "~/.bashrc". These are blocked by a prominent orange barrier labeled "SANDBOX WALL" with padlock icons. Below the wall is a green section titled "YOUR PROJECT FOLDER (Sandboxed)" with arrows pointing up. It contains green folders and files marked with a green checkmark: "src/", "components/", "pages/", "package.json", "tsconfig.json", and "README.md". A green banner at the bottom reads "Claude works freely here" next to a small robot emoji. The diagram indicates that Claude can access the project folder but is prevented from accessing sensitive system files by the sandbox wall.

Wall 1: Filesystem Isolation

Claude can only read and write inside your project directory. Everything else—your SSH keys, AWS credentials, shell config—is invisible. Not just “blocked.” Invisible. Like it doesn’t exist. (Which, for Claude’s purposes, it doesn’t.)

Wall 2: Network Isolation

All network traffic routes through a proxy that only allows approved domains. npm install needs registry.npmjs.org? You approve it once. Some sketchy postinstall script tries to phone home to evil.com? Blocked. Immediately. No drama.

Why This Actually Works (And Why It’s Different)

Stay with me here—because this is the part that matters.

These aren’t application-level restrictions. They’re operating system enforced.

Infographic contrasting security enforcement layers: the "Application Layer" (shown as bypassable via prompt injection with a cracked shield) versus the "OS Kernel Layer" (shown as not bypassable using Linux Bubblewrap or macOS Seatbelt, with a padlock icon).

On Linux, Claude Code uses Bubblewrap—the same tech that powers Flatpak. On macOS, it’s Seatbelt—the same tech that restricts iOS apps.

This means even if a malicious prompt injection tricks Claude into trying to read your SSH keys… it physically cannot. The kernel blocks it. Full stop.

Prompt injection can’t bypass OS-level security.

That’s the whole point. That’s what makes this different from “please be good” security theater.

.

.

.

Quick Start: 5 Minutes to Actual Protection

Alright. Enough theory. Let’s get you set up.

Step 1: Enable Sandbox

In Claude Code, type:

/sandbox

Select Auto-allow mode.

This is the sweet spot: sandboxed commands run automatically, unsandboxed actions still prompt you. Best of both worlds.

Step 2: Create Your Config

Create ~/.claude/settings.json:

{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "excludedCommands": ["docker", "docker-compose"],
    "allowUnsandboxedCommands": true,
    "network": {
      "allowLocalBinding": true
    }
  },
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)"
    ]
  }
}

Step 3: Verify It’s Working

Run:

/permissions

You’ll see your active configuration.

Now test with a simple command:

> List files in the current directory

If it executes without prompting? Sandbox is working.

Infographic comparing "BEFORE (no sandbox)" where a user manually approves multiple npm commands with "Enter," versus "AFTER (with sandbox)" where the same npm commands run automatically and are marked with green checkmarks, completing without user intervention.

That’s it. OS-level protection with zero friction for normal work.

(I know, I know—it almost feels too easy. It’s not a trick. It just… works.)

.

.

.

Real-World Configurations You Can Steal

The basic setup handles most projects beautifully. But different stacks have different quirks.

Docker can’t run inside a sandbox. Dev servers need to bind ports. Private registries need network access. You know how it goes.

Here are three battle-tested configs. Find the one closest to your setup, copy-paste, adjust as needed.


Scenario 1: Web Development (Next.js, Vite, React)

The Problem: You run npm run dev inside sandbox and… nothing happens. On macOS, the sandbox blocks port binding by default. Your dev server can’t start. Cue frustration.

The Fix:

{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "excludedCommands": [],
    "network": {
      "allowLocalBinding": true
    }
  },
  "permissions": {
    "allow": [
      "Bash(npm:*)",
      "Bash(npx:*)",
      "Bash(node:*)",
      "WebFetch(domain:registry.npmjs.org)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)"
    ],
    "ask": [
      "Bash(npm publish:*)",
      "Bash(git push:*)"
    ]
  }
}

What this does: allowLocalBinding: true fixes the macOS dev server issue. npm/npx/node commands run automatically (sandboxed). Your .env files stay invisible to Claude. And it still asks before publishing to npm or pushing to git—because those are the “are you really sure?” moments.

Zero prompts for normal work. Full protection. Still asks before the dangerous stuff.


Scenario 2: WordPress with Docker and wp-env

WordPress development is trickier. Tools like wp-env and docker-compose fundamentally don’t work inside a sandbox—Docker needs to talk to the Docker daemon through a Unix socket, and the sandbox blocks socket access.

The Fix:

{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "excludedCommands": [
      "docker",
      "docker-compose",
      "wp-env"
    ],
    "network": {
      "allowLocalBinding": true
    }
  },
  "permissions": {
    "allow": [
      "Bash(php:*)",
      "Bash(composer:*)",
      "Bash(wp:*)",
      "WebFetch(domain:packagist.org)",
      "WebFetch(domain:wordpress.org)",
      "WebFetch(domain:api.wordpress.org)"
    ],
    "deny": [
      "Read(./.env)",
      "Read(./wp-config.php)",
      "Read(./wp-config-local.php)"
    ],
    "ask": [
      "Bash(docker:*)",
      "Bash(wp-env:*)"
    ]
  }
}

The trade-off: Docker runs unsandboxed. That’s less secure—I won’t pretend otherwise.

But here’s the thing: Docker commands still require your approval. And your actual code (PHP, composer, wp-cli) runs fully sandboxed. Claude never sees your wp-config.php with all those database credentials.

You’re protecting where it matters most.


Scenario 3: Maximum Paranoia Mode (Untrusted Code)

Reviewing a pull request from an unknown contributor? Auditing a dependency after a security advisory? This is when you want full lockdown.

The Config:

{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": false,
    "allowUnsandboxedCommands": false,
    "excludedCommands": [],
    "network": {
      "allowLocalBinding": false
    }
  },
  "permissions": {
    "allow": [],
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)",
      "Bash(curl:*)",
      "Bash(wget:*)",
      "Bash(nc:*)"
    ],
    "ask": [
      "Bash",
      "Edit",
      "WebFetch"
    ]
  }
}

What this does: Every command prompts—even sandboxed ones. No escape hatch. Common data exfiltration tools (curl, wget, nc) are explicitly blocked. Three walls, all OS-enforced.

Malicious README contains hidden instructions to steal your AWS credentials? Claude literally cannot read ~/.aws/. The kernel says no. End of story.

.

.

.

The YOLO Warning: Why This Actually Matters

Let me be direct with you for a second.

Running Claude Code without sandbox is genuinely risky. I’m not being dramatic—this is just the reality of how npm packages work.

Every npm package you install runs postinstall scripts with full access to your system. Every malicious prompt hidden in a README could trick Claude into reading your credentials. Every compromised dependency could phone home with your data.

“It probably won’t happen to me” is not a security strategy.

(It’s barely even a sentence.)

The Claude Code Sandbox isn’t paranoia. It’s basic hygiene. Like washing your hands. Like wearing a seatbelt. Like not storing passwords in a Google Doc called “passwords.txt.”

The 84% reduction in permission prompts? That’s nice. That’s a quality-of-life improvement. But the real win is protection that actually works—because it’s enforced at the kernel level, not just “Claude, please don’t do bad things.”

What Sandbox Doesn’t Protect

Let’s be honest about the limits, though. Sandbox protects your system files, SSH keys, AWS credentials, shell config, and network exfiltration.

It does not protect your project files from mistakes, defend against social engineering, or magically secure allowed domains.

The sandbox makes Claude safe to use autonomously. It doesn’t make you invincible.

👉 Use git. Review changes. Read prompts when they appear. (The ones that do appear now actually matter—which is kind of the whole point.)

.

.

.

Stop Configuring, Start Building

Here’s the thing about sandbox configuration:

every project is different. Next.js needs different settings than Django. WordPress with Docker needs different settings than a Python CLI tool.

Figuring out the right config for YOUR specific codebase? That’s tedious. That’s the kind of thing that makes you put it off until “later” (which, let’s be honest, means “never”).

So I built a tool to do it for you.

Introducing: Sandbox Architect

It’s a Claude Code skill that:

  1. Analyzes your codebase — Detects your stack, package managers, frameworks, Docker usage, sensitive files
  2. Asks smart questions — Only what it can’t figure out automatically
  3. Generates your config — Tailored to YOUR project, ready to paste

No more reading documentation. No more guessing which domains you need. No more discovering your config is wrong when commands fail at the worst possible moment.

Install Sandbox Architect:

/plugin marketplace add nathanonn/claude-skills-sandbox-architect

After adding the marketplace, the sandbox-architect skill will be available for installation and will help you configure sandbox settings for your projects.

That’s it.

Next time you start a project, just ask:

> Help me configure sandbox settings for this project

Done. Configured. Protected. Back to building.

.

.

.

Your Next Steps

  1. Run /sandbox and enable Auto-allow mode
  2. Create your ~/.claude/settings.json using one of the configs above
  3. Install Sandbox Architect for automatic configuration
  4. Never press Enter 50 times again

The Claude Code Sandbox isn’t just a feature—it’s a fundamental shift in how you work with AI coding assistants. Boundaries instead of babysitting. Protection that works because physics says so, not because we asked nicely.

What project are you going to secure first?

Drop a comment below—I’d love to hear what you’re building.

Now go make something.

11 min read The Art of Vibe Coding, Claude, WordPress Automation

Building WordPress Abilities API Extensions for Third-Party Plugins (SEO Edition)

In my previous post about internal linking, I promised to show you how to build WordPress Abilities API extensions for other people’s plugins.

Today, I’m delivering on that promise.

We’re staying in the SEO lane—updating meta titles, descriptions, focus keywords, image alt text, and Open Graph settings. You know. All the tedious stuff that makes SEO optimization feel like a part-time job nobody applied for.

To manage these settings, you need an SEO plugin. I’m using Rank Math.

Why Rank Math? Honestly? Because it’s what I use on my own site. No fancy reason—I’m showing you real projects I actually need. A bit of selfishness, sure. But that’s the deal I made with you.

.

.

.

The Problem That’s Been Nagging Me

Here’s my situation. (And I bet—I really bet—you’re in the same boat.)

I’ve been publishing newsletters for 28 consecutive weeks now.

Twenty-eight weeks of hitting “publish” and hoping—really hoping—the SEO gods would smile upon me. Twenty-eight weeks of telling myself I’d go back and optimize everything “later.”

You know how that goes.

The whole time, I believed good content would naturally attract readers. And to some extent? That’s true. But optimizing for SEO amplifies everything.

Here’s the thing:

Since I never focused on SEO before, going back to optimize all those posts is a mountain of work. The kind of mountain that makes you want to lie down, stare at the ceiling, and pretend the problem doesn’t exist.

(Sound familiar?)

Sure, I could subscribe to Rank Math Premium and use their bulk edit feature.

But then WordPress 6.9 introduced the WordPress Abilities API.

And suddenly—suddenly—we can hook our WordPress sites directly to AI agents via MCP.

So here’s what I’m building: a Rank Math extension that exposes SEO functionality through the WordPress Abilities API. Mass updates. AI-powered. Hands-free. The workflow is nearly identical to the internal linking plugin I built before. A few tweaks here and there—specific adjustments for extending someone else’s plugin.

Let me walk you through it.

.

.

.

Step 1: Brainstorming for Requirements

Every vibe coding project starts the same way for me: brainstorming requirements.

I use Claude web for this. Something about it works better for the back-and-forth Q&A sessions—the clarifying questions, the drilling down into what I actually want.

I start with a rough description of the plugin I need, then use my go-to prompt:

Claude web interface showing the initial brainstorming prompt for creating a Rank Math SEO abilities extension, requesting clarifying questions until 95% confident
PROMPT: Requirements for WordPress Abilities API SEO Extension
The Rank math WordPress plugin doesn't have REST API. Instead of building our own REST API, I want to use the latest abilities API from WordPress to create abilities for the Rank Math WordPress plugin. We are not building it on top of the Rank Math plugin. This is a standalone plugin. However, it does need the Rank Math plugin in order for it to work.

The abilities I'm thinking of are:

- Search posts, custom post types, pages (default: post) by keywords, categories, tags, custom taxonomies, id, author, date range, etc
- get post, custom post type, page (default: post) by id. This would retrieve the full content of the post including title, content, excerpt, featured image, taxonomies, author info, as well as Rank Math SEO data like focus keyword, meta title, meta description, and any other relevant SEO fields that Rank Math manages for that post.
- update the rank math seo data for a given post, custom post type, or page by id. This would include updating fields like focus keyword, meta title, meta description, schema settings, social media metadata, and any other SEO-related fields that Rank Math handles.

The main Rank Math plugin is located at: /Users/nathanonn/LocalSites/abilities-api/app/public/wp-content/plugins/seo-by-rank-math

You can read the codebase to understand how the main Rank Math plugin works.

Please use the "wp-abilities-api" skill to help you with any WordPress Abilities API related tasks.

The idea is to create a separate plugin that exposes a REST API for interacting with Rank Math SEO data using LLM via MCP server.

I want you to help me brainstorm for the requirements of this plugin. Focus on business logic and rules, user stories, and acceptance criteria. No need to include technical implementation details.
The Rank math WordPress plugin doesn't have REST API. Instead of building our own REST API, I want to use the latest abilities API from WordPress to create abilities for the Rank Math WordPress plugin. We are not building it on top of the Rank Math plugin. This is a standalone plugin. However, it does need the Rank Math plugin in order for it to work.

The abilities I'm thinking of are:

- Search posts, custom post types, pages (default: post) by keywords, categories, tags, custom taxonomies, id, author, date range, etc
- get post, custom post type, page (default: post) by id. This would retrieve the full content of the post including title, content, excerpt, featured image, taxonomies, author info, as well as Rank Math SEO data like focus keyword, meta title, meta description, and any other relevant SEO fields that Rank Math manages for that post.
- update the rank math seo data for a given post, custom post type, or page by id. This would include updating fields like focus keyword, meta title, meta description, schema settings, social media metadata, and any other SEO-related fields that Rank Math handles.

The main Rank Math plugin is located at: /Users/nathanonn/LocalSites/abilities-api/app/public/wp-content/plugins/seo-by-rank-math

You can read the codebase to understand how the main Rank Math plugin works.

Please use the "wp-abilities-api" skill to help you with any WordPress Abilities API related tasks.

The idea is to create a separate plugin that exposes a REST API for interacting with Rank Math SEO data using LLM via MCP server.

I want you to help me brainstorm for the requirements of this plugin. Focus on business logic and rules, user stories, and acceptance criteria. No need to include technical implementation details.

A few rounds of Q&A later, Claude compiles the full requirements:

Requirements document generated by Claude showing SEO Abilities for WordPress with table of contents including Plugin Overview, Ability Categories, Abilities List, and Business Rules sections

You can read the full requirements document here.

(I’m skipping the detailed brainstorming walkthrough this time. If you want the step-by-step breakdown, check my previous post—I covered the entire process there.)

.

.

.

Step 2: Project Folder Setup

Nothing glamorous here—but necessary.

VS Code file explorer showing wp-abilities-seo-extension project structure with .claude/skills folder containing build-insights-logger, mcp-builder, skill-creator, and wp-abilities-api skills, plus notes folder with requirements.md

I set up the project folder and install the wp-abilities-api skill.

I also installed three additional skills (optional, but useful):

  • build-insights-logger: Captures insights during the build so Claude Code learns from the process and avoids repeating mistakes
  • skill-creator: Creates new skills on the fly if needed
  • mcp-builder: In case I need to spin up an MCP server quickly

After that, I dropped the requirements into the notes/ folder and created a blank main plugin file (wp-abilities-seo-extension.php).

Ready to build.

.

.

.

Step 3: Build the Plugin with One Shot Prompt

Everything’s in place. Time to ask Claude Code to build the entire plugin.

One shot.

Yes, one prompt.

Sounds ambitious—maybe even reckless—but it works because the requirements are comprehensive and the wp-abilities-api skill handles the heavy lifting.

Claude Code terminal showing the initial prompt to build the plugin from scratch, referencing requirements.md, the wp-abilities-api skill, the build-insights-logger skill, and the Rank Math plugin location

Here’s the exact prompt:

Based on the requirements at @notes/requirements.md, please help me build the plugin from scratch.
Please use the "wp-abilities-api" skill to help you with any WordPress Abilities API related tasks.
Please use the "build-insights-logger" skill to automatically log meaningful insights, discoveries, and decisions during coding session.
The main Rank Math plugin is located at: /Users/nathanonn/Studio/wp-test/wp-content/plugins/seo-by-rank-math
You can read the codebase to understand how the main Rank Math plugin works.

Short prompt.

No novel required.

Why? Because everything Claude needs lives in the requirements document and the skills. The only addition: the Rank Math plugin location. Claude needs to read and understand the codebase of the plugin we’re extending.

That’s the critical piece for building third-party extensions. Point Claude at the source code.

I’m using Claude Code in Plan Mode with Opus 4.5. This lets it explore, research, and strategize before writing a single line of code.

Claude Code running two parallel Explore agents - one for exploring current project structure reading requirements.md, another for exploring Rank Math SEO structure, plus activating the wp-abilities-api skill

Claude fires up two explore agents in parallel:

  • One reads the project structure and requirements
  • One dives into the Rank Math codebase
Claude Code showing the Explore Rank Math SEO structure agent reading PHP files from the seo-by-rank-math plugin directory

Then it consults the wp-abilities-api skill to understand proper registration patterns:

Claude Code reading WordPress Abilities API documentation files including registering-abilities.md (444 lines), categories.md (100 lines), and error-handling.md (31 lines)

At this point, Opus 4.5 has a complete picture:

  1. The project state (empty plugin)
  2. Rank Math’s meta keys and helper functions
  3. WordPress Abilities API registration patterns

Time to plan.

Claude Code showing Plan agent completed with 28 tool uses and 95.5k tokens in 5m 18s, displaying implementation plan summary with architecture details, implementation order, and key patterns

The plan is comprehensive. Detailed architecture. Clear implementation phases. All thanks to Opus 4.5’s capabilities combined with thorough requirements.

Claude's implementation plan showing overview of 10 abilities across 3 categories, provider-based architecture, and detailed directory structure with src folder containing Plugin.php, AbilityRegistrar.php, Settings.php, and subfolders for Providers, Abilities, Services, and Errors
Plan details showing Rank Math Meta Keys table mapping SEO fields to meta keys, and Implementation Phases from Phase 1 (Core Infrastructure) through Phase 4 (SEO Meta Abilities) with numbered file list

I agreed to the plan. Implementation begins.

Claude Code starting implementation after plan approval, activating build-insights-logger skill, creating composer.json with PSR-4 autoloading, showing file contents being written

(The full build process is Claude generating codes while I drink coffee. Nothing riveting to watch.)

This is the part where I’d normally tell you to go make a sandwich.

But you won’t need to.

Less than 6 minutes later: Opus 4.5 completes the build.

Six minutes.

For a complete WordPress Abilities API plugin.

Stay with me here.

Claude Code build completion summary showing 21 PHP files created across Core Infrastructure, Provider Layer, Services, Error Handling, and 10 Abilities, with testing instructions via WP-CLI and REST API

21 PHP files. Core infrastructure. Provider layer. Services. Error handling. All 10 abilities implemented.

Because I included the build-insights-logger skill in my prompt, Claude captured every key decision and discovery during development:

Claude Code writing 72 lines of insights to session log file, showing architecture insight about Provider-based SEO Plugin Abstraction with ProviderInterface defining contracts and RankMathProvider implementing Rank Math-specific logic

These insights become documentation.

Learning material for the next build.

.

.

.

Step 4: Test the Plugin with Claude Code

Build complete.

But before we pop any champagne (or, you know, instant coffee)—we test.

Claude Code terminal showing test prompt asking to activate and test the plugin via REST API, verify MCP discovery shows all 10 abilities, and test error handling with invalid post IDs

Here’s my testing prompt:

Please activate & test out the plugin:
- Test all the abilities via REST API. Example endpoint:
    `GET /wp-json/wp-abilities/v1/seo-abilities/get-seo-meta/run?input[post_id]=1`
- Verify that the MCP discovery shows all 10 abilities correctly.
- Test error handling by providing invalid post IDs and ensuring that the plugin responds appropriately.
Please use the "wp-abilities-api" skill to help you with any WordPress Abilities API related tasks.
Please use the "build-insights-logger" skill to automatically log meaningful insights, discoveries, and decisions during coding session.
You have access to WP-CLI commands to help you with the development and troubleshooting.

Three focus areas:

  1. Test abilities via REST API
  2. Verify MCP discovery shows all 10 abilities
  3. Test error handling with invalid inputs

Claude runs through the tests:

Claude Code executing REST API tests in parallel using curl commands to test get-seo-meta, get-social-meta, get-seo-score, get-post-images, and other ability endpoints

(Again, nothing thrilling here. Claude does the work. I watch with my coffee.)

Test results come in:

Test completion summary showing all 10 abilities working with green checkmarks, including get-seo-meta, update-seo-meta, get-social-meta, bulk operations, and error handling verification

All 10 abilities working. MCP discovery correct. Error handling validated.

The summary shows exactly what each ability does and any notable behaviors.

.

.

.

Step 5: Use Test Results for Improvements

Tests passed.

But—and this is important—passing tests doesn’t mean perfect code.

I asked Opus 4.5 to analyze the test results and suggest improvements:

Claude Code prompt in plan mode asking to identify areas needing improvement or further testing based on test results, and come up with a plan to address them
Based on your test results, identify the areas that may need improvement or further testing, and come up with a plan to address them.

Claude explores the codebase again, this time hunting for edge cases and potential issues:

Claude Code showing two Explore agents finished examining permission/error handling and image abilities, creating improvement plan, and asking clarifying question about handling orphaned images

It found several areas to improve:

  • Permission callback consistency
  • Image validation for orphaned images (HTML references to non-existent attachments)
  • Output schema enhancements

Claude even asked a clarifying question about handling orphaned images. (I chose the recommended option: add new fields to distinguish orphaned images while preserving the original reference ID for debugging.)

Improvements implemented:

Implementation summary showing changes made to AbilityRegistrar.php (permission callbacks), ImageService.php (attachment validation), and GetPostImagesAbility.php (output schema), with test results showing all improvements working including 29 orphaned images detected

The changes:

  1. Permission Callbacks: Changed 7 abilities from check_edit_post_permission to check_edit_posts_permission for better error handling
  2. Image Validation: Added attachment existence validation, new is_orphaned and referenced_id fields for orphaned images
  3. Output Schema: Added images_orphaned count to the get_post_images return data

All verified with fresh tests. 29 orphaned images detected correctly on my site. The schema updates reflected in MCP discovery.

.

.

.

Step 6: Put the Plugin to Work

Everything’s built and tested.

Now comes the fun part—actually using it.

The process mirrors what we did with the internal links plugin. First, install the MCP Adapter plugin into your WordPress site.

WordPress plugins page showing MCP Adapter plugin version 0.1.0 by WordPress.org Contributors, with description "Adapter for Abilities API, letting the abilities to be used as MCP tools, resources or prompts"

(You can download the MCP Adapter from their GitHub releases page.)

With the adapter active, I asked Claude what abilities my WordPress site has:

Claude Code response showing 10 SEO abilities available across three categories - SEO Meta Management (get-seo-meta, update-seo-meta, bulk-update-seo-meta), Social Media Meta (get-social-meta, update-social-meta), SEO Analysis (get-seo-score, find-posts-with-seo-issues), and Image Optimization (get-post-images, update-image-alt-text, bulk-update-image-alt-text)

All 10 abilities visible. Three categories. Ready to go.

Now for the moment of truth—the reason I built this whole thing in the first place.

I asked Claude to optimize SEO for a specific post:

Claude Code prompt in plan mode asking to optimize post ID 1557 for SEO, scanning content and current setup first, then proposing improvements within available abilities
I want to optimize my post for SEO (ID: 1557). First, scan the post to understand its content and current SEO setup. Then, propose improvements that fall within your abilities.

Claude immediately starts gathering data. Multiple abilities firing in parallel:

Claude Code executing four MCP abilities in parallel - get-seo-meta, get-social-meta, get-seo-score, and get-post-images - all returning success with data for post ID 1557

Four abilities. One request. All the SEO data I need.

Here’s what Claude found—and honestly, it stings a little to share this:

Current SEO Status table showing post "My App Looked Like Everyone Else's Until I Discovered This Claude Skill Trick" with SEO Score 33/100 (Poor), title too long at 82 characters, description too long at 202 characters, missing keyword in title, social meta empty, and 3 images all missing alt text

The diagnosis:

  • SEO Score: 33/100 (Poor)
  • Title: 82 characters (max recommended: 60)
  • Description: 202 characters (max: 160)
  • Keyword in title: Missing
  • Social meta: Completely empty
  • Images: 3 total, 0 with alt text

Ouch.

But also? Exactly why I built this plugin.

Claude analyzed the issues and proposed a complete optimization plan:

SEO Optimization Plan Summary showing current vs proposed fixes - SEO Title shortened from 82 to 58 chars with keyword, Meta Description from 202 to 153 chars, Social Meta to be configured, and three images with proposed descriptive alt text. Expected result: SEO score improvement from 33 to 80+

The plan covers everything: shorter title with keyword, trimmed description, Facebook/Twitter metadata, and contextual alt text for all three images.

Expected result: SEO score from 33 → 80+.

I approved. Claude executed:

Claude Code executing update-seo-meta and update-social-meta abilities via MCP, setting new SEO title "Claude Skill Design System: Create Reusable Frontend Styles" and description, plus Facebook and Twitter metadata
Claude Code updating image alt text individually for three attachments - financial dashboard image (ID 1575), Claude Code terminal screenshot (ID 1576), and dashboard design variants (ID 1577) - after bulk update failed

Interesting note: the bulk image update failed, so Claude adapted and updated each image individually. Problem-solving on the fly.

SEO Optimization Complete summary showing before/after comparison - SEO Title from 82 chars to 58 chars with keyword, Description from 202 to 153 chars with keyword, Social Meta now configured, Images with Alt Text from 0/3 to 3/3. All 5 SEO tests now pass (previously: 1 pass, 3 warnings, 1 fail)

Results summary:

MetricBeforeAfter
SEO Title82 chars (too long, no keyword)58 chars ✅ with keyword
Meta Description202 chars (too long, no keyword)153 chars ✅ with keyword
Social MetaEmptyFacebook & Twitter configured ✅
Images with Alt Text0/33/3 ✅

All 5 SEO tests now pass. Previously: 1 pass, 3 warnings, 1 fail.

Let me verify in the WordPress admin:

Rank Math SEO panel in WordPress showing SEO score improved to 71/100, with preview displaying new title "Claude Skill Design System:..." and description, focus keyword "claude skill design system" set and highlighted

SEO score: 71/100.

Not quite the 80+ the plan aimed for—but jumping from 33 to 71? I’ll take it.

Especially considering I did nothing except approve a plan.

Rank Math Preview Snippet Editor showing General tab with optimized title "Claude Skill Design System: Create Reusable Frontend Styles" at 59/60 characters, permalink, and description at 152/160 characters with visual length indicators

The snippet preview shows proper character counts. Title at 59/60. Description at 152/160. Both in the green zone.

And the images:

WordPress block editor showing financial dashboard image with Image settings panel displaying alt text "Smashing Advantage financial dashboard with dark theme showing income, expenses, profit metrics and charts"
WordPress block editor showing Claude Code terminal screenshot with Image settings panel displaying alt text "Claude Code terminal invoking frontend-design skill to explore dashboard implementation"
WordPress block editor showing dashboard design variants image with Image settings panel displaying alt text "Five dashboard design variants generated by Claude Skill: Neo-Brutalist, Glass Aurora, Editorial Mono, Warm Minimal, and Dark Command"

All three images now have descriptive, contextual alt text. Claude understood what each image showed and wrote appropriate descriptions.

.

.

.

Try It Yourself

Want to run this on your own site?

  1. Download the plugin: https://github.com/nathanonn/wp-abilities-seo-extension/releases/download/v1.0.0/wp-abilities-seo-extension-latest.zip
  2. Install the MCP Adapter: Grab it from the GitHub releases page
  3. Follow the setup instructions: Check the README for configuration details
  4. Connect Claude Code (or any MCP-compatible AI agent)
  5. Start optimizing

If you want to extend the plugin further—maybe add content analysis, FAQ generation, or schema markup—fork the repo:

github.com/nathanonn/wp-abilities-seo-extension

.

.

.

What We Built (And What It Means)

Let’s zoom out for a second.

In under 6 minutes of build time, we created a WordPress plugin that:

  • Exposes 10 SEO abilities through the WordPress Abilities API
  • Integrates with Rank Math (with architecture ready for Yoast, AIOSEO, etc.)
  • Lets AI agents read, analyze, and update SEO settings
  • Handles bulk operations for mass optimization
  • Manages image alt text across your entire content library

The real unlock?

Your WordPress site now speaks MCP.

Any AI agent—Claude Code, custom bots, automation pipelines—can now optimize your SEO programmatically. No clicking through admin panels. No manual data entry. No tedious bulk editing. You describe what you want. The AI executes using the abilities you’ve exposed through the WordPress Abilities API.

This is the promise of WordPress 6.9’s Abilities API.

And we’re just scratching the surface.

.

.

.

What’s Next?

Two plugins down. Both solving real problems I face on my own site.

The pattern works:

  1. Brainstorm requirements with Claude
  2. Set up project with the right skills
  3. One-shot build with comprehensive prompt
  4. Test and iterate
  5. Deploy and use

For extending third-party plugins, add one step: point Claude at the source code.

Remember those 28 weeks of newsletters I mentioned at the start? The mountain of SEO work that made me want to lie down and stare at the ceiling?

It’s not a mountain anymore.

It’s a checklist. And I have an AI agent with a pen.

What tedious WordPress task are you going to automate next?

The WordPress Abilities API is waiting.

Go build something.

9 min read The Art of Vibe Coding, Claude, WordPress Automation

I Built an AI-Powered Internal Links Plugin Using WordPress 6.9’s Abilities API and Claude Code

You know that thing where you’ve got 47 browser tabs open?

Not because you’re researching anything profound. No. You’re just trying to find that one post you wrote six months ago—the one about WooCommerce setup, or was it the product pages tutorial?—because you need to link to it from the article you’re publishing today.

Tab after tab after tab. Command+F. Scroll. Squint. Copy URL. Switch back. Find the right words to anchor. Paste. Format.

Thirty minutes later, you’ve added three internal links.

Three.

And honestly? They’re probably not even the best ones.

Here’s the thing: I’ve been that person. Staring at a perfectly good 2,000-word post with zero internal links, knowing full well that Google loves them, readers need them, and my inner SEO voice won’t shut up about it.

So I built something.

And what I discovered about WordPress 6.9’s new Abilities API might just change how you think about your entire site.

Stay with me.

.

.

.

The Problem Nobody’s Actually Solving

Let’s be honest about what’s out there right now.

  • Manual linking eats 10-30 minutes per post. That’s not a workflow—that’s a hostage situation.
  • Keyword-based plugins spray links everywhere like a toddler with a garden hose. “AI” gets linked to “AirAsia.” I wish I were joking.
  • Regex matching sounds smart until it isn’t. It matches strings. It doesn’t understand meaning. Big difference.
  • Context blindness is the real killer. These tools can’t tell the difference between your Gutenberg tutorial and your post about WordPress editor basics—even though they’re obviously related.

The existing solutions are solving the wrong problem.

They’re trying to match strings when they should be understanding meaning.

And then WordPress 6.9 launched on December 2nd, 2025.

Buried in the release notes was something called the Abilities API. Most developers scrolled right past it.

I didn’t.

.

.

.

The Discovery That Changed Everything

What happens when you combine WordPress’s new Abilities API with Claude Desktop and an MCP server?

Magic. Actual magic.

(Okay, not actual magic. But close enough that I did a little chair dance when it worked.)

Instead of regex patterns hunting for keywords, I created abilities that do something radical—they think.

  • Search posts semantically. When you write about “selling products online,” it finds your WooCommerce setup guide. Because it understands what you mean.
  • Analyze content context. It knows your Gutenberg blocks tutorial relates to your WordPress editor basics post. Not because of keywords. Because of meaning.
  • Add links intelligently. Places them where readers actually need them—not just where a keyword appears.
  • Validate links automatically. Checks if targets still exist. No more embarrassing 404s hiding in your archive.

The kicker?

AI decides where to place links based on actual content understanding.

Not keywords. Not patterns. Understanding.

.

.

.

Building the Plugin: From Idea to Production

Here’s where it gets fun.

I’m going to walk you through exactly how I built this—from brainstorming to a working plugin with 9 abilities. The whole journey took about 3 hours.

(Three hours! To build something that would’ve taken weeks the traditional way. I’m still a little giddy about it.)

Phase 1: Getting Clear on What I Actually Wanted

I started in Claude Web with my wp-abilities-api skill loaded.

No documentation hunting. No API reference rabbit holes. Claude already knew the patterns.

Brainstorming prompt describing five abilities for internal linking: search posts, get post, add/update/remove internal links, validate links, and generate reports
PROMPT: Abilities API requirements brainstorming
I want to use the latest abilities API from WordPress to create abilities to add / update / remove internal links for posts.

The abilities I'm thinking of are:

-   Search posts, custom post types, pages (default: post) by keywords, categories, tags, custom taxonomies, id, author, date range, etc
-   get post, custom post type, page (default: post) by id. This would retrieve the full content of the post including title, content, excerpt, featured image, taxonomies, author info for that post.
-   add / update / remove internal links in a post, custom post type, page (default: post) by id. This would involve specifying the source post id, target post id, anchor text, and link attributes (like nofollow, target blank, etc).
-   validate internal links to ensure they point to existing posts, custom post types, or pages within the WordPress site.
-   generate a report of all internal links within a specific post, custom post type, or page (default: post), including broken links, link attributes, and anchor texts.

Please use the "wp-abilities-api" skill to help you with any WordPress Abilities API related tasks.

The idea is to create a plugin that exposes a REST API for adding, updating, and removing internal links using LLM via MCP server.

I want you to help me brainstorm for the requirements of this plugin. Focus on business logic and rules, user stories, and acceptance criteria. No need to include technical implementation details.
I want to use the latest abilities API from WordPress to create abilities to add / update / remove internal links for posts.

The abilities I'm thinking of are:

-   Search posts, custom post types, pages (default: post) by keywords, categories, tags, custom taxonomies, id, author, date range, etc
-   get post, custom post type, page (default: post) by id. This would retrieve the full content of the post including title, content, excerpt, featured image, taxonomies, author info for that post.
-   add / update / remove internal links in a post, custom post type, page (default: post) by id. This would involve specifying the source post id, target post id, anchor text, and link attributes (like nofollow, target blank, etc).
-   validate internal links to ensure they point to existing posts, custom post types, or pages within the WordPress site.
-   generate a report of all internal links within a specific post, custom post type, or page (default: post), including broken links, link attributes, and anchor texts.

Please use the "wp-abilities-api" skill to help you with any WordPress Abilities API related tasks.

The idea is to create a plugin that exposes a REST API for adding, updating, and removing internal links using LLM via MCP server.

I want you to help me brainstorm for the requirements of this plugin. Focus on business logic and rules, user stories, and acceptance criteria. No need to include technical implementation details.

My initial prompt was simple: I want to create abilities for managing internal links.

Claude came back with targeted questions. Not generic ones—targeted.

Claude reading WordPress Abilities API skill documentation and presenting 12 clarifying questions about post types, editor support, and implementation approach

My answers to Claude’s questions:

User answering Claude's questions with choices like "1/c" for configurable post types, "2/a" for API-only, "3/c" for both Gutenberg and Classic editor support

Notice what’s happening here. Each answer shaped the architecture. No guessing. No over-engineering. No building features I’d never use.

After a few rounds, Claude produced a comprehensive requirements document:

Requirements document showing plugin name "Internal Links API", ability namespace "internal-links-api", core principles including LLM-First Design and Editor-Aware architecture

The key architectural decisions that emerged:

  • LLM-First Design — All abilities optimized for AI consumption via MCP. Because that’s the whole point.
  • Editor-Aware — Handles Gutenberg blocks vs Classic Editor automatically. No more “works in one, breaks in the other.”
  • Permission-Based — Respects WordPress capabilities system. Because security isn’t optional.
  • Operation-Focused — The plugin handles CRUD operations. AI handles the intelligence. Clean separation.

Phase 2: Letting Claude Code Do the Heavy Lifting

With requirements locked, I opened VS Code and set up my workspace:

VS Code project structure showing abilities-api-internal-links folder with skills including wp-abilities-api, mcp-builder, skill-creator, and requirements.md in notes folder

The setup was deliberate.

wp-abilities-api skill installed. Build-insights-logger to capture discoveries. Requirements document in the notes folder. Clean plugin directory ready to go.

Then I triggered Claude Code with plan mode:

Terminal prompt asking Claude Code to build the plugin from scratch using wp-abilities-api skill and build-insights-logger, with WP-CLI access mentioned
PROMPT: Build Plugin From Scratch
Based on the requirements at @notes/requirements.md, please help me build the plugin from scratch.

Please use the "wp-abilities-api" skill to help you with any WordPress Abilities API related tasks.

Please use the "build-insights-logger" skill to automatically log meaningful insights, discoveries, and decisions during coding session.

You have access to WP-CLI commands to help you with the development.
Based on the requirements at @notes/requirements.md, please help me build the plugin from scratch.

Please use the "wp-abilities-api" skill to help you with any WordPress Abilities API related tasks.

Please use the "build-insights-logger" skill to automatically log meaningful insights, discoveries, and decisions during coding session.

You have access to WP-CLI commands to help you with the development.

Watch what happened next.

Claude Code reading requirements (975 lines) and exploring current plugin state, showing "wp-abilities-api skill is running" with incubating status

Claude Code immediately read the requirements document, explored the current plugin state, activated the wp-abilities-api skill automatically, and studied the API documentation patterns.

Claude Code reading WordPress Abilities API documentation files including registering-abilities.md, categories.md, and error-handling.md

Then came clarifying questions.

Even Claude Code wanted to be sure:

Interactive prompt showing Claude Code asking about PHP autoloading (Composer PSR-4), implementation approach (all at once), and testing strategy (no tests initially)

Three critical decisions:

  • Autoloading: Composer PSR-4. The professional standard.
  • Implementation: All 9 abilities at once. Comprehensive from the start.
  • Testing: No unit tests initially. Faster iteration. (We can add tests later. Don’t @ me.)
Implementation plan summary showing 9 abilities to implement, core services like LinkParserService and LinkModifierService, and technical approach using DOMDocument

The plan was complete. Nine abilities. Core services. Professional architecture.

And I hadn’t written a single line of code yet.

Phase 3: Watching the Build Happen

Claude Code creating composer.json and main plugin file, showing green progress indicators for file creation

Here’s what fascinates me—Claude Code used WP-CLI to test in real-time:

WP-CLI command executing add-link ability with parameters for source post ID 1, target post 915, anchor text "WordPress", showing test execution in progress

Real post IDs. Real execution. Real validation.

WP-CLI testing get-link-report ability showing successful link report generation with internal links found and validated

Every ability got tested. No assumptions. No “it should work” moments.

Just… working code.

.

.

.

The Final Result: 9 Abilities, One Plugin

Plugin structure tree showing main plugin file, composer.json, src folder with Plugin.php, AbilityRegistrar.php, Settings.php, 9 Ability classes, Services folder, and Schemas folder
Table continuation showing key features including Editor-aware handling, Permission-based access, Post lock support, MCP-ready status, and REST API enabled

Here’s what we built:

9 Registered Abilities:

  • Read operations: search-posts, get-post, validate-links, get-link-report
  • Write operations: add-link, update-link, remove-link
  • Batch operations: batch-add-links, batch-remove-links

The features that matter:

  • Editor-aware — Properly handles Gutenberg blocks AND Classic Editor. Finally.
  • Permission-based — Uses WordPress capabilities (read, read_post, edit_post). Your site stays secure.
  • Post lock support — Respects WordPress post editing locks. No stepping on collaborators’ toes.
  • MCP-ready — All abilities exposed via mcp.publicapi=true. AI can actually use them.
  • REST API enabled — Available via REST endpoints for whatever else you dream up.

.

.

.

The Real Test: Can AI Actually Use This?

The plugin was built. The abilities were registered.

But could AI actually use them?

Time to find out.

Setting Up the Bridge

First, I installed the MCP Adapter plugin. This brilliant piece of engineering transforms WordPress abilities into MCP tools that AI can trigger.

WordPress plugins page showing MCP Adapter version 0.1.0 activated with description "Adapter for Abilities API, letting the abilities to be used as MCP tools, resources or prompts"

The setup took 2 minutes. Two.

mcp.json configuration file with wordpress-http-default server settings including WP_API_URL pointing to localhost:8882, admin username, and API password

When I opened Claude Code, it immediately detected the MCP server:

Claude Code notification showing "New MCP server found in .mcp.json: wordpress-http-default" with options to use the server or continue without it

The Moment of Truth

I started simple: “What kind of abilities does my WordPress site have?”

Terminal prompt asking "what kind of abilities my WordPress site have?"

Claude Code triggered the discover-abilities tool:

Claude Code response showing a table of 9 abilities split into Read Operations (search-posts, get-post, validate-links, get-link-report) and Write Operations (add-link, update-link, remove-link, batch-add-links, batch-remove-links) with descriptions

All 9 abilities. Ready. Waiting.

Autonomous Internal Linking in Action

I grabbed a post from my site—an article about Claude Skills with zero internal links.

Post ID: 1557.

I asked Claude Code to scan the post, search for related content, and add internal links.

Terminal showing the prompt to add internal links to post 1557

Here’s what happened.

Step 1: Reading the post

Tool use notification showing Claude Code executing "internal-links-api/get-post" with post_id 1557

Claude read the entire post. Understood it was about Claude Skills, design systems, and creating reusable components.

Step 2: Searching for relevant content

Tool use showing search-posts ability being called with keyword "Claude" and per_page limit of 20

26 related posts found. But Claude didn’t just grab random matches.

Step 3: Intelligent link selection

Table showing 5 selected internal links with columns for Anchor Text, Target Post, and Rationale - including links for "Claude Skills", "Claude Code", "component library", and "reusable forever"

Look at those choices:

  • “Claude Skills” → Links to Part 1 intro article
  • “Claude Code” → Links to tips article for tool mastery
  • “component library” → Connects to Part 3 about mastering libraries
  • “reusable forever” → Points to Part 2 about code reusability

Each link made semantic sense. No keyword stuffing. No forced matches. Just… relevance.

Step 4: Applying the links

Terminal showing batch-add-links ability being executed with 4 link objects containing anchor text, target post IDs, and occurrence settings

One API call. Four links inserted.

Summary table showing 4 links added with their anchor texts, target posts, and URLs, plus explanations of why each link was chosen based on content relevance

The Results

I opened my post in the WordPress editor.

There they were:

The transformation:

Before: 0 internal links, isolated content

After: 4 contextually perfect internal links

Time taken: Less than 2 minutes

Human effort: One prompt

But here’s what really got me.

Claude understood that when I mentioned “component library” in the context of ShadCN UI, it should link to my article about mastering libraries in Claude Skills.

When I wrote “reusable forever” about turning code into superpowers, it linked to Part 2 of my Claude Skills series—which is literally about that exact topic.

No regex could do this. No keyword matching could understand this context.

This is what the WordPress Abilities API makes possible.

.

.

.

What We Built (The Recap)

Let’s step back for a second:

  1. Brainstormed requirements with Claude using the wp-abilities-api skill
  2. Built the plugin with Claude Code in plan mode—9 abilities, full architecture
  3. Connected via MCP to enable AI-powered internal linking
  4. Tested with real content—AI understanding context and applying relevant links

The entire journey: 3 hours.

The result: A production-ready plugin that fundamentally changes how WordPress handles internal linking.

.

.

.

Why This Actually Matters

Remember the old way?

  • Manual linking: 30 minutes to add 5-10 links
  • Keyword plugins: Spam with irrelevant matches
  • Zero context: No understanding of content meaning

Now?

  • AI-powered linking: Less than 2 minutes for contextually perfect links
  • Semantic understanding: Links based on actual meaning
  • Full automation: One prompt, complete results

The WordPress Abilities API combined with AI doesn’t just save time.

It changes what’s possible.

.

.

.

Your Turn

Ready to try this yourself?

Get the Internal Links Plugin

Step 1: Install the MCP Adapter first

Step 2: Grab the Internal Links API plugin

Step 3: Connect Claude Code, Claude Desktop, Cursor, VS Code—or any platform that connects to MCP servers—and let AI handle your internal linking

Build Your Own Abilities Plugin

Want to create custom abilities for your WordPress site?

The wp-abilities-api skill is your secret weapon.

Get it from: https://github.com/nathanonn/claude-skills-wp-abilities-api

  • For Claude Code users: Install directly from the Claude plugin marketplace. Search for “wp-abilities-api” and click install.
  • For Claude Web users: Download the wp-abilities-api.skill file from the repo and upload it as a custom skill.

The skill contains complete API documentation, code patterns and examples, error handling guides, and best practices for MCP integration.

.

.

.

What’s Next

Here’s the thing about WordPress plugins…

Most have zero REST API. No endpoints. No abilities. No way for AI to communicate with them.

Next week, I’ll show you how to build WordPress Abilities API wrappers for other people’s plugins.

Imagine AI controlling:

  • Your SEO plugin.
  • Your forms plugin.
  • Your membership system.
  • Your page builder.

Any plugin. Any functionality. All accessible to AI.

The WordPress repository has 60,000+ plugins. Maybe 100 have proper APIs.

That’s 59,900 opportunities waiting.

What plugin will you make AI-compatible?

Go build.

13 min read The Art of Vibe Coding, Claude

My App Looked Like Everyone Else’s Until I Discovered This Claude Skill Trick

Here’s a confession…

My accounting app was giving me existential dread.

Not because of the numbers.

(Well, okay, sometimes because of the numbers.)

But because every time I opened it, I felt like I was staring at the digital equivalent of beige wallpaper.

You know that feeling, right? When your app works perfectly but has all the personality of a doctor’s waiting room?

Mine tracked profit and loss beautifully. Managed transactions like a champ. Did everything an accounting app should do. It was built with ShadCN UI—that clean, functional, utterly forgettable component library that makes every SaaS tool look like it came from the same factory.

It was the IKEA furniture of web apps.

Gets the job done.

Zero personality.

(Sorry, IKEA. I still love your chicken wings.)

.

.

.

Here’s the thing: I needed something that felt like mine.

Something with actual personality.

Something that made number-crunching feel less like detention and more like… well, still accounting, but prettier accounting. The kind where you actually want to open the app instead of avoiding it like that one friend who only calls when they need help moving.

Redesigning an entire app though?

That’s like deciding to repaint your house yourself.

Sounds doable until you’re standing there with a brush, realizing you need to paint Every. Single. Room. Every. Single. Wall. And somehow make them all match.

Unless…

(Stay with me here.)

What if you could redesign ONE room, capture that exact paint color and technique, then magically apply it everywhere else?

That’s exactly what I did with Claude Skills.

And friend, it changed everything.

.

.

.

The Thing We Don’t Talk About: Generic Design Syndrome

my-existing-dashboard-design-shadcn-ui

Look familiar?

That screenshot is my accounting dashboard.

Could be yours. Could be literally anyone’s. It’s the starter home of SaaS designs—functional, affordable, and identical to every other one on the block.

It’s not bad.

It’s just… there.

Like elevator music. Like hotel art. Like those conversations where someone asks “how are you?” and you say “fine” even though you’re absolutely not fine because your app looks like it was designed by a committee of robots who’ve never felt joy.

(Too dramatic? Maybe. But you’re still reading, aren’t you?)

Here’s the choice every developer faces—and it’s a lousy choice:

  1. Use a component library → Fast to build, looks like everyone else’s
  2. Design from scratch → Unique, but requires the time commitment of a second mortgage
  3. Hire a designer → Professional, costs more than your monthly coffee budget (and that’s saying something)

But wait.

There’s a door number four that nobody talks about.

What if you could create a design system once—just once—turn it into a Claude Skill, and apply it everywhere automatically?

Let me show you how.

(Spoiler: It takes less time than your last Zoom call.)

.

.

.

Step 1: Let Claude Show You What’s Possible (5 Minutes)

I opened Claude Code and pointed it at my sad, slate dashboard.

The key move?

I used the frontend-design skill (you can download it from here) and asked for 5 completely different HTML variants.

Not tweaks. Not “make the blue slightly bluer.”

I wanted personality. Drama. Something that would make my accountant jealous.

(Do accountants get jealous of app designs? Let’s say yes.)

Claude Code activating the frontend-design skill

Claude Code immediately understood the assignment:

Look at these descriptions—each one a different personality:

  • Neo-Brutalist: Like your app went to art school and came back wearing all black
  • Glass Aurora: What happens when the Northern Lights become a UI (dreamy!)
  • Editorial Mono: The New Yorker meets your dashboard
  • Warm Minimal: Like a hygge hug for your data
  • Dark Command: For when you want to feel like you’re hacking the Matrix while doing expense reports

Five completely different vibes.

From one prompt.

It’s like speed-dating for design systems. (Is that a thing? It should be a thing.)

variant-1 - Neo-Brutalist design
variant-1 – Neo-Brutalist design
variant-2 – Glass Aurora design
variant-3 - Editorial Mono design
variant-3 – Editorial Mono design
variant-4 - Warm Minimal design
variant-4 – Warm Minimal design
variant-2 - Glass Aurora design
Variant-5 – Dark Command design

Each one broke free from that typical AI-generated aesthetic we all recognize. You know the one—like someone asked a robot to paint a sunset.

I fell hard for the Glass Aurora variant.

Yes, it had that slightly AI-ish glassmorphism thing happening.

But those aurora gradients?

Chef’s kiss.

It was like my dashboard went to Iceland and came back enlightened.

.

.

.

Step 2: Make It Yours (2 Minutes of Pure Joy)

The Glass Aurora design only came in dark mode.

But I needed both themes because I’m one of those people who switches to light mode at 6 AM like a responsible adult.

(I switch back to dark mode by lunch. We all have our limits.)

Requesting light mode version of the Glass Aurora variant

Claude Code didn’t just invert the colors like a lazy Instagram filter:

Claude Code creating the light mode version with details about the changes

Look at that attention to detail:

  • Soft gradients from slate to purple/teal (not harsh, not boring)
  • White glass panels with 60-75% opacity (visible but not overwhelming)
  • Pastel backgrounds that don’t burn your retinas
  • Subtle gradient borders for depth (the devil’s in the details, friend)

Perfect.

I had my design.

Now here’s where most people would start the tedious work of manually copying styles across 47 different components.

Don’t be most people.

.

.

.

Step 3: Turn Your Design Into Documentation (10 Minutes That Save Your Life)

I switched to Claude Web (it’s better for this documentation dance) and attached both HTML files:

Claude Web interface with two HTML files attached - dashboard.html and dashboard-light.html

My request was specific.

(Specificity is your friend here. Vague requests get vague results. It’s like ordering “food” at a restaurant.)

PROMPT: Generate Complete Design System Documentation from HTML Files
I need you to analyze the attached HTML files and create two comprehensive design system documents:

### Document 1: Complete Design Guidelines (Markdown)
### Document 2: Interactive Reference Style Guide (HTML)

## Requirements for Both Documents

### Analysis Phase
First, thoroughly analyze ALL attached HTML files to extract:
1. **All CSS variables and design tokens** (colors, spacing, shadows, radius, etc.)
2. **All typography patterns** (font families, sizes, weights, line heights)
3. **All component patterns** (buttons, cards, forms, navigation, etc.)
4. **All layout patterns** (grids, containers, multi-column layouts)
5. **All utility classes** (margins, padding, text alignment, colors)
6. **All interaction patterns** (hover states, transitions, animations)
7. **Responsive breakpoints and mobile patterns**
8. **Naming conventions and prefixes used**

---

## Document 1: Design Guidelines (Markdown)

Create a comprehensive markdown file named `design-guidelines-complete.md` that includes:

### 1. Introduction Section
- **Design Philosophy**: Extract and articulate the design principles evident in the HTML
- **Key Characteristics**: What makes this design system unique
- **When to Use**: Guidance on appropriate use cases

### 2. Design Tokens
Complete CSS variable documentation with:
```css
:root {
    /* Extract ALL CSS variables from the HTML files */
    /* Group by category: colors, spacing, radius, shadows, etc. */
    /* Include comments describing each token */
}
```

### 3. Typography System
- Font family stack
- Complete typography scale table with:
  - Element/Use Case
  - Font Size
  - Font Weight
  - Color
  - Line Height
- Typography utility classes with code examples

### 4. Component Classes
Document EVERY component found in the HTML files with:
- Class name and purpose
- Complete CSS code
- Variants (if applicable)
- Usage notes

Organize by category:
- **Layout** (containers, grids, columns)
- **Cards** (all card variations)
- **Buttons** (all button types and states)
- **Forms** (inputs, textareas, selects, labels, file uploads)
- **Navigation** (navbar, links, menus)
- **Content Components** (articles, lists, chat bubbles, etc.)
- **UI Elements** (badges, tags, status indicators)
- **Specialized Components** (search bars, CTAs, heroes, sidebars)

### 5. Utility Classes
Complete list of utility classes for:
- Spacing (margins, padding)
- Typography (alignment, colors, weights)
- Display (flex, grid)
- Visibility
- Other utilities

### 6. Responsive Design
- Breakpoints used
- Mobile-first patterns
- Responsive grid behaviors
- Mobile-specific overrides

### 7. Animation & Transitions
- Timing functions
- Duration standards
- Transition patterns for different element types

### 8. Usage Examples
For each major component type, provide:
- Clean, minimal HTML example
- Real-world usage scenario
- Multiple examples showing variants

### 9. Accessibility Guidelines
- Color contrast requirements
- Focus states
- Semantic HTML recommendations
- Keyboard navigation notes
- ARIA considerations

### 10. Best Practices
- Implementation guidelines
- Common patterns
- Things to avoid
- Performance considerations

### 11. Additional Sections (if relevant)
- Color usage guidelines
- Icon/emoji usage
- Spacing scale
- Shadow elevation system

---

## Document 2: Reference Style Guide (HTML)

Create a comprehensive, interactive HTML file named `reference-styleguide-complete.html` that includes:

### Structure Requirements

1. **Self-Contained**: All CSS inline in a `<style>` tag
2. **Complete Design Tokens**: Include ALL CSS variables extracted from source files
3. **Live Examples**: Working, interactive examples of every component
4. **Organized Sections**: Clear sections with headers for each component category

### Required Sections

#### Header/Navigation
- Working navigation example from the source files

#### Color Palette Section
- Visual swatches for all colors
- Hex codes displayed
- Color names/variable names
- Organized by category (primary, secondary, neutrals, etc.)

#### Typography Section
- Live examples of every heading level
- Body text examples
- All typography variants demonstrated
- Labels, captions, meta text

#### Button Section
Demonstrate:
- All button variants (primary, secondary, outline, etc.)
- All sizes (small, medium, large)
- All states (normal, hover-able)
- Special buttons (pill, block, icon buttons)
- Button groups (if applicable)

#### Card Section
Show examples of:
- Basic cards
- Card variants (large, compact, etc.)
- Category cards
- Interactive cards with hover states
- Cards in grid layouts

#### Form Section
Include working examples of:
- Text inputs
- Textareas
- Select dropdowns (with custom styling)
- Checkboxes and radios (if in source)
- File uploads
- Input groups
- Form validation states (if applicable)
- Complete form layout example

#### Layout Section
Demonstrate:
- Container widths
- Grid systems
- Multi-column layouts
- Responsive behavior examples

#### Component Sections
For EVERY component found in source files, create a demo section:
- Search bars
- Navigation menus
- Article lists
- Chat interfaces
- Status badges
- Tabs/Pills (if applicable)
- Modals/Dialogs (if applicable)
- Tables (if applicable)
- Pagination (if applicable)
- Breadcrumbs (if applicable)
- And any other unique components

#### Utility Classes Section
Demonstrate utility classes with before/after examples

### Styling for the Style Guide Itself

Create a clean, professional layout for the style guide:
```css
.demo-section {
    /* Section container styling */
}

.demo-header {
    /* Section header styling - make it distinctive */
}

.demo-content {
    /* Content area styling */
}

.color-swatch {
    /* Color display boxes */
}
```

### Footer
- Notes about class prefixes
- Link to design guidelines
- Version information (if applicable)

---

## Output Format

Provide both files as downloadable outputs:
1. `/mnt/user-data/outputs/design-guidelines-complete.md`
2. `/mnt/user-data/outputs/reference-styleguide-complete.html`

---

## Quality Checklist

Before completing, ensure:

### Design Guidelines (MD)
- [ ] All CSS variables extracted and documented
- [ ] Every component class has complete CSS code
- [ ] At least 3-5 usage examples per major component
- [ ] Typography scale is complete with all variants
- [ ] Responsive patterns documented
- [ ] Accessibility guidelines included
- [ ] Best practices section is actionable

### Reference Style Guide (HTML)
- [ ] File opens and displays correctly in browser
- [ ] All colors displayed with swatches and codes
- [ ] Every component from source files is demonstrated
- [ ] Interactive elements work (hover states visible)
- [ ] Forms are functional (inputs accept text, etc.)
- [ ] Layout is clean and organized
- [ ] Sections are clearly labeled
- [ ] Self-contained (no external dependencies)

---

## Additional Instructions

1. **Be Thorough**: Don't skip any components, even small ones
2. **Extract Patterns**: If you see a pattern repeated, create a documented component for it
3. **Maintain Consistency**: Use the same class naming conventions from the source
4. **Provide Context**: Explain WHEN and WHY to use each component
5. **Think Developer-First**: Make it easy to copy-paste and implement
6. **Include Edge Cases**: Show how components look with long text, empty states, etc.

---

## Example Usage

After receiving these documents, a developer should be able to:
1. Understand the entire design system philosophy
2. Find any component they need with working code
3. Copy-paste implementation examples
4. See visual examples of every component
5. Understand responsive behavior
6. Know accessibility requirements
7. Follow best practices for implementation

---

Begin by analyzing all attached HTML files, then create both comprehensive documents.
I need you to analyze the attached HTML files and create two comprehensive design system documents:

### Document 1: Complete Design Guidelines (Markdown)
### Document 2: Interactive Reference Style Guide (HTML)

## Requirements for Both Documents

### Analysis Phase
First, thoroughly analyze ALL attached HTML files to extract:
1. **All CSS variables and design tokens** (colors, spacing, shadows, radius, etc.)
2. **All typography patterns** (font families, sizes, weights, line heights)
3. **All component patterns** (buttons, cards, forms, navigation, etc.)
4. **All layout patterns** (grids, containers, multi-column layouts)
5. **All utility classes** (margins, padding, text alignment, colors)
6. **All interaction patterns** (hover states, transitions, animations)
7. **Responsive breakpoints and mobile patterns**
8. **Naming conventions and prefixes used**

---

## Document 1: Design Guidelines (Markdown)

Create a comprehensive markdown file named `design-guidelines-complete.md` that includes:

### 1. Introduction Section
- **Design Philosophy**: Extract and articulate the design principles evident in the HTML
- **Key Characteristics**: What makes this design system unique
- **When to Use**: Guidance on appropriate use cases

### 2. Design Tokens
Complete CSS variable documentation with:
```css
:root {
    /* Extract ALL CSS variables from the HTML files */
    /* Group by category: colors, spacing, radius, shadows, etc. */
    /* Include comments describing each token */
}
```

### 3. Typography System
- Font family stack
- Complete typography scale table with:
  - Element/Use Case
  - Font Size
  - Font Weight
  - Color
  - Line Height
- Typography utility classes with code examples

### 4. Component Classes
Document EVERY component found in the HTML files with:
- Class name and purpose
- Complete CSS code
- Variants (if applicable)
- Usage notes

Organize by category:
- **Layout** (containers, grids, columns)
- **Cards** (all card variations)
- **Buttons** (all button types and states)
- **Forms** (inputs, textareas, selects, labels, file uploads)
- **Navigation** (navbar, links, menus)
- **Content Components** (articles, lists, chat bubbles, etc.)
- **UI Elements** (badges, tags, status indicators)
- **Specialized Components** (search bars, CTAs, heroes, sidebars)

### 5. Utility Classes
Complete list of utility classes for:
- Spacing (margins, padding)
- Typography (alignment, colors, weights)
- Display (flex, grid)
- Visibility
- Other utilities

### 6. Responsive Design
- Breakpoints used
- Mobile-first patterns
- Responsive grid behaviors
- Mobile-specific overrides

### 7. Animation & Transitions
- Timing functions
- Duration standards
- Transition patterns for different element types

### 8. Usage Examples
For each major component type, provide:
- Clean, minimal HTML example
- Real-world usage scenario
- Multiple examples showing variants

### 9. Accessibility Guidelines
- Color contrast requirements
- Focus states
- Semantic HTML recommendations
- Keyboard navigation notes
- ARIA considerations

### 10. Best Practices
- Implementation guidelines
- Common patterns
- Things to avoid
- Performance considerations

### 11. Additional Sections (if relevant)
- Color usage guidelines
- Icon/emoji usage
- Spacing scale
- Shadow elevation system

---

## Document 2: Reference Style Guide (HTML)

Create a comprehensive, interactive HTML file named `reference-styleguide-complete.html` that includes:

### Structure Requirements

1. **Self-Contained**: All CSS inline in a `<style>` tag
2. **Complete Design Tokens**: Include ALL CSS variables extracted from source files
3. **Live Examples**: Working, interactive examples of every component
4. **Organized Sections**: Clear sections with headers for each component category

### Required Sections

#### Header/Navigation
- Working navigation example from the source files

#### Color Palette Section
- Visual swatches for all colors
- Hex codes displayed
- Color names/variable names
- Organized by category (primary, secondary, neutrals, etc.)

#### Typography Section
- Live examples of every heading level
- Body text examples
- All typography variants demonstrated
- Labels, captions, meta text

#### Button Section
Demonstrate:
- All button variants (primary, secondary, outline, etc.)
- All sizes (small, medium, large)
- All states (normal, hover-able)
- Special buttons (pill, block, icon buttons)
- Button groups (if applicable)

#### Card Section
Show examples of:
- Basic cards
- Card variants (large, compact, etc.)
- Category cards
- Interactive cards with hover states
- Cards in grid layouts

#### Form Section
Include working examples of:
- Text inputs
- Textareas
- Select dropdowns (with custom styling)
- Checkboxes and radios (if in source)
- File uploads
- Input groups
- Form validation states (if applicable)
- Complete form layout example

#### Layout Section
Demonstrate:
- Container widths
- Grid systems
- Multi-column layouts
- Responsive behavior examples

#### Component Sections
For EVERY component found in source files, create a demo section:
- Search bars
- Navigation menus
- Article lists
- Chat interfaces
- Status badges
- Tabs/Pills (if applicable)
- Modals/Dialogs (if applicable)
- Tables (if applicable)
- Pagination (if applicable)
- Breadcrumbs (if applicable)
- And any other unique components

#### Utility Classes Section
Demonstrate utility classes with before/after examples

### Styling for the Style Guide Itself

Create a clean, professional layout for the style guide:
```css
.demo-section {
    /* Section container styling */
}

.demo-header {
    /* Section header styling - make it distinctive */
}

.demo-content {
    /* Content area styling */
}

.color-swatch {
    /* Color display boxes */
}
```

### Footer
- Notes about class prefixes
- Link to design guidelines
- Version information (if applicable)

---

## Output Format

Provide both files as downloadable outputs:
1. `/mnt/user-data/outputs/design-guidelines-complete.md`
2. `/mnt/user-data/outputs/reference-styleguide-complete.html`

---

## Quality Checklist

Before completing, ensure:

### Design Guidelines (MD)
- [ ] All CSS variables extracted and documented
- [ ] Every component class has complete CSS code
- [ ] At least 3-5 usage examples per major component
- [ ] Typography scale is complete with all variants
- [ ] Responsive patterns documented
- [ ] Accessibility guidelines included
- [ ] Best practices section is actionable

### Reference Style Guide (HTML)
- [ ] File opens and displays correctly in browser
- [ ] All colors displayed with swatches and codes
- [ ] Every component from source files is demonstrated
- [ ] Interactive elements work (hover states visible)
- [ ] Forms are functional (inputs accept text, etc.)
- [ ] Layout is clean and organized
- [ ] Sections are clearly labeled
- [ ] Self-contained (no external dependencies)

---

## Additional Instructions

1. **Be Thorough**: Don't skip any components, even small ones
2. **Extract Patterns**: If you see a pattern repeated, create a documented component for it
3. **Maintain Consistency**: Use the same class naming conventions from the source
4. **Provide Context**: Explain WHEN and WHY to use each component
5. **Think Developer-First**: Make it easy to copy-paste and implement
6. **Include Edge Cases**: Show how components look with long text, empty states, etc.

---

## Example Usage

After receiving these documents, a developer should be able to:
1. Understand the entire design system philosophy
2. Find any component they need with working code
3. Copy-paste implementation examples
4. See visual examples of every component
5. Understand responsive behavior
6. Know accessibility requirements
7. Follow best practices for implementation

---

Begin by analyzing all attached HTML files, then create both comprehensive documents.
Claude beginning to analyze and create the design documentation

Claude didn’t just list colors and fonts like a paint chip catalog.

It created a complete design philosophy:

Example of the comprehensive design guidelines document showing the SoloLedger Glass Aurora Design System

Look at that structure—it’s like a love letter to your future self:

  • Design philosophy (the WHY behind your choices)
  • Design tokens (the WHAT of your system)
  • Typography system (how words should dance)
  • Component classes (the building blocks)
  • Utility classes (your Swiss Army knife)
  • Responsive patterns (because phones exist)
  • Animation guidelines (movement with meaning)
  • Usage examples (show, don’t just tell)
  • Accessibility guidelines (because everyone deserves pretty apps)
  • Best practices (learned the hard way so you don’t have to)

This isn’t documentation.

This is your design DNA.

The interactive reference was even better:

Interactive reference style guide showing color palette with actual color swatches

Live examples! Real components! Interactive demos!

It’s like having a tiny designer living in your computer.

(But less expensive and doesn’t judge your font choices.)

.

.

.

Step 4: Package Your Magic Into a Claude Skill (5 Minutes to Immortality)

Here’s where we turn stone into gold. Or design into reusable superpower.

(Same thing, really.)

Still in Claude Web, I asked:

Asking Claude to use skill-creator to package the design system

Claude got it immediately:

Claude using the skill-creator skill to package the design system

Watch what’s happening—it’s like watching someone pack for a trip, but instead of forgetting their toothbrush, they remember everything:

  • Reading the skill-creator documentation
  • Understanding how to package design systems
  • Checking reference patterns
  • Organizing files with the care of Marie Kondo
Claude showing the skill packaging process

The result:

Final packaged skill with download link and contents description

Your skill package contains:

  • SKILL.md (~300 lines of pure implementation wisdom)
  • references/design-tokens.md (~1,900 lines of every design variable you’ll ever need)
  • assets/template.html (~1,200 lines of interactive component library goodness)

Everything Claude Code needs to apply your design system to ANY component. It’s like having a design degree in a ZIP file.

.

.

.

Step 5: Installation Is So Easy It Feels Like Cheating (2 Minutes)

I downloaded the skill and added it to my project:

Project structure showing the sololedger-glass-aurora skill in the .claude/skills folder

That’s it. That’s the installation process.

If you were expecting more steps, sorry to disappoint. Sometimes good things are simple.

(Unlike my relationship with CSS, which remains complicated.)

.

.

.

Step 6: Watch the Magic Happen (10 Minutes of Pure Satisfaction)

Back in Claude Code, I typed the magic words:

Invoking the skill in Claude Code

Claude recognized my skill immediately, like bumping into an old friend:

Claude Code asking permission to use the sololedger-glass-aurora skill

Then it went to work.

And friend, watching this is better than those satisfying pressure-washing videos:

Claude Code exploring the dashboard page and all its components

Claude Code wasn’t just slapping styles around like a drunk painter.

It was methodical. Thoughtful. It:

  • Read every component in the dashboard (getting to know the neighborhood)
  • Understood the existing structure (respecting what was there)
  • Mapped design patterns to components (matchmaking at its finest)
  • Applied the Glass Aurora system consistently (no component left behind)
Claude Code showing the summary of changes made to all components

The transformation touched everything:

  1. dashboard-client.tsx – Header, glass buttons, financial cards (the main stage)
  2. dashboard-filters-bar.tsx – Glass-card container, themed filters (the supporting cast)
  3. income-expense-chart-widget.tsx – Glass-card with gradient backgrounds (data, but make it fashion)
  4. category-breakdown-chart-widget.tsx – Theme-aware chart colors (coordination is key)
  5. accounts-overview-widget.tsx – Glass tooltips and grid layouts (the finishing touches)

Every. Single. Component.

Speaking the same design language.

Like a well-rehearsed choir instead of karaoke night at the dive bar.

The final redesigned dashboard in dark mode 1
The final redesigned dashboard in dark mode 2
The final redesigned dashboard in light mode 1

The transformation?

From “generic SaaS tool #47,293” to “wait, what app is that and where can I get it?”

From forgettable to memorable.

From IKEA furniture to custom-built beauty.

And here’s the kicker: I can now redesign any page in seconds.

Not minutes. Not hours. Seconds.

(Are you crying? I’m not crying. It’s just… very dusty in here.)

.

.

.

Why This Changes Everything (And I Mean Everything)

Let’s talk about what just happened, because it’s bigger than it looks:

  1. One design exploration session → 5 unique options to choose from
  2. One selected design → Complete design system automatically documented
  3. One Claude Skill → Infinite reusability across all your projects

Compare this to the traditional redesign process (aka the path of pain):

  • Week 1: Design exploration (and existential crisis)
  • Week 2: Component library building (and caffeine overdose)
  • Week 3: Implementation (and debugging nightmares)
  • Week 4: Consistency fixes (and more debugging)
  • Week 5: Documentation (just kidding, nobody documents)

This approach?

  • 30 minutes total
  • Perfect consistency
  • Reusable forever
  • Documentation included

But here’s what really gets me excited (and I don’t get excited about many things anymore—I’m old and tired):

The skill gets smarter over time.

  • Find a bug in the glass effect? Fix it once in the skill. Every project gets the update.
  • Want to add a new component pattern? Update the skill. It’s everywhere instantly.
  • Need to onboard a developer? Share the skill. They’re designing consistently from minute one.

Every improvement compounds.

It’s like investing in index funds, but for your design system. (That’s the most adult sentence I’ve ever written. I need to go lie down.)

.

.

.

The Benefits Nobody Mentions at Parties

Benefit #1: Design Consistency Without The Design Drama

You get enterprise-level design consistency without:

  • Figma (and its 47 comments per component)
  • Storybook (and its 3-hour setup process)
  • A design team (and their strong opinions about kerning)

Just you, your skill, and perfect consistency.

It’s beautiful.

Benefit #2: Instant Design Language That Actually Makes Sense

That 300-line SKILL.md?

It’s not just documentation. It’s your design philosophy, your patterns, your principles—all captured automatically.

It’s like having a tiny design consultant living in your codebase, but one that never sends invoices.

Benefit #3: Version Control for Visual Design

Your design system is now code. Which means:

  • Git trackable (see what changed and when)
  • PR reviewable (catch issues before they ship)
  • Rollback-able (when that neon green seemed like a good idea at 3 AM)

It’s version control for visuals.

The future is now, friend.

Benefit #4: Team Scalability Without the Scaling Pains

New developer joins the team?

Old way: “Here’s our 47-page design guide. Good luck!”

New way: “Use the sololedger-glass-aurora skill.”

Done.

They’re designing consistently from day one.

No training montage required.

Benefit #5: Professional Client Deliverables

That skill package? It’s also professional documentation you can hand to clients.

“Here’s our complete design system.”

Hands over ZIP file

Client is impressed

You look like a genius

(You ARE a genius, but now you have proof.)

.

.

.

Your Turn: From Generic to Gorgeous in 30 Minutes

Ready?

Here’s your recipe for design transformation:

Step 1: Pick Your Victim (I mean, page)

Don’t try to redesign everything at once. (That way lies madness.)

Start with one page. Dashboard, landing page, settings—doesn’t matter.

Pick the one that makes you saddest.

Step 2: Generate Your Options

Use Claude Code with the frontend-design skill. Ask for 5 variants.

Be specific about the vibe you want. “Make it pretty” is not specific. “Make it look like Spotify met a disco ball at a Nordic design conference” is specific.

(Also intriguing.)

Step 3: Fall in Love (Then Refine)

Choose your favorite. Get both theme versions. Make sure it sparks joy. (Yes, I’m Marie Kondo-ing your design system. Deal with it.)

Step 4: Birth Your Skill

Switch to Claude Web. Attach the HTML files. Generate comprehensive documentation. Package with skill-creator.

Watch your design system become immortal.

Step 5: Deploy Your Beauty Everywhere

Add to your project. Use the skill to redesign everything.

Feel that? That’s the satisfaction of consistency. It’s better than finding matching socks.

Step 6: Make It Better (Forever)

Your skill isn’t frozen in carbonite. Improve it. Expand it. Share it.

Every enhancement makes every project better.

It’s compound interest for your eyeballs.

.

.

.

The Real Talk Conclusion

I spent years accepting generic designs.

Not because I liked them.

But because custom design seemed too expensive—not in money, but in time.

Time I didn’t have.

Energy I couldn’t spare.

Mental bandwidth already allocated to remembering my passwords.

But what if custom design took 30 minutes instead of 30 days?

What if consistency was automatic instead of aspirational?

What if your design system could teach itself to any AI that needed it?

That’s not the future, friend. That’s what I just showed you.

My accounting app no longer looks like everyone else’s. It has personality. It has presence. It has that glass aurora glow that makes even tax calculations feel slightly magical. (Slightly. Let’s not get carried away—they’re still tax calculations.)

And it took less time than watching a Netflix episode.

(A short one. Not one of those prestige drama episodes that’s basically a movie.)

.

.

.

Here’s My Challenge to You

Open that project with the generic UI. You know the one. The one you show people quickly while saying “it’s still in beta.”

Give it 30 minutes. Just 30.

Generate your variants. Pick your favorite. Make it a skill.

Watch as your entire app transforms from “functional” to “fascinating.”

Because life’s too short for boring dashboards, friend.

And your apps deserve to be as unique as you are.

(Even if you’re not that unique. I’m kidding! You’re totally unique. Your mother was right.)

What design will you capture as a Claude Skill today?

Go. Create. Make the internet prettier.

We’re all counting on you.

(No pressure.)


P.S. – That glass aurora design I fell in love with? I’ve now applied it to three different projects. Same skill. Same consistency. Same “ooh, what’s that?” reaction from everyone who sees it. Total time to redesign all three: under an hour. The old way would have taken weeks, and they all would have looked slightly different, like siblings who don’t quite look related.

P.P.S. – Want to create your own design skills but feeling overwhelmed? Start here: Download the frontend-design skill from GitHub. Ask for design variants. Pick your favorite. Watch the magic happen. Then write me a thank-you note. Or don’t. I’ll just be here, admiring my glass aurora dashboard and feeling quietly superior to everyone still using default Bootstrap.

P.P.P.S. – Yes, I know that’s too many P.S.’s. But you’re still reading, aren’t you? See? Sometimes breaking the rules works. Just like breaking free from generic design. Full circle, friend. Full. Circle.