Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 1 addition & 17 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,4 @@ If anything in this file conflicts with `AGENTS.md`, this file takes precedence.

## Writing

If you write or review prose for posts follow these rules:

### Oxford comma

Always use the Oxford comma: "music, surfing, and living."

### Em dash

No spaces around em dashes: "Her book—published in March—is excellent."

### Attribution dash

Use an en dash for attributions: "– Miles Davis"

### Title case

Post titles use title case. Capitalize nouns, verbs, adjectives, and adverbs. Lowercase articles, conjunctions, and short prepositions (a, an, the, and, but, or, for, in, of, on, to). Always capitalize the first and last word: "The Quiet Activism of Living Pleasantly"
When you write or review prose for posts, follow `STYLE.md`.
114 changes: 114 additions & 0 deletions STYLE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# Style Guide

How posts on michaelnisi.com are written: typography, voice, structure, and form.

---

## Typography

### Oxford comma

Always use the Oxford comma: "music, surfing, and living."

### Em dash

No spaces around em dashes: "Her book—published in March—is excellent."

### Apostrophes

Use only curly apostrophes, never straight ones: "It’s the note you play afterwards."

### Attribution dash

Use an en dash for attributions: "– Miles Davis"

### Title case

Post titles use title case. Capitalize nouns, verbs, adjectives, and adverbs. Lowercase articles, conjunctions, and short prepositions (a, an, the, and, but, or, for, in, of, on, to). Always capitalize the first and last word: "The Quiet Activism of Living Pleasantly"

## Voice

- **First person, sparingly.** "I" appears when there is a personal stake—an anecdote, a recommendation, an opinion. Otherwise, the prose speaks directly to the reader as "you."
- **Calm and certain.** State things plainly. No hedging, no hype, no exclamation marks. "Constraint was never the enemy. It was always the condition."
- **Warm, not cute.** Humor is dry and understated: "This website is where I put things I feel like sharing—and occasionally embarrass myself."
- **Generous to others.** When quoting someone, credit them with an adjective or a clause that shows why they are worth reading: "Doug Gregor opens his brilliant Swift Craft 2025 talk…", "I’ve been appreciating Matteo Collina since early Node.js days."
- **Grounded in practice.** Abstract ideas are anchored in concrete experience: longboard surfing, jazz, Swift code, working with Claude. Craft, attention, and judgment are recurring themes.

## Post Types

### Quote

The most common form. A blockquote followed by an attribution line, nothing else.

```markdown
# The Quiet Activism of Living Pleasantly

> Because think of the amazing people that you see every day. …

– Jon Stewart to David Remnick at the [New Yorker festival](https://…)
```

### Quote With Commentary

A blockquote followed by one or two sentences of context or response. The commentary names the author in prose and carries the link.

```markdown
Lorin Hochstein relaxes the AI conversation by [adding perspective](https://…).
```

Keep it short. The quote does the work; the commentary frames it, often with a light twist: "Fittingly, the warning reads like it could have been written by a model."

### Essay

Longer pieces (300–850 words) built on a single idea.

- **Open with an epigraph**—a blockquote and an en-dash attribution.
- **Reframe the epigraph** in the first paragraph, then move to the present: "Gide wrote that a century ago, but it lands differently now."
- **One idea per paragraph.** Paragraphs are short. Single-sentence paragraphs mark turns: "The constraint hasn’t disappeared. It’s migrated."
- **Carry a metaphor through.** Surfing, music, or another physical practice is developed across paragraphs, not dropped in once.
- **End short.** The last line is brief, often a fragment, and echoes the title or the opening: "Just scale." "Everything depends on how you keep moving." "The window narrows because no one noticed it was moving."

### Code

Code can be the whole post. A fenced block with a language tag, followed by a single sentence explaining why it matters, with a link to the source.

## Sentences

- **Vary rhythm.** Follow a long, layered sentence with a short one. Fragments are welcome: "Infinite scroll." "Clean. No judgment in it."
- **Use contrast.** Many key lines turn on a pair: "Not wrong. Not bad. Just… contained." "They’re brilliant at structure and terrible at continuity." "Abundance promised freedom and delivered paralysis."
- **Use em dashes** for asides and pivots—they are a signature of this site.
- **Use triplets.** Lists of three give a line its cadence: "music, surfing, and living."
- **Prefer plain words.** Say "use," not "leverage." Technical terms are fine when precise.

## Titles

