Skip to main content

Asperger Blog Series — Post 1 Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: Ship batch 1 of the Nina Asperger diary blog series — new pseudonymous author, two new tags, voice guide, and post 1 ("Diagnosis day"), all building cleanly on the Docusaurus site.

Architecture: Pure content additions to the existing Docusaurus 3.9.2 blog. Two YAML config appends (authors.yml, tags.yml), two new markdown files (post 1 + voice guide). Avatar already present at static/img/nina.png. No code changes, no plugin changes, no React component edits. Verification = npm run build + manual voice spot-check against the spec's §5 rules.

Tech Stack: Docusaurus 3.9.2, React 19, TypeScript 5.6, MDX, YAML. Node ≥20.

Spec reference: docs/superpowers/specs/2026-04-30-asperger-blog-series-design.md (commit bf9b79a).


File Structure

FileOpResponsibility
blog/authors.ymlappendRegister nina81 author (handle, display name, avatar, page flag)
blog/tags.ymlappendRegister diary and asperger tags
docs/superpowers/specs/nina-voice-guide.mdcreateStandalone voice rules + post backlog. Durable reference for future Nina posts so the brainstorming spec is not reread each time.
blog/2026-04-30-diagnosis-day.mdcreatePost 1 of the series. Diary register, ~700-1100 words, references PDF implicitly.

Out of scope this plan: posts 2-8 (drip-ship cadence — written in later plans after voice calibration on post 1).


Task 1: Add nina81 author

Files:

  • Modify: blog/authors.yml

  • Step 1: Read current blog/authors.yml

Run: cat blog/authors.yml Expected: shows the existing gl0bal01 block only.

  • Step 2: Append nina81 block

Append this exact text to the end of blog/authors.yml (preserve trailing newline):

nina81:
name: Nina
title: Parent
url: /blog/authors/nina81
image_url: /img/nina.png
page: true
socials: {}
  • Step 3: Verify YAML parses

Run: node -e "console.log(require('js-yaml').load(require('fs').readFileSync('blog/authors.yml','utf8')))" Expected: object with two top-level keys gl0bal01 and nina81. No parse error.

If js-yaml is not installed locally, fall back to: Run: python3 -c "import yaml,sys;print(list(yaml.safe_load(open('blog/authors.yml')).keys()))" Expected: ['gl0bal01', 'nina81']

  • Step 4: Verify avatar exists

Run: ls -la static/img/nina.png Expected: file exists, ~14.7 KB.

  • Step 5: Commit
git add blog/authors.yml
git commit -m "Add nina81 author entry"

Task 2: Add diary and asperger tags

Files:

  • Modify: blog/tags.yml

  • Step 1: Read current blog/tags.yml

Run: tail -5 blog/tags.yml Expected: shows the last existing tag block (pentesting: ending around line 79).

  • Step 2: Append diary and asperger blocks

Append this exact text to the end of blog/tags.yml (preserve trailing newline):

diary:
label: Diary
description: Personal essays and lived-experience notes
permalink: /diary

asperger:
label: Asperger
description: Asperger syndrome — symptoms, diagnosis, daily life
permalink: /asperger
  • Step 3: Verify YAML parses and contains both new tags

Run: python3 -c "import yaml;d=yaml.safe_load(open('blog/tags.yml'));print('diary' in d, 'asperger' in d, len(d))" Expected: True True N where N is previous count + 2.

  • Step 4: Commit
git add blog/tags.yml
git commit -m "Add diary and asperger tags"

Task 3: Create Nina voice guide

Files:

  • Create: docs/superpowers/specs/nina-voice-guide.md

This is a durable reference extracted from §5 + §7 of the design spec. Future posts in the series read this single short doc instead of the long brainstorming spec.

  • Step 1: Create the file with this exact content
# Nina voice guide

Reference for all blog posts authored by `nina81`. Diverges from the site-wide Korben register documented in the project root `CLAUDE.md`. Applies only to Nina.

## Use

