Hello, World — Starting inkspell
Why I'm starting a public notebook, and what I hope to write about.
Every developer eventually starts a blog. Mine has been overdue for a few years.
The name inkspell felt right — something at the intersection of writing and magic, which is how good code feels when it finally comes together. A function that does exactly what it says, in exactly the space you’d hope, with no side effects you didn’t invite.
What this is
This isn’t a tutorial site. There are enough of those. This is a notebook — a place to think in public about things I find genuinely interesting:
- Systems design — how distributed systems fail, how they recover, why eventual consistency is both powerful and terrifying
- Language internals — what compilers do that we take for granted, how type systems make certain bugs structurally impossible
- Craft — the small decisions that separate code you’re proud of from code you apologize for in reviews
What this isn’t
A place for hot takes. I’m slow to form opinions and I’d like these posts to reflect that. If something here turns out to be wrong, I’ll update it — not delete it.
The setup
This blog is built with Astro, Tailwind CSS, and deploys as a fully static site. The source will be on GitHub eventually. Posts are Markdown files in a content collection; syntax highlighting is handled by Shiki with a dual light/dark theme.
// The entire "database" is just this:
const posts = await getCollection('blog', ({ data }) => !data.draft);
There’s something satisfying about a blog whose entire backend is a filesystem and a static build step.
More soon.
Hello, World — Starting inkspell
// Why I'm starting a public notebook, and what I hope to write about.
Every developer eventually starts a blog. Mine has been overdue for a few years.
The name inkspell felt right — something at the intersection of writing and magic, which is how good code feels when it finally comes together. A function that does exactly what it says, in exactly the space you’d hope, with no side effects you didn’t invite.
What this is
This isn’t a tutorial site. There are enough of those. This is a notebook — a place to think in public about things I find genuinely interesting:
- Systems design — how distributed systems fail, how they recover, why eventual consistency is both powerful and terrifying
- Language internals — what compilers do that we take for granted, how type systems make certain bugs structurally impossible
- Craft — the small decisions that separate code you’re proud of from code you apologize for in reviews
What this isn’t
A place for hot takes. I’m slow to form opinions and I’d like these posts to reflect that. If something here turns out to be wrong, I’ll update it — not delete it.
The setup
This blog is built with Astro, Tailwind CSS, and deploys as a fully static site. The source will be on GitHub eventually. Posts are Markdown files in a content collection; syntax highlighting is handled by Shiki with a dual light/dark theme.
// The entire "database" is just this:
const posts = await getCollection('blog', ({ data }) => !data.draft);
There’s something satisfying about a blog whose entire backend is a filesystem and a static build step.
More soon.
Hello, World — Starting inkspell
Why I'm starting a public notebook, and what I hope to write about.
Every developer eventually starts a blog. Mine has been overdue for a few years.
The name inkspell felt right — something at the intersection of writing and magic, which is how good code feels when it finally comes together. A function that does exactly what it says, in exactly the space you’d hope, with no side effects you didn’t invite.
What this is
This isn’t a tutorial site. There are enough of those. This is a notebook — a place to think in public about things I find genuinely interesting:
- Systems design — how distributed systems fail, how they recover, why eventual consistency is both powerful and terrifying
- Language internals — what compilers do that we take for granted, how type systems make certain bugs structurally impossible
- Craft — the small decisions that separate code you’re proud of from code you apologize for in reviews
What this isn’t
A place for hot takes. I’m slow to form opinions and I’d like these posts to reflect that. If something here turns out to be wrong, I’ll update it — not delete it.
The setup
This blog is built with Astro, Tailwind CSS, and deploys as a fully static site. The source will be on GitHub eventually. Posts are Markdown files in a content collection; syntax highlighting is handled by Shiki with a dual light/dark theme.
// The entire "database" is just this:
const posts = await getCollection('blog', ({ data }) => !data.draft);
There’s something satisfying about a blog whose entire backend is a filesystem and a static build step.
More soon.
Every developer eventually starts a blog. Mine has been overdue for a few years.
The name inkspell felt right — something at the intersection of writing and magic, which is how good code feels when it finally comes together. A function that does exactly what it says, in exactly the space you’d hope, with no side effects you didn’t invite.
What this is
This isn’t a tutorial site. There are enough of those. This is a notebook — a place to think in public about things I find genuinely interesting:
- Systems design — how distributed systems fail, how they recover, why eventual consistency is both powerful and terrifying
- Language internals — what compilers do that we take for granted, how type systems make certain bugs structurally impossible
- Craft — the small decisions that separate code you’re proud of from code you apologize for in reviews
What this isn’t
A place for hot takes. I’m slow to form opinions and I’d like these posts to reflect that. If something here turns out to be wrong, I’ll update it — not delete it.
The setup
This blog is built with Astro, Tailwind CSS, and deploys as a fully static site. The source will be on GitHub eventually. Posts are Markdown files in a content collection; syntax highlighting is handled by Shiki with a dual light/dark theme.
// The entire "database" is just this:
const posts = await getCollection('blog', ({ data }) => !data.draft);
There’s something satisfying about a blog whose entire backend is a filesystem and a static build step.
More soon.
Hello, World — Starting inkspell
Why I'm starting a public notebook, and what I hope to write about.
Every developer eventually starts a blog. Mine has been overdue for a few years.
The name inkspell felt right — something at the intersection of writing and magic, which is how good code feels when it finally comes together. A function that does exactly what it says, in exactly the space you’d hope, with no side effects you didn’t invite.
What this is
This isn’t a tutorial site. There are enough of those. This is a notebook — a place to think in public about things I find genuinely interesting:
- Systems design — how distributed systems fail, how they recover, why eventual consistency is both powerful and terrifying
- Language internals — what compilers do that we take for granted, how type systems make certain bugs structurally impossible
- Craft — the small decisions that separate code you’re proud of from code you apologize for in reviews
What this isn’t
A place for hot takes. I’m slow to form opinions and I’d like these posts to reflect that. If something here turns out to be wrong, I’ll update it — not delete it.
The setup
This blog is built with Astro, Tailwind CSS, and deploys as a fully static site. The source will be on GitHub eventually. Posts are Markdown files in a content collection; syntax highlighting is handled by Shiki with a dual light/dark theme.
// The entire "database" is just this:
const posts = await getCollection('blog', ({ data }) => !data.draft);
There’s something satisfying about a blog whose entire backend is a filesystem and a static build step.
More soon.