Markdown Kitchen Sink

A quick sanity-check post. If everything renders correctly, you're good to ship.


Headings

H1 — The Big One

H2 — Section Header

H3 — Subsection

H4 — Sub-subsection

H5 — Getting Small
H6 — Whisper Level

Paragraphs & Inline Formatting

This is a normal paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.

This is bold text, this is italic text, and this is bold and italic. You can also use strikethrough for things you regret writing. Inline code snippets look like this.

Here's a link to the Go docs and a relative link to another post.


Blockquotes

"The best way to get a project done faster is to start sooner." — Someone on the internet, probably

Nested blockquotes:

Outer quote — setting the scene.

Inner quote — things are getting philosophical.


Lists

Unordered

  • Goldmark for markdown parsing
  • Chroma for syntax highlighting
  • Templ for type-safe templates
  • HTMX for hypermedia interactions
    • Nested item one
    • Nested item two
      • Doubly nested

Ordered

  1. Install Go
  2. Write some handlers
  3. Parse some markdown
  4. Deploy somewhere cheap
  5. Tell nobody and hope they find it

Task List

  • [x] Set up project structure
  • [x] Configure Goldmark
  • [x] Add Chroma highlighting
  • [ ] Write actual blog posts
  • [ ] Convince people to read them

Code Blocks

Go

 1package main
 2
 3import (
 4	"fmt"
 5	"net/http"
 6)
 7
 8func main() {
 9	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
10		fmt.Fprintln(w, "Hello, blog!")
11	})
12
13	fmt.Println("Listening on :8080")
14	http.ListenAndServe(":8080", nil)
15}

JavaScript

1document.addEventListener("DOMContentLoaded", () => {
2  const posts = document.querySelectorAll(".post-card");
3
4  posts.forEach((card) => {
5    card.addEventListener("click", (e) => {
6      console.log("Navigating to:", e.currentTarget.dataset.slug);
7    });
8  });
9});

HTML

 1<!DOCTYPE html>
 2<html lang="en">
 3  <head>
 4    <meta charset="UTF-8" />
 5    <title>My Blog</title>
 6  </head>
 7  <body>
 8    <main>
 9      <h1>Hello, world</h1>
10    </main>
11  </body>
12</html>

CSS

 1:root {
 2  --color-bg: #0f0f0f;
 3  --color-text: #e2e2e2;
 4  --color-accent: #7c6af7;
 5}
 6
 7body {
 8  background-color: var(--color-bg);
 9  color: var(--color-text);
10  font-family: "Inter", sans-serif;
11  line-height: 1.7;
12}

Bash

1# Build and run
2go build -o ./bin/blog ./cmd/blog
3./bin/blog
4
5# Or just
6go run main.go

Plain text (no highlighting)

This is plain preformatted text.
No highlighting. Good for logs,
config files, or raw output.

Tables

Feature Supported Notes
Tables Via Goldmark extension
Syntax highlighting Via Chroma
Task lists Via GFM extension
Footnotes If extension enabled
Raw HTML ⚠️ Disabled by default in Goldmark

Horizontal Rules

Three ways to write them, all should render the same:





Images

A placeholder image

Image with a title attribute (hover text):

Alt text


Footnotes

Goldmark supports footnotes if you enable the extension.1 They're great for asides that would interrupt the flow.2


Hard Line Breaks

This line ends with two trailing spaces
so this should be on a new line without a paragraph gap.


HTML Passthrough

If you've enabled raw HTML in Goldmark, this should render as a styled element:

This text should be highlighted — if raw HTML is allowed.


Edge Cases

Empty-ish content below a heading — make sure spacing holds up.

A heading with no text (bad practice, but shouldn't explode).

Very long unbroken word to test overflow: superlongidentifierthatmightcauseoverflowissuesifyouarenotcareful_v2_final_FINAL.

Unicode: 日本語テスト • Ünïcödé • العربية • 中文 • Ελληνικά

Emoji: 🚀 🦫 🧪 ✅ 🎯


If everything above looks right — headings, code blocks with highlighting, tables, lists, blockquotes, images, and footnotes — your markdown pipeline is solid.


  1. Enable with goldmark.WithExtensions(extension.Footnote)↩︎

  2. Like this one — completely optional, but nice to have. ↩︎