- First person singular and plural ("I", "we"). Sparse "you".
- Short sentences. Fragments OK. Quiet over performative.
- Concrete sensory detail over adjectives — turned inward (smell of CRA waiting room, weight of paperwork in lap), not outward.
- Kids: `le grand` (Asperger, older) + `le petit` (TDAH, younger). Never named.
- Swearing OK when earned, sparing. French swears welcome (`putain`, `merde`) inside otherwise-EN text — registers as voice tic, not affectation.
- Mix EN narrative + FR specific terms (CRA, AESH, TDAH, orthophoniste, IME, MDPH) — italicize first occurrence in a post, define inline briefly.

## Avoid

- "You" address as default (kept for rare direct moments only)
- Korben interjections ("anyway", "trust me", "and boom") — wrong register for this voice
- Marketing close, three-bullet recap, emoji
- Clinical voice ("studies show", "the literature suggests")
- Advice voice ("you should", "make sure to")
- Inspirational close ("we got through it")
- Inventing claims about the source PDF — only quote what is actually there
- Naming actual people (teachers, doctors, AESH workers) — use role only

## Source PDF citation

Cite the Marin Bernard PDF (`Symptomatique-du-syndrome-dAsperger-chez-lenfant.pdf`) only when a post genuinely leans on a specific section. No standing footer "source: PDF" on every post. Some posts cite zero sources — diary register, not literature review. When cited, link once inline at the relevant beat, not as boilerplate.

## Closer pattern

One observation. No resolution. Diary doesn't tie bows.

## Frontmatter template

```yaml
---
slug: <kebab-case-slug>
title: "<Title>"
authors: nina81
tags: [diary, asperger]
keywords: [<5-12 SEO keywords>]
description: "<1-2 sentence hook for blog index and meta description>"
date: YYYY-MM-DD
---

Default tags [diary, asperger] minimum. Situational extras per-post: school, sensory, siblings, family, etc. Add to blog/tags.yml only on second use.

Word count

Diary posts: 700-1100 words. No code blocks. <!-- truncate --> after opener so the blog index excerpt cuts at the first emotional anchor.

Backlog

#Working titleAnchor PDF section (informs only)Notes
1Diagnosis dayComplexité du diagnostic (implicit)SHIPPED — voice prototype
2The CRA waiting listComplexité du diagnosticMonths of nothing, then strict protocol
3Flunch meltdownSensibilité (auditive, visuelle)Sensory overload at FR cafeteria chain. Specific scene.
4The literal kidLangage — Littéralité"Break a leg" landing wrong. PDF cite earned here.
5Imitation as camouflageAdaptation des enfants (intro)The masking trick PDF describes. PDF cite earned.
6Aspie + TDAH brothersnoneOpposite operating systems under one roof. No PDF cite.
7Empathy mythbusterFonctions sociales — EmpathieHe feels everything, just doesn't show it the way you expect. PDF cite earned.
8The proof / It wasn't bad parentingnoneDiagnosis as vindication against family blame. Possible extra tag: family.

- [ ] **Step 2: Verify file created**

Run: `wc -l docs/superpowers/specs/nina-voice-guide.md`
Expected: ~70 lines.

- [ ] **Step 3: Commit**

```bash
git add docs/superpowers/specs/nina-voice-guide.md
git commit -m "Add Nina voice guide"

Task 4: Write post 1 — "Diagnosis day"

Files:

  • Create: blog/2026-04-30-diagnosis-day.md

This is the voice prototype. After it ships, the user reviews voice fit before backlog posts are written.