- Title case, per Typography.
- Short and declarative, or a phrase lifted from the quote: "Ready or Not," "LLMs Are Savants," "Constraint Was Never the Enemy."
- "On …" is used for reflective pieces: "On the Next Move," "On Progressive Disclosure in Swift."
- Questions are rare but allowed: "What Drives You Nuts?"

## Formatting

- **One `#` heading per post**, the title. Essays run without subheadings.
- **Links go inline on meaningful words**—"[talk]", "[adding perspective]", a publication name—not on "click here." A bare "[here]" is acceptable in a short commentary line.
- **Italics** for book and work titles (*Tractatus Logico-Philosophicus*, *Universal Principles of Design*) and for occasional emphasis on a single word (*make*, *this*).
- **Quotes in their original language** are fine; give a translation or paraphrase right after: "Art is born of constraints, lives through struggle, dies of liberty."
- **Bold** is not used in posts.

## Attribution

- Standalone attribution: the name on its own line, after an en dash. Add context after a comma when useful.
- `– Miles Davis`
- `– Ludwig Wittgenstein, *Tractatus Logico-Philosophicus*`
- `– Liane Finck, who drew the cover of the August 2025 issue of [The New York Review of Books](https://…)`
- In-prose attribution: name the person, their role if helpful, and link the source: "Mustafa Suleyman, the British AI entrepreneur who runs Microsoft AI, [cautions](https://…) against…"

## Checklist

- [ ] Title in title case
- [ ] Oxford commas
- [ ] Em dashes without spaces
- [ ] Curly apostrophes only
- [ ] En dash for attributions
- [ ] Source linked
- [ ] Last line earns its place
2 changes: 1 addition & 1 deletion Sources/App/Partials/now.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

*Updated August 1st, 2026, from Stenbjerg, Denmark.*

Endless autumn, that's the summer in Thy, and I love every minute of it. Returning to a place that feels like home has a soothing kind of beauty. Meeting old and new friends, experiencing familiar places from a matured perspective.
Endless autumn, that’s the summer in Thy, and I love every minute of it. Returning to a place that feels like home has a soothing kind of beauty. Meeting old and new friends, experiencing familiar places from a matured perspective.

