diff --git a/docs/design-extract/LICENSE.txt b/docs/design-extract/LICENSE.txt
new file mode 100644
index 0000000..f739846
--- /dev/null
+++ b/docs/design-extract/LICENSE.txt
@@ -0,0 +1,20 @@
+Design System Pack — Provenance
+================================
+
+Source: https://coulomb.social
+Captured: 2026-08-08
+Tool: designlang (https://designlang.app, MIT)
+
+The token values, type scale, spacing system, and component anatomy in
+this pack were inferred from the publicly-accessible computed styles of
+the source URL via a headless browser. No source files, proprietary
+assets, or copyrighted media were accessed or included.
+
+You are free to use these values as a starting point, reference, or
+inspiration. The packaging itself (this README, the bundle layout, the
+emitter output formats) is released under MIT by the designlang project.
+
+Trademarks, logos, brand names, and other identifiable assets of the
+source remain the property of their respective owners and are not
+licensed by this pack. Do not pass off this pack as the original site's
+official design system without permission.
diff --git a/docs/design-extract/PROVENANCE.md b/docs/design-extract/PROVENANCE.md
new file mode 100644
index 0000000..6a99cf2
--- /dev/null
+++ b/docs/design-extract/PROVENANCE.md
@@ -0,0 +1,16 @@
+# Design extract provenance
+
+| Field | Value |
+|-------|--------|
+| Source | https://coulomb.social |
+| Tool | designlang pack v12.21.0 |
+| Captured | 2026-08-09 (local) |
+| Auth | Cookie file present, but session matches **anonymous Bubble** defaults (3× `coulomb_*` cookies; only `algoliasearch-client-js` localStorage). Treat as **public shell** baseline, not logged-in product UI. |
+| Grade | B (86/100) — thin signal (6 palette colours; voice stats 0 buttons / 0 headings) |
+| Location | `docs/design-extract/` |
+
+## Next
+
+1. Re-run `./scripts/capture-auth-state.sh` after a full member login (wait for app UI).
+2. Script now refuses to overwrite `storage-state.json` with anonymous sessions (exit 2).
+3. Re-run `./scripts/run-design-extract.sh --wait 5000` (and optionally a multi-page crawl via plain `designlang` with `--depth`) for authenticated surfaces.
diff --git a/docs/design-extract/README.md b/docs/design-extract/README.md
new file mode 100644
index 0000000..335ed11
--- /dev/null
+++ b/docs/design-extract/README.md
@@ -0,0 +1,63 @@
+# coulomb.social — design system pack
+
+> Built from `https://coulomb.social` on 2026-08-08 by [designlang](https://designlang.app) v12.21.0.
+
+A single, polished bundle of every artifact designlang emits for coulomb.social: tokens, components, a runnable Storybook, a minimal starter, and paste-ready prompts for v0 / Lovable / Cursor / Claude Artifacts.
+
+## At a glance
+
+- **Grade:** B (86/100)
+- **Stack:** unknown · component library: unknown
+- **Type families:** Times New Roman, Helvetica, Inter
+- **Palette:** 6 colors
+- **Spacing base:** 2
+
+## What's in this pack
+
+```
+coulomb-social-design-system/
+├── README.md ← you are here
+├── LICENSE.txt
+├── tokens/ ← DTCG + Tailwind + CSS vars + Figma vars + motion + theme.js
+├── components/ ← typed React stubs (anatomy.tsx)
+├── storybook/ ← runnable Storybook project
+├── starter/ ← minimal starter app
+├── prompts/ ← v0 · Lovable · Cursor · Claude Artifacts
+└── extras/ ← voice fingerprint + recipe cards
+```
+
+## Install the tokens
+
+### Tailwind
+
+```js
+// tailwind.config.js
+import config from './tokens/tailwind.config.js';
+export default config;
+```
+
+### CSS variables
+
+```html
+
+```
+
+### Figma
+
+In Figma → Variables panel → import `tokens/figma-variables.json`.
+
+### Storybook
+
+```bash
+cd storybook && npm install && npm run storybook
+```
+
+## Provenance
+
+This pack was extracted from a publicly-accessible URL and represents the *observable design language* of that site at the time of capture. Token values are inferred from computed styles — no source files were accessed. See `LICENSE.txt` for usage guidance.
+
+Re-pack at any time:
+
+```bash
+npx designlang pack coulomb.social
+```
diff --git a/docs/design-extract/components/anatomy.tsx b/docs/design-extract/components/anatomy.tsx
new file mode 100644
index 0000000..0529c08
--- /dev/null
+++ b/docs/design-extract/components/anatomy.tsx
@@ -0,0 +1,4 @@
+// Auto-generated by designlang — component anatomy v2.
+// Scaffolds. Wire into your token system; not a runtime library.
+
+import * as React from 'react';
diff --git a/docs/design-extract/extras/prompt-pack.md b/docs/design-extract/extras/prompt-pack.md
new file mode 100644
index 0000000..982ace5
--- /dev/null
+++ b/docs/design-extract/extras/prompt-pack.md
@@ -0,0 +1,120 @@
+# Prompt pack
+
+Paste-ready prompts for coulomb.social. Use the variant that matches your tool.
+
+## v0.txt
+
+```
+Build a landing page with this exact visual language.
+COLORS:
+ #000000
+ #171717
+ #d08728
+ #ffffff
+ #616161
+ #e5e5e5
+FONTS: [object Object], [object Object], [object Object], [object Object]
+SPACING: 2, 32, 68
+RADIUS: 4, 8
+SHADOWS: rgb(97, 97, 97) 2px 2px 8px 0px
+MATERIAL LANGUAGE: flat
+VOICE: Tone: neutral · Headings: unknown
+SECTIONS (in order):
+- hero
+- features
+- cta
+- footer
+Use Tailwind. Match these tokens exactly. Keep the material language consistent.
+```
+
+## lovable.txt
+
+```
+Clone the design language of this landing page and build a fresh equivalent.
+Visual feel: flat. Tone: neutral · Headings: unknown
+Primary palette: #000000, #171717, #d08728, #ffffff, #616161.
+Typography: [object Object], [object Object], [object Object], [object Object].
+Corner radius vocabulary: 4, 8.
+Shadow vocabulary: rgb(97, 97, 97) 2px 2px 8px 0px.
+Page structure:
+- hero
+- features
+- social proof
+- cta
+- footer
+```
+
+## cursor.md
+
+```
+# Design brief
+Page type: **landing**.
+Material language: **flat**.
+Voice: Tone: neutral · Headings: unknown.
+## Tokens
+```ts
+export const tokens = {
+ colors: ['#000000', '#171717', '#d08728', '#ffffff', '#616161', '#e5e5e5'],
+ fonts: ['[object Object]', '[object Object]', '[object Object]', '[object Object]'],
+ radii: ['4', '8'],
+ shadows: ['rgb(97, 97, 97) 2px 2px 8px 0px'],
+};
+```
+## Sections
+- hero
+- features
+- cta
+- footer
+```
+
+## claude-artifacts.md
+
+```
+Create a React artifact that reproduces this brand's design language.
+Page intent: landing.
+Material language: flat.
+Voice: Tone: neutral · Headings: unknown.
+Colors to use: #000000, #171717, #d08728, #ffffff, #616161, #e5e5e5.
+Fonts: [object Object], [object Object], [object Object], [object Object].
+Radius vocabulary: 4, 8.
+Sections:
+- hero
+- features
+- cta
+- footer
+Use Tailwind via CDN, lucide-react for icons, and keep the material language consistent across sections. Do not add extra decorative elements outside this vocabulary.
+```
+
+## Recipes
+
+### button
+
+# Recipe: button
+Build one button component that matches this brand.
+Palette: #000000, #171717, #d08728, #ffffff, #616161, #e5e5e5
+Typography: [object Object], [object Object], [object Object], [object Object]
+Material: flat
+Signals: Radius: 4, 8 · Shadows: rgb(97, 97, 97) 2px 2px 8px 0px
+## Anatomy (detected)
+```json
+{
+ "kind": "button",
+ "structuralHash": "button>svg",
+ "instanceCount": 1,
+ "variants": [
+ {
+ "css": {
+ "background": "rgba(0, 0, 0, 0)",
+ "color": "rgb(208, 135, 40)",
+ "padding": "5px 5px 5px 5px",
+ "borderRadius": "4px",
+ "border": "0px none rgb(208, 135, 40)",
+ "fontSize": "13.3333px",
+ "fontWeight": "400"
+ },
+ "instanceCount": 1
+ }
+ ]
+}
+```
+
diff --git a/docs/design-extract/extras/voice.json b/docs/design-extract/extras/voice.json
new file mode 100644
index 0000000..05ef569
--- /dev/null
+++ b/docs/design-extract/extras/voice.json
@@ -0,0 +1,13 @@
+{
+ "tone": "neutral",
+ "pronoun": "third-person",
+ "headingStyle": "unknown",
+ "headingLengthClass": "tight",
+ "ctaVerbs": [],
+ "buttonPatterns": [],
+ "sampleHeadings": [],
+ "stats": {
+ "buttons": 0,
+ "headings": 0
+ }
+}
\ No newline at end of file
diff --git a/docs/design-extract/prompts/claude-artifacts.md b/docs/design-extract/prompts/claude-artifacts.md
new file mode 100644
index 0000000..1da09db
--- /dev/null
+++ b/docs/design-extract/prompts/claude-artifacts.md
@@ -0,0 +1,13 @@
+Create a React artifact that reproduces this brand's design language.
+Page intent: landing.
+Material language: flat.
+Voice: Tone: neutral · Headings: unknown.
+Colors to use: #000000, #171717, #d08728, #ffffff, #616161, #e5e5e5.
+Fonts: [object Object], [object Object], [object Object], [object Object].
+Radius vocabulary: 4, 8.
+Sections:
+- hero
+- features
+- cta
+- footer
+Use Tailwind via CDN, lucide-react for icons, and keep the material language consistent across sections. Do not add extra decorative elements outside this vocabulary.
\ No newline at end of file
diff --git a/docs/design-extract/prompts/cursor.md b/docs/design-extract/prompts/cursor.md
new file mode 100644
index 0000000..34c8196
--- /dev/null
+++ b/docs/design-extract/prompts/cursor.md
@@ -0,0 +1,18 @@
+# Design brief
+Page type: **landing**.
+Material language: **flat**.
+Voice: Tone: neutral · Headings: unknown.
+## Tokens
+```ts
+export const tokens = {
+ colors: ['#000000', '#171717', '#d08728', '#ffffff', '#616161', '#e5e5e5'],
+ fonts: ['[object Object]', '[object Object]', '[object Object]', '[object Object]'],
+ radii: ['4', '8'],
+ shadows: ['rgb(97, 97, 97) 2px 2px 8px 0px'],
+};
+```
+## Sections
+- hero
+- features
+- cta
+- footer
\ No newline at end of file
diff --git a/docs/design-extract/prompts/lovable.txt b/docs/design-extract/prompts/lovable.txt
new file mode 100644
index 0000000..b483b09
--- /dev/null
+++ b/docs/design-extract/prompts/lovable.txt
@@ -0,0 +1,12 @@
+Clone the design language of this landing page and build a fresh equivalent.
+Visual feel: flat. Tone: neutral · Headings: unknown
+Primary palette: #000000, #171717, #d08728, #ffffff, #616161.
+Typography: [object Object], [object Object], [object Object], [object Object].
+Corner radius vocabulary: 4, 8.
+Shadow vocabulary: rgb(97, 97, 97) 2px 2px 8px 0px.
+Page structure:
+- hero
+- features
+- social proof
+- cta
+- footer
\ No newline at end of file
diff --git a/docs/design-extract/prompts/recipes/button.md b/docs/design-extract/prompts/recipes/button.md
new file mode 100644
index 0000000..81bcbe4
--- /dev/null
+++ b/docs/design-extract/prompts/recipes/button.md
@@ -0,0 +1,28 @@
+# Recipe: button
+Build one button component that matches this brand.
+Palette: #000000, #171717, #d08728, #ffffff, #616161, #e5e5e5
+Typography: [object Object], [object Object], [object Object], [object Object]
+Material: flat
+Signals: Radius: 4, 8 · Shadows: rgb(97, 97, 97) 2px 2px 8px 0px
+## Anatomy (detected)
+```json
+{
+ "kind": "button",
+ "structuralHash": "button>svg",
+ "instanceCount": 1,
+ "variants": [
+ {
+ "css": {
+ "background": "rgba(0, 0, 0, 0)",
+ "color": "rgb(208, 135, 40)",
+ "padding": "5px 5px 5px 5px",
+ "borderRadius": "4px",
+ "border": "0px none rgb(208, 135, 40)",
+ "fontSize": "13.3333px",
+ "fontWeight": "400"
+ },
+ "instanceCount": 1
+ }
+ ]
+}
+```
\ No newline at end of file
diff --git a/docs/design-extract/prompts/v0.txt b/docs/design-extract/prompts/v0.txt
new file mode 100644
index 0000000..150772c
--- /dev/null
+++ b/docs/design-extract/prompts/v0.txt
@@ -0,0 +1,20 @@
+Build a landing page with this exact visual language.
+COLORS:
+ #000000
+ #171717
+ #d08728
+ #ffffff
+ #616161
+ #e5e5e5
+FONTS: [object Object], [object Object], [object Object], [object Object]
+SPACING: 2, 32, 68
+RADIUS: 4, 8
+SHADOWS: rgb(97, 97, 97) 2px 2px 8px 0px
+MATERIAL LANGUAGE: flat
+VOICE: Tone: neutral · Headings: unknown
+SECTIONS (in order):
+- hero
+- features
+- cta
+- footer
+Use Tailwind. Match these tokens exactly. Keep the material language consistent.
\ No newline at end of file
diff --git a/docs/design-extract/starter/index.html b/docs/design-extract/starter/index.html
new file mode 100644
index 0000000..210a8d8
--- /dev/null
+++ b/docs/design-extract/starter/index.html
@@ -0,0 +1,41 @@
+
+
+
+
+coulomb.social starter
+
+
+
+
+
+
Built from coulomb.social
+
This starter is wired to the tokens in tokens/variables.css. Edit the variables and watch this page change. Drop in your own components and use the same tokens to keep the visual language consistent.