Beats per spec §6.3:

  1. Opener — physical detail of CRA room / verdict moment
  2. Wrong labels we'd collected (précoce, anxieux, TOC)
  3. The conversation — psychiatrist's words, "moderate"
  4. Family-blame beat (2-3 sentences max — full treatment in backlog post #8)
  5. Car ride home — silence, paperwork on lap, le grand asking about lunch
  6. That night — bedtime routine reread
  7. Closer — one observation, no resolution
  • Step 1: Create the file with this exact content
---
slug: diagnosis-day
title: "Diagnosis day"
authors: nina81
tags: [diary, asperger]
keywords: [asperger diagnosis, CRA, autism spectrum, parent perspective, neurodivergent kids, diagnosis day, lived experience]
description: "What we walked into the CRA believing. What we walked out carrying. The day a label became real, and what shifted at home that night."
date: 2026-04-30
---

The waiting room had that specific smell of public-sector linoleum and lukewarm coffee. We'd been called twice. The second time the receptionist used my full name and I felt, briefly, like I was at a notary's office. Which is what it was, in a way. A signing.

The psychiatrist was younger than I expected. She had a folder with `le grand`'s name on it and a stack of pages I recognised — three weeks of forms, the *orthophoniste*'s report, the Conners scale, drawings.

"Oui," she said. "Asperger. *Modéré*."

That was the verdict. Just the word, then a clarification — *modéré* meant the impact on his social functioning was real but he could still attend regular school with support. She kept talking. I stopped catching specific sentences. I caught my own breathing instead, the way you catch yourself in a mirror you weren't expecting.

<!-- truncate -->

We had walked in there carrying every bad guess we'd been handed for six years.

Intellectually *précoce* — the first label, from a school psychologist who saw the vocabulary at five and stopped looking. Anxious — the second, from a pediatrician who heard about the school refusals and wrote it down. TOC tendencies — the third, from a private psychologist who fixated on the lining-up and missed the rest. Each label landed on him like a coat that didn't quite fit. We walked him around in it for a while, then took it off, then tried the next one.

The *CRA* — the Centre de Ressources Autisme that handles formal diagnostics in our region — had taken nine months from the initial referral. Nine months of paperwork and observation slots and questionnaires that asked the same thing six different ways. The psychiatrist explained that the protocol was strict for a reason. A child cannot be diagnosed Asperger unless they present the entire constellation of symptoms. Otherwise it's something else, and the label is wrong. The strictness, she said, was protection.

I nodded like I understood. I had read this in three books. It still hit differently when she said it across a desk with my son's name on the folder.

The thing nobody tells you is that the diagnosis is also a piece of paper for other people. Not for him. Not for us. For the aunt who said we were too soft. For the mother-in-law who said it was screen time. For the neighbour who, once, in front of me, said her own kids would never. *Putain*. Six years of unsolicited verdicts, and now a stamped page that ended the conversation. I felt the relief and the bitterness arriving at the same address, and I did not know which one to tip.

The car ride home was quiet. `Le grand` sat in the back with the folder on his lap because he wanted to hold it. He didn't ask what it said. He asked if we could go to Flunch for lunch, because the trays make a specific noise he likes, and because Wednesday was the day they had the *frites* he prefers. I said yes. My husband drove. The radio was off. I kept rereading the same sentence in the diagnosis summary — *présente l'ensemble des critères* — and putting the page down, and picking it up, and rereading it.

That night I sat in `le grand`'s room while he did his bedtime routine. He has a routine. He has always had a routine. The order is: pyjamas, water, two pages of his current book, lamp off, door open exactly the width of his hand. For years I had thought of this as a quirk. A cute one, mostly. Sometimes a frustrating one when we travelled and the door geometry was wrong.

That night I watched him do it and saw the routine differently. Not as a quirk. As scaffolding. As the thing that lets him close his eyes in a world that, for him, runs about four notches too loud and too bright. I had been moving the cereal box for years and apologising when I forgot. Now I understood I had not been failing at consistency. I had been failing at scaffolding.

He asked me if I was sad. I said no, just tired. He said okay and turned to the wall.

I sat there until the door was the right width.
  • Step 2: Verify word count

Run: wc -w blog/2026-04-30-diagnosis-day.md Expected: 720-1100 (frontmatter included; the prose body is in target range).

  • Step 3: Verify frontmatter parses

Run: python3 -c "import yaml,re;t=open('blog/2026-04-30-diagnosis-day.md').read();fm=re.match(r'---\n(.*?)\n---',t,re.S).group(1);d=yaml.safe_load(fm);print(d['authors'],d['tags'],d['date'])" Expected: nina81 ['diary', 'asperger'] 2026-04-30

  • Step 4: Voice spot-check (manual)

Re-read the post. Confirm against docs/superpowers/specs/nina-voice-guide.md:

  • "you" count ≤ 1 in body (the "the way you catch yourself in a mirror" line is the allowed one)
  • No advice phrasing ("you should", "make sure to")
  • No marketing close, no recap bullets, no emoji
  • No clinical phrasing
  • Closer = observation, no resolution
  • Kids referred to only as le grand (no name)
  • FR terms (orthophoniste, modéré, précoce, CRA, putain, frites, présente l'ensemble des critères) italicised on first occurrence and either obvious from context or defined inline

If any check fails, fix inline before committing.

  • Step 5: Commit
git add blog/2026-04-30-diagnosis-day.md
git commit -m "Add Nina diary post — Diagnosis day"

Task 5: Build verification

Files:

  • None changed. Verification only.

  • Step 1: Run TypeScript typecheck

Run: npm run typecheck Expected: exits 0, no TS errors. (No code changed, but confirms YAML edits did not break the build's typed config.)

  • Step 2: Run production build

Run: npm run build Expected: exits 0. Build log shows the new post under the blog plugin's generated output. No "broken link" warnings referencing nina81, /diary, /asperger, or diagnosis-day.

If the build fails on RSS plugin (memory), retry with: Run: NODE_OPTIONS=--max-old-space-size=4096 npm run build

  • Step 3: Spot-check generated routes

Run: find build/blog -maxdepth 2 -type d 2>/dev/null | grep -E "(authors/nina81|tags/(diary|asperger)|diagnosis-day)" | sort Expected output includes:

build/blog/authors/nina81
build/blog/diagnosis-day
build/blog/tags/asperger
build/blog/tags/diary

If any are missing, the YAML or frontmatter has a typo. Fix and rerun build.

  • Step 4: Spot-check rendered post HTML

Run: grep -c "le grand" build/blog/diagnosis-day/index.html Expected: ≥ 3 (the kid is referenced multiple times in the post).

Run: grep -o "Nina" build/blog/diagnosis-day/index.html | head -1 Expected: Nina (author byline rendered).

  • Step 5: No commit

Build artifacts (build/) are gitignored. Nothing to commit at this step.


Task 6: Optional local preview

Only if the user wants visual confirmation before merging.

Files:

  • None.

  • Step 1: Start preview server

Run: npm run serve Expected: server on http://localhost:3000 serving the production build from Task 5.

  • Step 2: Manually verify three URLs

  • http://localhost:3000/blog/diagnosis-day — post renders, avatar shows, title and frontmatter correct

  • http://localhost:3000/blog/authors/nina81 — author page renders with avatar and bio

  • http://localhost:3000/blog/tags/diary and /blog/tags/asperger — tag pages list the new post

  • Step 3: Stop server

Ctrl+C in the shell running npm run serve.


Self-review (run after writing this plan)

  1. Spec coverage: every section of 2026-04-30-asperger-blog-series-design.md:
    • §3 Author → Task 1 ✓
    • §4 Tags → Task 2 ✓
    • §5 Voice rules → Task 3 (extracted into voice guide) + Task 4 step 4 (spot-check) ✓
    • §6 Post 1 spec → Task 4 ✓
    • §7 Backlog → Task 3 (embedded in voice guide) ✓
    • §8 File ops → Tasks 1-4 ✓
    • §9 Out of scope → respected (no posts 2-8 here) ✓
    • §10 Verification → Task 5 ✓
  2. Placeholders: none. Every code block contains the exact content. Every command has expected output.
  3. Type consistency: YAML keys (nina81, diary, asperger) match across tasks 1, 2, 4 frontmatter. Path /img/nina.png matches verified file. Slug diagnosis-day matches frontmatter and Task 5 grep.
  4. Build/voice both verified: build via Task 5, voice via Task 4 step 4.

No gaps. Plan is ready.