Heading 1 — The Quick Brown Fox
A lead paragraph to set the measure. This is what body copy looks like at the default size, with bold text, italic text, bold italic, strikethrough, inline code, and a regular link mixed in. Typography should feel calm enough to read a thousand words of it.
Heading 2 — Sentence Rhythm
Another paragraph so we can judge the space between blocks. The gap between two paragraphs matters more than almost anything else on a reading page.
Heading 3 — Subsection
Text under a level-three heading.
Heading 4 — Minor
Text under a level-four heading.
Heading 5
Heading 6
Blockquotes
A single-line blockquote. Short, quotable, and it should feel distinct from body copy without shouting.
A multi-paragraph blockquote. The first paragraph sets up the idea and runs long enough to wrap onto a second line so we can check the left rule and the leading.
The second paragraph continues the thought. Both paragraphs should share one continuous rule down the left edge.
Blockquotes can contain other things too — a link, some
inline code, and bold text.— Someone Worth Quoting
Lists
Unordered:
- First item in the list
- Second item, which is deliberately long enough to wrap onto a second line so we can see how the hanging indent behaves
- Third item
- Nested item one
- Nested item two
- Third level
- Fourth item
Ordered:
- Install the package
- Configure the provider
- Ship it
- Nested ordered item
- Another nested item
- Celebrate
Task list:
- Port every post
- Rebuild the OG images
- Decide on the syntax theme
Code
Inline composer require echolabs/prism inside a sentence, plus a longer \App\Services\MemoryConsolidator::class reference.
<?php
namespace App\Services;
use EchoLabs\Prism\Prism;use Illuminate\Support\Collection;
class MemoryConsolidator{ public function __construct( private readonly int $maxGeneration = 3, ) {}
/** Merge semantically similar memories into denser ones. */ public function consolidate(Collection $memories): Collection { return $memories ->groupBy(fn ($memory) => $memory->cluster_id) ->map(function (Collection $cluster) { if ($cluster->count() === 1) { return $cluster->first(); }
return Prism::text() ->using('anthropic', 'claude-opus-5') ->withPrompt($this->prompt($cluster)) ->generate(); }) ->values(); }}// A small async helper with a few token types.const THRESHOLD = 0.82;
export async function findSimilar(embedding, { limit = 10 } = {}) { const response = await fetch("/api/memories/search", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ embedding, limit }), });
if (!response.ok) { throw new Error(`Search failed: ${response.status}`); }
const { results } = await response.json(); return results.filter((r) => r.score >= THRESHOLD);}# Shell, with comments and flagspnpm installpnpm build --verbosersync -avz --delete ./dist/ deploy@tjmiller.me:/var/www/{ "name": "tjmiller.me", "version": "5.0.0", "private": true, "scripts": { "dev": "astro dev", "build": "astro check && astro build" }}const theme = "poimandres";const theme = vaporwaveDark;export default defineConfig({ themes: [theme] });A code block with a title and highlighted lines:
export async function getAllPosts() { return await getCollection("post", ({ data }) => { return import.meta.env.PROD ? data.draft !== true : true; });}A long line that must scroll horizontally rather than break the page layout:
this is a deliberately long single line of code intended to overflow the container so we can confirm that horizontal scrolling works correctly and nothing bleeds out of the article columnTables
| Provider | Model | Context | Streaming |
|---|---|---|---|
| Anthropic | claude-opus-5 | 200,000 | ✓ |
| OpenAI | gpt-5 | 128,000 | ✓ |
| Ollama | llama-3.3-70b | 8,192 | ✓ |
| Groq | mixtral-8x7b | 32,768 | — |
Images
Footnotes
Here is a claim that needs a citation1, and another one that needs a different citation2.
Everything Else
Term lists, keyboard keys like ⌘ + K, and abbreviations such as LLM all show up occasionally.
A final paragraph to close the page out and confirm the bottom spacing feels right before the footer takes over.