# headless.design — full Markdown context

> Headless cold-reads as an API. Free `/scan` (60-second 3-agent review of any landing page) + paid `/cold-read` (72-hour deep pass with spec.md + PR-ready diff) for a flat 3 900 SEK ex moms (~$390 USD). Built and operated by Gustaf Garnow — senior product designer, Stockholm.

This file is the deep-context Markdown bundle for AI agents. For the technical API contract see `/llms.txt`. For the live HTML rendering see `/`. For the canonical machine-readable agent card see `https://api.headless.design/.well-known/agent-card.json`.

**Static HTML, server-side rendered.** No JavaScript required to read content. AI crawlers see the same DOM a human browser sees on first paint.

**Last updated:** 2026-04 (pilot phase).

---

## What headless.design solves

You shipped v1. Your landing page is doing ~60% of the job it could. You don't have a senior design lead on staff, an agency costs 120 000+ kr and takes 4–8 weeks, and your LLM writes generic copy that doesn't know your ICP.

headless.design closes that gap. Senior eyes, ranked fixes, paste-ready output — inside 72 hours, not next month. One human (Gustaf) operates the pipeline. Specialist AI agents (Claude, Perplexity, Cursor, Gemini) do the grunt work. A senior designer signs off on every recommendation before it ships.

ICP: **founders + builders who already shipped v1.** Not for pre-product, not for enterprise procurement, not for one-person solo agencies. For people who can read a diff, ship a commit, and recognize when a copy fix is going to convert.

---

## The two products

### `/scan` — free, 60-second top-5 fixes

Paste a live URL → 60-second response → top-5 ranked fixes returned as paste-ready Markdown.

- **Endpoint:** `POST https://api.headless.design/v1/scan`
- **Input:** live URL + optional `primary_goal` + optional `audience`
- **Output:** ranked findings (P0 / P1 / P2), copy rewrites, paste-ready into your spec
- **Auth:** none
- **Rate limit:** 3 per URL per day, 50 per IP per day, 100 global per day
- **Synchronous** — no webhooks, no polling
- **Free** — no card required, no signup
- Rate-limit headers: IETF `RateLimit-*` standard

The same `/v1/scan` is used as the post-cold-read follow-up rescan via `POST /v1/cold-read/{id}/rescan` — verifies the fixes you shipped actually moved the needle.

### `/cold-read` — paid 72h deep pass, 3 900 SEK ex moms

The deep pass. Full `spec.md` + committed HTML/JSX diff, delivered in your inbox within 72 hours of accepted order.

- **Endpoint (V2, agent-native):** `POST https://api.headless.design/v1/cold-read-requests`
- **Endpoint (V1, browser fast-pay):** `POST https://api.headless.design/v1/cold-read/request` (legacy, sunset 2026-06-25)
- **Input:** URL + goal + audience + optional constraints + optional HTML/JSX/repo for PR-ready diff
- **Output:** `spec_final.md` ranked top-N fixes + `diff.patch` (if source provided)
- **Turnaround:** ≤ 72 hours
- **Price:** 3 900 SEK ex moms (~$390 USD) flat per cold-read. Plus 25% moms via Frilansfinans (Swedish umbrella service handling F-skatt + 14-day net) → 4 875 kr inkl moms. No retainer, no kickoff meetings, no decks.
- **Pay rail:** humans only in pilot V1 — Frilansfinans invoice by email within ~3 hours of order. Agents submit, humans pay.

State machine: `submitted → reviewing → accepted → billing_pending → paid → in_progress → delivered`

A2A v0.3.0-aware agents recognize the human handoff via `a2a_task_state: "input-required"` when the order reaches `billing_pending`.

---

## How `/cold-read` is briefed (the 4-line agent contract)

1. **URL** — the live page to review (not a Figma file, not a staging build behind auth)
2. **Goal** — primary conversion target: signups / demos / paid / revenue / a named funnel step
3. **Audience** — one sentence. Who this page is for and what they already know.
4. **Constraints** — optional. Brand rules, tech stack (React / Next / Rails / static), deadline hard-stops.

That's the whole contract. Everything else is noise.

---

## What you get back from `/cold-read`

