diff --git a/marketing/instagram/README.md b/marketing/instagram/README.md
new file mode 100644
index 000000000..b979344da
--- /dev/null
+++ b/marketing/instagram/README.md
@@ -0,0 +1,36 @@
+# Instagram — design-work post
+
+A square (1080×1080) Instagram post built in the kernel.chat editorial
+design language (`docs/design-language.md`): warm cream stock, EB
+Garamond display + Courier Prime meta, tomato as the only spot color,
+the asterisk as the single recurring system mark, a bracketed bilingual
+kicker, and a bottom-right issue monument.
+
+## Files
+
+| File | What it is |
+|---|---|
+| `build_post.py` | Generator — writes the SVG and rasterizes it to PNG with cairosvg |
+| `post.svg` | Vector source (scalable, editable) |
+| `kernel-design-post.png` | 2160×2160 export, ready to upload (Instagram downsamples to 1080) |
+
+## Rebuild
+
+```sh
+pip install cairosvg fonttools brotli
+# Real brand fonts (EB Garamond + Courier Prime) via Fontsource on npm,
+# converted woff2 -> ttf and installed for fontconfig. WenQuanYi Zen Hei
+# (system) covers the Japanese glyphs in the bilingual lockups.
+python3 build_post.py
+```
+
+To edit copy (headline, deck, issue number, hashtags), change the
+strings in `build_post.py` and re-run.
+
+## Suggested caption
+
+> Every release is an issue. Sixteen issues of evidence-cited editorial
+> design — warm paper, one spot color, a single recurring mark. Built in
+> public.
+>
+> #editorialdesign #typography #designsystem #graphicdesign #magazine
diff --git a/marketing/instagram/build_post.py b/marketing/instagram/build_post.py
new file mode 100644
index 000000000..ef70e81ed
--- /dev/null
+++ b/marketing/instagram/build_post.py
@@ -0,0 +1,113 @@
+#!/usr/bin/env python3
+"""
+Instagram design-work post — kernel.chat editorial grammar.
+
+A 1080x1080 square cover built in the magazine's design language:
+warm cream stock, EB Garamond display + Courier Prime meta, tomato as
+the single spot color, the asterisk (the) as the one recurring system
+glyph, bracketed bilingual kicker, and a bottom-right issue monument.
+
+Renders the SVG to PNG with cairosvg at 2x for crisp upload.
+
+Tokens (from docs/design-language.md):
+ cream #F3E9D2 warm secondary stock (ground)
+ ink #1F1E1D primary dark text
+ coffee #6B4E3D warm brown / swash decks
+ tomato #E24E1B the only spot color
+"""
+import cairosvg
+
+CREAM = "#F3E9D2"
+INK = "#1F1E1D"
+COFFEE = "#6B4E3D"
+TOMATO = "#E24E1B"
+
+SERIF = "EB Garamond, Liberation Serif, serif"
+# CJK-capable fallback so bilingual lockups render the JP glyphs
+# (Courier Prime carries no kana/kanji; WenQuanYi picks them up per-glyph).
+MONO = "Courier Prime, WenQuanYi Zen Hei, DejaVu Sans Mono, monospace"
+JP = "WenQuanYi Zen Hei, Courier Prime, sans-serif"
+
+W = H = 1080
+M = 84 # outer editorial margin
+
+
+def asterisk(cx, cy, r, color):
+ """The single recurring system mark: a 6-spoke editorial asterisk
+ (the project's PopIcon `asterisk`), drawn as three crossing strokes."""
+ import math
+ a = 0.8660254 * r # cos(30) * r
+ b = 0.5 * r # sin(30) * r
+ w = max(1.8, r * 0.32)
+ lines = [
+ (cx, cy - r, cx, cy + r),
+ (cx - a, cy - b, cx + a, cy + b),
+ (cx - a, cy + b, cx + a, cy - b),
+ ]
+ return "".join(
+ f''
+ for x1, y1, x2, y2 in lines
+ )
+
+svg = f''''''
+
+with open("post.svg", "w") as f:
+ f.write(svg)
+
+cairosvg.svg2png(bytestring=svg.encode(), write_to="kernel-design-post.png",
+ output_width=2160, output_height=2160)
+print("wrote post.svg and kernel-design-post.png (2160x2160)")
diff --git a/marketing/instagram/kernel-design-post.png b/marketing/instagram/kernel-design-post.png
new file mode 100644
index 000000000..c3b37572d
Binary files /dev/null and b/marketing/instagram/kernel-design-post.png differ
diff --git a/marketing/instagram/post.svg b/marketing/instagram/post.svg
new file mode 100644
index 000000000..0949690d0
--- /dev/null
+++ b/marketing/instagram/post.svg
@@ -0,0 +1,54 @@
+
\ No newline at end of file