I spend my days working at [Block65](https://block65.dk/) in Hanstholm. The combination of gym, co-working space, and community—500m from two of my favorite surf spots, Fakir and Fisken—could not be more inspiring.
2 changes: 1 addition & 1 deletion Sources/App/Partials/posts/2025-10-03-brain.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Brain Rot Dot Com

Pay attention to [The Sirens' Call](https://sirenscallbook.com) by Chris Hayes.
Pay attention to [The Sirens’ Call](https://sirenscallbook.com) by Chris Hayes.

![image_column_one](https://res.cloudinary.com/duiiv2f8o/image/upload/ar_4:2,c_auto,g_north,w_1000/IMG_3915_ohupo4 "Example Image")

Expand Down
2 changes: 1 addition & 1 deletion Sources/App/Partials/posts/2025-10-09-swift.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ struct Image {
}
```

By running async functions in the caller's execution context, concurrency is more approachable now with [Swift 6.2](https://www.swift.org/blog/swift-6.2-released/).
By running async functions in the caller’s execution context, concurrency is more approachable now with [Swift 6.2](https://www.swift.org/blog/swift-6.2-released/).
2 changes: 1 addition & 1 deletion Sources/App/Partials/posts/2025-11-09-activism.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# The Quiet Activism of Living Pleasantly

> Because think of the amazing people that you see every day. Think of the quiet activism of living pleasantly. There's more good than bad. I always will believe that. I always will believe that the odds are in our favor.
> Because think of the amazing people that you see every day. Think of the quiet activism of living pleasantly. There’s more good than bad. I always will believe that. I always will believe that the odds are in our favor.

– Jon Stewart to David Remnick at the [New Yorker festival](https://www.newyorker.com/video/watch/the-new-yorker-festival-jon-stewart-talks-with-david-remnick-2025-10-31)
4 changes: 2 additions & 2 deletions Sources/App/Partials/posts/2025-12-07-mistakes.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# On the Next Move

> It's not the note you play that's the wrong note—it's the note you play afterwards that makes it right or wrong.
> It’s not the note you play that’s the wrong note—it’s the note you play afterwards that makes it right or wrong.

– Miles Davis

Herbie Hancock shares this [anecdote](https://youtu.be/C-GrRIgdmW8)

In music, as in life, a single moment rarely defines anything. What matters is the movement that follows. A step that feels misplaced, a choice that seems off, a hesitation that interrupts the rhythm—none of these are final. Meaning is created in the continuation, in how you choose to respond to what just happened. What we call a “mistake” becomes part of the texture once we treat it as material rather than failure.

Longboard surfing works exactly the same way. You cross-step, but maybe you plant your foot a little too far inside, or the rail catches earlier than expected. The board wobbles. For a split second it feels wrong—but the wave hasn't judged you yet. What decides everything is what follows: how you adjust, how you shift your weight, how the line evolves. A misstep isn’t the problem; refusing to flow through it is. Good longboarding isn't about perfection—it's about recovering with style, using the unexpected to guide the next move.
Longboard surfing works exactly the same way. You cross-step, but maybe you plant your foot a little too far inside, or the rail catches earlier than expected. The board wobbles. For a split second it feels wrong—but the wave hasn’t judged you yet. What decides everything is what follows: how you adjust, how you shift your weight, how the line evolves. A misstep isn’t the problem; refusing to flow through it is. Good longboarding isn’t about perfection—it’s about recovering with style, using the unexpected to guide the next move.

Life, like a wave, doesn’t freeze on your mistakes. It keeps unfolding, giving you the chance to respond, reinterpret, and turn tension into direction. The art lies in staying open enough to make the next move meaningful. A wrong step only becomes wrong if you stop. If you keep moving, it becomes part of the story, part of the rhythm, part of the line you’re drawing through the world.

Expand Down
4 changes: 2 additions & 2 deletions Sources/App/Partials/posts/2026-02-18-code.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

> a generation of developers skipping learning and just prompting AI, leaving us with critical systems nobody understands.

I've been appreciating Matteo Collina since early Node.js days, [here](https://adventures.nodeland.dev/archive/yes-learning-to-code-is-still-valuable/) he gives a cohesive summary of his recent thoughts about AI and software development.
I’ve been appreciating Matteo Collina since early Node.js days, [here](https://adventures.nodeland.dev/archive/yes-learning-to-code-is-still-valuable/) he gives a cohesive summary of his recent thoughts about AI and software development.

If you're making decisions about AI tooling in your organization, read this. I could not have said it any better.
If you’re making decisions about AI tooling in your organization, read this. I could not have said it any better.
12 changes: 6 additions & 6 deletions Sources/App/Partials/posts/2026-02-28-savants.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# LLMs Are Savants

> It's like having a savant colleague who can solve differential equations in their head but forgets where they parked their car.
> It’s like having a savant colleague who can solve differential equations in their head but forgets where they parked their car.

– [Claude](https://claude.ai/)

I just watched Claude make the same mistake three times in five minutes. I was updating my /now page, mentioning that Xcode 26.3 finally made agentic coding possible. Claude "corrected" it to Xcode 16.3, assuming I'd made a typo. I fixed it back to 26.3. Claude apologized and changed it to 16.3 again. I explained that Apple switched to year-based versioning in 2026. Claude understood, fixed it back to 26.3, then immediately asked me what typo I'd introduced.
I just watched Claude make the same mistake three times in five minutes. I was updating my /now page, mentioning that Xcode 26.3 finally made agentic coding possible. Claude "corrected" it to Xcode 16.3, assuming I’d made a typo. I fixed it back to 26.3. Claude apologized and changed it to 16.3 again. I explained that Apple switched to year-based versioning in 2026. Claude understood, fixed it back to 26.3, then immediately asked me what typo I’d introduced.

The thing is, I don't care. While Claude was having this small cognitive crisis, it had already helped me implement a complete sitemap.xml endpoint with proper ETag caching, fix Makefile portability issues, and refine the prose on my now page. The version number confusion was annoying, but it didn't matter because Claude isn't my memory—it's my encyclopedic technical reference and code generator.
The thing is, I don’t care. While Claude was having this small cognitive crisis, it had already helped me implement a complete sitemap.xml endpoint with proper ETag caching, fix Makefile portability issues, and refine the prose on my now page. The version number confusion was annoying, but it didn’t matter because Claude isn’t my memory—it’s my encyclopedic technical reference and code generator.

This savant quality is precisely what makes LLMs so useful for coding. You don't need them to remember conversational context perfectly. You need them to generate correct Swift concurrency code, understand REST semantics, follow architectural patterns, and recall obscure API details. They're brilliant at structure and terrible at continuity.
This savant quality is precisely what makes LLMs so useful for coding. You don’t need them to remember conversational context perfectly. You need them to generate correct Swift concurrency code, understand REST semantics, follow architectural patterns, and recall obscure API details. They’re brilliant at structure and terrible at continuity.

The division of labor is clear: the human provides sanity, continuity, and judgment. The LLM provides encyclopedic technical knowledge and execution. It's a partnership where both parties contribute what they're actually good at. You stop expecting the AI to "understand" you and start treating it like what it is—a savant colleague who's invaluable despite (or because of) its limitations.
The division of labor is clear: the human provides sanity, continuity, and judgment. The LLM provides encyclopedic technical knowledge and execution. It’s a partnership where both parties contribute what they’re actually good at. You stop expecting the AI to "understand" you and start treating it like what it is—a savant colleague who’s invaluable despite (or because of) its limitations.

The future of coding isn't about AI replacing developers. It's about developers learning to work with savants.
The future of coding isn’t about AI replacing developers. It’s about developers learning to work with savants.

14 changes: 7 additions & 7 deletions Sources/App/Partials/posts/2026-03-08-ready.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
# Ready or Not

> Ready or not, here I come / you can't hide / gonna find you / and take it slowly / and make you want me
> Ready or not, here I come / you can’t hide / gonna find you / and take it slowly / and make you want me

– Fugees

There's something the ocean teaches that no classroom can: you cannot negotiate with a wave.
There’s something the ocean teaches that no classroom can: you cannot negotiate with a wave.

You can read it, anticipate it, position yourself for it—but you cannot rush it, and you cannot hold it back. The wave arrives on its own terms, shaped by storms thousands of miles away, by seafloor topography. Your job is simply to be ready when it comes.

This is a different kind of patience than waiting. Waiting is passive—you sit somewhere and endure until time passes. What the water asks for is active stillness: fully present, reading the horizon, feeling the current, neither grasping nor checked out. The surfer who paddles frantically for every lump on the water catches nothing. The one who waits too long, always second-guessing, watches the best sets roll through unridden. The sweet spot is a state of relaxed readiness—attentive without tension.

Timing, when it comes, isn't really a decision you make. It's more like a recognition. The wave and the moment align, and something in your body knows before your mind does. You commit. That commitment—unhesitating, full—is what transforms a lump of water into a ride.
Timing, when it comes, isn’t really a decision you make. It’s more like a recognition. The wave and the moment align, and something in your body knows before your mind does. You commit. That commitment—unhesitating, full—is what transforms a lump of water into a ride.

Nobody talks about positioning. Because current and wind make it so hard to stay in the right place. You can do everything right—read the swell, time your paddle, stay present—and still find yourself twenty meters out of position because something invisible moved you there while you were waiting. You're never as fixed as you think you are. The ocean is moving you even when you're sitting still.
Nobody talks about positioning. Because current and wind make it so hard to stay in the right place. You can do everything right—read the swell, time your paddle, stay present—and still find yourself twenty meters out of position because something invisible moved you there while you were waiting. You’re never as fixed as you think you are. The ocean is moving you even when you’re sitting still.

Miss your positioning, watch it peel perfectly down the line—and you want it in a way that's almost painful. The wave doesn't need you. You need it. That longing is what sharpens your reading of the horizon, what gets you up before dawn, what keeps you honest.
Miss your positioning, watch it peel perfectly down the line—and you want it in a way that’s almost painful. The wave doesn’t need you. You need it. That longing is what sharpens your reading of the horizon, what gets you up before dawn, what keeps you honest.

And yet even desire and discipline and presence aren't enough to fully master this. The ocean doesn't know you're there. It's not testing you, not indifferent to you in any meaningful way—you're just not part of its calculation at all. A tiny human on a plank, recalibrating against forces that have been running since long before humans existed and will keep running long after.
And yet even desire and discipline and presence aren’t enough to fully master this. The ocean doesn’t know you’re there. It’s not testing you, not indifferent to you in any meaningful way—you’re just not part of its calculation at all. A tiny human on a plank, recalibrating against forces that have been running since long before humans existed and will keep running long after.

Being put in your place by something that doesn't even notice you—that's a very particular kind of humbling. Clean. No judgment in it.
Being put in your place by something that doesn’t even notice you—that’s a very particular kind of humbling. Clean. No judgment in it.

Just scale.
Loading
Loading