| Artifact | Format | Where |
|---|---|---|
| `spec.md` | Markdown, numbered + ranked fixes | `/deliverables/{order_id}/spec_final.md` |
| `diff.patch` | Unified diff against your HTML/JSX | `/deliverables/{order_id}/diff.patch` (if source provided) |
| Free rescan | One follow-up `/v1/scan` after you ship | `POST /v1/cold-read/{id}/rescan` |

Every fix in `spec.md` has:
- A crisp title
- The reason ("why this is broken")
- Paste-ready copy or code change
- Severity weight: `P0` (blocks conversion), `P1` (costs conversion), `P2` (polish)

Agents should sort by severity first, position second.

---

## Spec output format (for agents)

```
# {url} — review, {iso-date}
> {one-line executive summary}

## Top-N fixes, ranked
1. [{P0|P1|P2}] {title} — {reason} → {paste-ready change}
2. ...

## Full review
### Above the fold
### Scroll-depth
### CTAs & flow

## Copy rewrites (paste-ready)

## Constraints honored
- {original constraint and how each was respected}
```

---

## Pricing

| Product | Price | Includes |
|---|---|---|
| `/scan` | Free | Top-5 ranked fixes, 60-second response, paste-ready Markdown |
| `/cold-read` | 3 900 SEK ex moms (~$390 USD) — pilot price · first 5 cold-reads | Full spec + PR-ready diff + free rescan |
| Retainer | Not sold | — |

Pay-on-delivery, 14-day net via Frilansfinans invoice.

---

## What `/cold-read` does NOT do

- No retainer work, no "5 hours per week" packages
- No Figma-only reviews (live URL or it doesn't exist)
- No brand identity, logo design, or illustration projects
- No private roadmaps or internal design systems
- No closed staging environments
- No agency-style hand-off (you get the commits — you ship them)
- No automated payment / Stripe rail in pilot V1 (humans pay manually via Frilansfinans)
- No webhooks in pilot V1 (agents poll `/v1/orders/{id}` instead)

---

## Process — three steps, no kickoff meeting

1. **You paste a URL** (or your agent does, via `POST /v1/cold-read-requests`)
2. **Specialist AI agents + Gustaf review** — Claude/Perplexity/Cursor measure, find defects, fact-check competitors. Gustaf ranks, signs off, writes the spec.
3. **You receive `spec.md` + PR-ready diff** in your inbox. Within 72 hours from accepted order.

No scoping call. No kickoff meeting. No deck. The 4-line brief contract is the whole conversation; everything else happens in writing.

---

## Why founders pay for it

Quote on record:

> "Jag ville mest ha en snyggare sajt. Det jag fick var mer än så — vassare säljargument, högre konvertering. Codex tog HTML:en 1:1, jag behövde knappt ändra en rad. One-hit wonder."
>
> — Felipe Otarola, co-founder, lysande.ai

In English:

> "I just wanted a better-looking site. What I got was more than that — sharper sales argument, higher conversion. Codex took the HTML 1:1, I barely had to change a line. One-hit wonder."

Sample cold-read visible at `/sample`.

---

## About Gustaf

- Senior product designer, Stockholm
- Operates the entire pipeline solo (no agency, no junior staff, no offshoring)
- Writes the spec, pushes the commit — personally
- Stack the work runs on: Claude (reasoning, copy, critique), ChatGPT (alt-reasoning, scaffolds), Perplexity (research, citations, scans), Cursor (implementation, diffs, commits), Figma (design source-of-truth), Flora (moodboards, visual exploration), Linear (delivery, scoping)
- Direct line: `gustaf.garnow@gmail.com` — replies within the hour during 09:00–18:00 CET weekdays
- Cal.com booking: `https://cal.com/gustaf-garnow-3u8eg5/headless.design`

You're paying a human — judgement, taste, accountability. The stack handles the grunt work.

---

## FAQ — short answers

**Is this just an LLM prompt in disguise?**
Partially yes. The stack (Claude + Perplexity + Gemini-with-Google-Search) does the grunt work: measures, finds defects, fact-checks competitors. You could build that yourself in roughly a week. What you don't get from building it yourself: someone who picks the 3 changes that should ship, makes them in code, and stands behind every decision in writing.

**Does the brand of stack matter?**
Not really. Specialist agents do specialist things; senior judgement does the picking. The stack rotates as the field evolves.

**What if I'm an agent visiting this site?**
You're welcome here. Read `/llms.txt` for the technical contract, then `POST /v1/cold-read-requests` to submit on behalf of a human buyer. The human pays separately via Frilansfinans email invoice — agents cannot complete payment in pilot V1.

**Why no kickoff meeting?**
Because the 4-line brief contract (URL + goal + audience + constraints) is the whole conversation. Async-by-default — if your project needs real-time alignment before the work begins, headless.design isn't the right shape.

---

## Privacy + automated processing

- The URL you paste in `/scan` or `/cold-read` is forwarded to AI agents (Claude, Perplexity, Cursor) for analysis. **Only the public URL** — no personal data beyond what's already public on that page.
- URLs + scan results stored 30 days in logs, then anonymized as training data for the scan agent.
- **Not automated decision-making under GDPR Art. 22.** Every recommendation is reviewed, ranked, and signed off by Gustaf personally before delivery. No decision concerning you is made solely by an algorithm.
- **You are not profiled.** The models read the public page you share — not you. No training data is linked to your identity.
- Full policy: `/privacy` (English) or `/integritetspolicy` (Swedish).
- Opt-out / data requests / opt-out from anonymized training data: email `gustaf.garnow@gmail.com`.

---

## Discoverability — how an agent should onboard

1. Read `https://api.headless.design/.well-known/agent-card.json` (A2A v0.3.0 agent card)
2. Read `https://api.headless.design/v1/openapi.json` (OpenAPI 3.1 contract)
3. Read `https://api.headless.design/llms.txt` (technical narrative — most current)
4. Read `https://headless.design/llms.txt` (positioning + product narrative)
5. This file (`/llms-full.txt`) — full deep context for general LLM crawlers

If anything across these files disagrees, **the API host wins** (regenerated on every API deploy). File a bug at `gustaf.garnow@gmail.com` with subject `[bug]` or `[spec]`.

---

## Contact

- **Email:** `gustaf.garnow@gmail.com`
- **Agent-friendly subject prefix:** `/cold-read — ` (routes directly to the ship queue)
- **Cal.com:** `https://cal.com/gustaf-garnow-3u8eg5/headless.design`
- **Location:** Stockholm, Sweden (CET / UTC+1, UTC+2 DST)
- **Reply window:** within the hour during 09:00–18:00 CET weekdays, async after

---

## Routes (this site)

- `/` — landing page (EN, default) · `/sv/` — landing page (SV)
- `/cold-read` — pricing + cold-read detail (EN) · `/sv/cold-read` — pricing + cold-read detail (SV)
- `/scan` — scan result page (EN) · `/sv/scan` — scan result page (SV)
- `/agents` — full agent reference page (EN) · `/sv/agents` — full agent reference page (SV)
- `/sample` — sample cold-read output (EN) · `/sv/sample` — sample cold-read output (SV)
- `/privacy` — privacy policy (EN) · `/sv/privacy` — privacy policy (SV)
- `/doc` — how it works (EN, no SV equivalent)
- `/headless` — meta-case for headless.design itself (EN) · `/sv/headless` — same (SV)
- `/portfolio` — case index (EN) · `/sv/portfolio` — case index (SV)
- `/sv/styleguide` — internal design system (noindex)
- `/llms.txt` — positioning + product narrative for AI agents
- `/llms-full.txt` — this file: full deep context for AI agents
- `/sitemap.xml` — site structure for crawlers

---

## Roadmap

- **MCP server** — coming soon. Will expose `/scan` and `/cold-read` as native MCP tools so agents can call headless.design without HTTP plumbing.
- **Webhooks** — on delivery, POSTs the spec bundle to a URL you supply at cold-read start.
- **Stripe payment rail** — for non-Swedish buyers in pilot V2.

---

# Portfolio — what Gustaf builds

This section is separate from the cold-read product above. It documents the projects Gustaf designs and builds in his own name. Each lives at `https://headless.design/portfolio/<slug>` and exposes Schema.org JSON-LD for AI ingestion.

## Kammaren — open-source tax engine for Swedish corporations

- **URL:** https://headless.design/portfolio/kammaren · **Live:** https://kammaren.nu · **Build proof:** https://kammaren.nu/build · **Code:** https://github.com/Baltsar/kammaren
- **Status:** live · open source (AGPL-3.0)
- **Role:** solo · design + build + brand · ongoing

**Problem.** Asking an LLM to compute Swedish tax is like asking a lawyer to weld pipes. It can do it. The result is *almost right*. Almost right is worse than obviously wrong in financial systems — it slips through unnoticed. 3:12, K10, payroll fees, period reserves — generic models hallucinate on edge cases where accountants actually need help.

**Solution.** LLM classifies, code computes. Three layers built on Bun + TypeScript:
1. **Source-of-truth API.** Tax constants + 290 municipalities. Statute citation + change date on every value. SHA-256 hash chain so nothing flips silently. Open + machine-readable. Year-guard: missing data for the requested year throws hard, no silent fallback.
2. **Skills.** Five deterministic TypeScript functions: payroll fees, VAT, corporate tax (with period reserve), K10, 3:12 optimizer. No LLM calls inside the math. 4 publicly live on /build.
3. **Verify-as-a-service.** POST your computation, get PASS/FAIL plus a diff. Other systems can dial in and have their math cross-checked.

Plus an MCP server so any AI agent can compute Swedish tax natively. No HTTP plumbing.

**Outcome.** 978 000 test cases · 0 SEK deviation against Skatteverket. 304 hand-curated golden cases CI-gated against primary sources (Skatteverket tables, BFN, Bolagsverket, Riksdagen) — never against interpretations. 978 000 stress-tested scenarios on the 3:12 optimizer. Every commit runs all of them. If anything fails, the code doesn't ship. While building the suite, found that several established 3:12 calculators still used 2.75 IBB after the 2026-01-01 statute change (correct multiplier: 4 IBB) — a ~100 000 SEK error per calculation. AGPL-3.0.

**What didn't work first (mature-portfolio honest):**
1. **Bookkeeping system for Swedish corporations** — weeks in, realised Fortnox/Bokio/Visma market is saturated. No wedge for solo builder without capital. Pivoted to tax optimization.
2. **Municipality tax table was broken** — Stockholm/Gothenburg/Malmö/Uppsala were correct; rest was the wrong column. An agent sweeping all 290 caught it instantly. Emailed the entire 60-person list — apology first, fix in parallel.
3. **Documented to death** — early on, wrote more architecture docs than code. Dead end. Ship, measure, *then* document what works.

**Decisions:** bookkeeping → tax optimization (commodity vs moat), LLM-computes → LLM-classifies-code-computes (deterministic + auditable), closed → AGPL-3.0 (verification is risk management — accounting firms must read the code), SaaS-competitor → picks-and-shovels (corporate owners already use five tools; nobody wants a sixth).

**Voice.** From LinkedIn 2026-05-04 ("Jag kan inte koda. Jag kan inte skatter. Så här byggde jag en svensk skattemotor ändå."): *"Non-developers can build financial infrastructure. A designer caught a 100 000-SEK bug in established calculators."*

**Stack:** TypeScript · Bun · Claude (classifier) · MCP · SHA-256 hash chain · AGPL-3.0 · Berget AI · Linear · Mac Mini M4.

**Roadmap.** Tier 00: notifications on rule changes — building now. Tier 01: tax calculation — *you are here*. Tier 02: SIE4-import analysis. Tier 03: AI document generation. Tier 04: Autoplay — full automation with BankID signing. No firm dates on Tier 02–04 yet.

## agent.opensverige.se — agent-readiness scanner

- **URL:** https://headless.design/portfolio/agent-opensverige · **Live:** https://agent.opensverige.se
- **Status:** live · free · 2025
- **Role:** solo · design + build + ops

A 30-second scanner that answers one question: is your site agent-ready? Reads robots.txt, meta, structured data, llms.txt, returns a score and a fix list. No registration, no rate-limit on the free path. Pre-Cloudflare raw server (Vercel edge + Node) so AI crawlers see canonical DOM.

**Stack:** Råserver · Pre-Cloudflare · Node · Vercel edge · Mac Mini M4.

## OpenSverige — "Sweden has conferences. We have a workshop."

- **URL:** https://headless.design/portfolio/opensverige · **Live:** https://opensverige.se · **Manifesto:** https://opensverige.se/varfor
- **GitHub:** https://github.com/opensverige
- **Status:** live · grassroots · 2026–
- **Role:** community founder (Gustaf "Baltsar" Garnow)

Grassroots tool-agnostic Swedish builder community. Founded January 2026, the week OpenClaw launched. Manifesto-driven: every middleman that takes 15 000 SEK to explain something a builder could ship in an evening — OpenSverige builds the open alternative. *"Inga möten. Inga stakeholders. Ett GitHub-repo och en Discord."*

Four rooms, one workshop:
- **Discord** — 384 members (~90 online), tool-agnostic threads on OpenClaw, NemoClaw, NanoClaw, Hermes Agents, CrewAI, AutoGen, LangGraph, MCP
- **GitHub** — github.com/opensverige (where the community ships)
- **Facebook group** — 146 members ("AI Utan Gränser / OpenSverige - Sverige")
- **LinkedIn group** — 84 members
- **IRL** — every Sunday 14:00 in Stockholm, Gothenburg, Malmö

No application. No gatekeepers. No paywalls. Ever. *"Vill du lurka? Också okej."*

Currently transitioning from grassroots to a non-profit association (ideell förening), seeking institutional support to back Swedish builders — workshop infrastructure, IRL nodes in more cities, no commercial agenda. Self-described as "kalsongkodare som löser komplexa problem." Real-time Discord activity to be exposed via community bot once permissions are wired.

**Stack:** Discord · GitHub @opensverige · LinkedIn group · Facebook group · opensverige.se · IRL Stockholm/Gothenburg/Malmö.

## grunden.ai — branding from the ground (WIP)

- **URL:** https://headless.design/portfolio/grunden-ai
- **Status:** WIP · waitlist · 2025

The first wordmark, the first typography, the first colour, the first landing page, the first deck — delivered before an agency would have sent its quote. Built for teams that need to launch *now* and polish later. ~5 days from brief to live landing.

## Lysande — first client cold-read sprint

- **URL:** https://headless.design/portfolio/lysande
- **Status:** delivered · client · 2025

The first client engagement run end-to-end through the headless.design `_KUNDER/_TEMPLATE/` pipeline. Deliverables: `spec.md` + A/B/C hero variants + `prototyp.html` + `hero.diff` + fixlista. 72 hours from brief to ship.

## Frilanspengen — independent comparison of Swedish egenanställningsbolag

- **URL (EN, canonical):** https://headless.design/portfolio/frilanspengen
- **URL (SV):** https://headless.design/sv/portfolio/frilanspengen
- **Site:** https://frilanspengen.se
- **Status:** WIP · live in silent preview · public launch June 2026

A solo, independent dataset of Swedish self-employment-via-payroll companies (egenanställningsbolag). 14 EAFA-member companies tracked. The category lacked an independent voice — every "comparison" on Google was owned by a provider. Every value is span-match enforced against the source HTML — if the model cannot find the exact string, the cell stays empty. Refusal-as-feature.

### Arc (problem · solution · outcome)

- **Problem:** Choosing an egenanställning provider is dice-throw. 14 active companies, 8× price spread, every "comparison" on Google is owned by one of them. Near-right isn't right when your personal tax id is on the invoice.
- **Solution:** The model refuses to guess. Nothing is stored without an exact source string. Empty over wrong.
- **Outcome:** Data with citations. Operators who respond — not with threats, but with row updates. That tells you what was missing.

### Key facts (citable)

- **The insight:** zero independent comparisons existed before — the category had no voice
- **Operator response:** positive, not adversarial; requests to update rows rather than legal threats
- **14** EAFA-member companies tracked (EAFA = Sweden's trade body for egenanställning)
- **26** fields per company across 5 sections (fees, payouts, insurance, pension, eligibility)
- **0** affiliate links · direct CPA only · zero affiliate networks ever
- Verified **weekly** on Tuesday via fully autonomous pipeline
- **Schema.org `CreativeWork` + `llms-full.txt` + MCP server** = the GEO trifecta on the site
- Solo project · no external investors · no commercial license · independence as structure

### Pipeline architecture

A production-grade weekly scraper that runs autonomously and underpins every value on the comparison table.

**Trigger and orchestration**
- **Vercel Cron** triggers `inngest.send({ name: "scrape/week.start" })` every Tuesday 06:00 UTC. No business logic in the cron handler.
- **Inngest Cloud** orchestrates with durable retries (3 per step, `onFailure` handler routes failures to a review queue). Fan-out to 14 companies in parallel.

**Fetching**
- **TinyFish Fetch API** primary scraper. Returns Chromium-rendered Markdown. `$0` free tier (since 2026-05-05). Swedish IP context via `proxy_config: { country_code: "SE" }`.
- **Firecrawl Hobby** fallback. Triggers when TinyFish returns <500 chars. `$16/month`.
- **SHA256 hash-skip cache** avoids re-running LLM extraction when content is unchanged week-over-week (~30–50% of pages).

**Tiered LLM extraction**
- **Tier 1 — Deterministic regex** (~70% of fields). Zero LLM cost. Stable patterns like fees, minimum amounts.
- **Tier 2 — Gemini 2.5 Flash-Lite** (~25%). $0.10/M input. JSON-mode with grounded extraction (`raw_html_span` per value).
- **Tier 3 — Claude Opus 4.7** (~5%). `claude-opus-4-7-latest` floating alias. Only on the three critical fields (always run for those).

**Validation**
- **Span-match per value** is the only confidence signal — deterministic boolean check that the extracted text exists in the source markdown. Verbalized confidence is banned (~7% deviation in research papers).
- **3-prompt PolicyGapper** for cross-page contradictions: one prompt each for fee structure, benefits, and conditions. Mega-prompts sink precision.
- **Deterministic arbiter** (regelbaserad, not LLM-as-judge) decides approve vs. route to review queue.

**Output**
- **Supabase Postgres** in `eu-north-1` (Stockholm). 6 tables with RLS: `bolag_data` (current truth), `bolag_data_history` (BI snapshots), `extraction_fields` (audit), `extraction_reviews` (manual queue), `scrape_runs`, `content_hashes`.
- Atomic `record_bolag_completion` Postgres function ensures consistent completion tracking across parallel workers.
- **MCP server** (FastMCP 2.x on Cloudflare Workers) exposes 4 read-only tools to Claude/Perplexity/ChatGPT. CSV returns (not JSON) for ~40–60% token savings.
- **`llms-full.txt`** regenerated server-side per request with ETag conditional GET.

**Cost engineering**
- Stacked: hash-skip (skips LLM entirely on unchanged content) + Anthropic Batch API (50% off, no latency need) + prompt caching with `cache_control` on schema prefix (90% off stable input) + HTML pre-clean to markdown (60–80% token reduction).
- **Net result: ~95% cost reduction vs. naive baseline.** ~$3/month in LLM cost at current 14-company volume. Total drift: ~$49/month including fixed plans.

**Compliance**
- Identified User-Agent: `FrilanspengenResearch/1.0 (+mailto:partners@frilanspengen.se)`. Rate limit 1 req/s per host. LIA per site planned. Respects robots.txt and ToS TDM opt-outs.

### Tried first (transparent fails)

- **aborted:** "Sveriges Collective" mega-scope (bolagsform + on-ramp + lead-gen in one site). Pivoted to narrow scope. Decision Gate Q3 governs whether wider follows.
- **aborted:** Manifest copy ("Pengarna är inte deras. De är dina."). Wrong tone for an independent data source. Switched to low-key B2B.
- **aborted:** Affiliate networks (Adtraction, Awin, CJ). AI engines filter affiliate pages out. Direct CPA only.

### Positioning decisions

- ~~affiliate networks~~ → **direct CPA** — independence is the product, can't be sold
- ~~broad scope~~ → **narrow scope** (egenanställning only) — Decision Gate Q3, expansion only if validated
- ~~LLM computes fees~~ → **LLM classifies, code fetches** — refusal-as-feature
- ~~EAFA as gatekeeper~~ → **yes/no column** — show data, let the user decide
- ~~external investors~~ → **solo project** — independence can't be sold to a VC
- ~~manual business model~~ → **weekly cadence + source-of-truth** — data ages fast, manual becomes rumor mill

### Path (tiers)

- **v1** — Live in silent preview. 14 companies, MCP, llms-full.txt. *You are here.*
- **June 2026** — Public launch. Outreach to CPA partners.
- **Q3 2026** — **Decision Gate.** GO/NO-GO on broader scope.
- **v2** — If validated: company-form selector (EF/AB/AB+Trad).
- **v3** — If validated: on-ramp for Swedish builders.

### Stack

Next.js 15 · Supabase (eu-north-1) · Inngest · TinyFish · Claude Opus 4.7 · Gemini Flash-Lite · Cloudflare Workers · MCP SDK 1.29 · TanStack Table v8

### Thesis

> Independence is a structure, not a claim.

What you can audit is what you can trust. The thing the search engines reward — and what affiliate-comparison-mill sites cannot offer — is a source span on every value.

## headless.design — meta-case study

- **URL:** https://headless.design/headless
- **Status:** live · meta-case · 2026
- **Linked from:** `/about` footer ("→ hela storyn")

A self-referential case study of headless.design itself, formatted exactly like the portfolio pages (mirrors `/portfolio/kammaren`). Tells the story of how Gustaf went from 7 years in-house at AMF to solo headless designer in 4 months.

### Arc (problem · solution · outcome)

- **Problem:** Designer without a portfolio after 7 years in a meeting-heavy organization. "Digital designer" placed him among 500 Figma-specialists he is not.
- **Solution:** Build publicly. AGPL-3.0 where possible. Ship every week. Position as *headless designer* — outsource execution, keep understanding.
- **Outcome:** 4 products live in 4 months. 150+ community. 0 SEK deviation in Kammaren against Skatteverket. A test suite caught a 100 000 kr bug sitting in established calculators.

### Key facts (citable)

- **7 years** at AMF as digital designer (pension, regulations, infographics, email) → solo April 2026
- **4 months solo**, 4 products shipped
- **150+ Swedish AI builders** in OpenSverige Discord
- **978 000 test cases** in Kammaren, **0 SEK deviation** against Skatteverket
- **First IRL meetup** (OpenSverige) in Stockholm
- **frilanspengen.se** — next launch, target 1 June 2026
- **agent.opensverige.se** — flagship of the OpenSverige community; first Swedish agent-readiness scanner; pre-Cloudflare raw server; makes sites agent-market-ready

### Tried first (transparent fails)

- **caught:** Kammaren's municipal tax table — 4 municipalities matched, 286 were wrong. Test agent caught it before release. Apology first, fix in parallel.
- **aborted:** Bookkeeping system for Swedish AB. Market saturated, no wedge. Lesson: find moat before code.
- **aborted:** Self-documented to death. More markdown files than code. Ship, measure, document later.

### Positioning decisions

- ~~digital designer~~ → **headless designer** — "digital designer" placed him among 500 Figma-specialists he is not
- ~~Figma perfectionist~~ → **tool-jumper** — right tool per task (Claude, Cursor, Photopea, Flora, Figma) — not religion
- ~~searching ads~~ → **building publicly** — 7 years without a portfolio; shipping weekly beats writing CVs
- ~~closing the code~~ → **AGPL-3.0 open source** — agencies and accountants must be able to read the code before trusting it

### Path (tiers)

- **tier 00** — AMF · in-house · closed
- **tier 01** — solo · 4 products live · *you are here*
- **tier 02** — community · OpenSverige growing
- **tier 03** — partnership · coming

### FAQs (machine-readable)

- **Söker du anställning?** (Are you seeking employment?) — Yes. Builds anyway, every week. Employed or solo, on the job or on the side. *Creativity doesn't choose employer.*
- **Vad gör en "headless designer" egentligen?** (What does a headless designer actually do?) — Designs without executing themselves. Specs, rules, eval-sets. Agents do the pixel work. The designer holds direction.
- **AGPL-3.0 — hur tjänar du pengar?** (AGPL-3.0 — how do you make money?) — License is free. Agencies and accountants who want to integrate without AGPL contamination buy a commercial license. Picks & shovels.

### Stack on /headless

Claude · Cursor · Linear · OpenRouter · Photopea · Flora · Figma · Bun · AGPL-3.0 · Mac Mini M4

### Thesis

> Outsource execution. Keep understanding.

The meta-case is the proof that the thesis ships: a single designer specifies and orchestrates; agents and code execute; the result is four live products, audited and open, in four months solo.

---

*headless.design is a pilot. Format, prices, and pipeline are all on the table. If something feels off, email me directly.*
