How we built compost.fi

Brand, logo, and landing page — built with Claude Code, custom skills, and Gemini image generation.

Opus 4.5 + Haiku 4.5 Gemini 3 Pro image gen ~2,600 API calls 26 SVG iterations
The stack

Models, skills, and tools

The actual infrastructure behind the conversation.

Language models
Claude Opus 4.5
Primary model. ~2,300 API calls for main conversation, code generation, SVG iteration, and design decisions.
Claude Haiku 4.5
Subagent model. ~340 calls for file exploration, codebase search, and parallel task execution.
Image generation
Gemini 3 Pro Image Preview
Via custom "Art" skill with nano-banana-pro model alias. Generated reference images that guided the SVG logo direction. Called through a TypeScript CLI tool (Generate.ts) that wraps the Google API.
Custom skills
Art skill
Image generation workflows for editorial illustrations, diagrams, and brand assets. Routes requests to appropriate models and handles output to ~/Downloads for preview.
frontend-design skill
Guidelines for production-grade interfaces. Emphasizes distinctive aesthetics, avoiding "AI slop" — generic fonts, purple gradients, cookie-cutter layouts.
Infrastructure
</>
Raw SVG
Logo iterations as bezier path data. No design software — version-controlled, diffable code.
Git
Design history as commit log. Every iteration tracked.
Vercel
Deploy on push. The HTML file is the product.
Phase 1

Brand philosophy

Before a single pixel, we wrote a manifesto.

The session started with a philosophy document — Quiet Infrastructure — that defined the brand's visual language before any code was written. This became the reference point for every subsequent decision about color, typography, and composition.

Capital moves like water through soil — invisible, patient, essential. This philosophy treats financial infrastructure not as machinery but as living systems: layers accumulating, value percolating downward and upward simultaneously, growth emerging from decomposition.

— compost-philosophy.md

The palette must feel institutional yet alive, as if a Swiss private bank discovered permaculture.

— on color

Words are sparse, clinical, confident. Thin sans-serifs in small point sizes — the typography of serious infrastructure, not marketing.

— on type
Key principles

Horizontal bands — sedimentary layers suggesting accumulation

Earth tones anchor; living green appears sparingly

Negative space isn't emptiness but potential

Asymmetry creates interest; balance creates trust

Compost as metaphor: decay becoming fertility

The eye moves slowly — compounding cannot be rushed

Phase 2.5

Wordmark exploration

Testing case, weight, and tracking to find the right typographic voice.

With the mark finalized, the next question: how does text pair with it? We explored case variations, font weights, and letter-spacing systematically — testing each combination on dark and light backgrounds before committing.

Case variations
Weight variations
Letter-spacing
Decision

Weight 200 with 0.12em tracking. Reads as quiet infrastructure — the typography of Swiss private banks, not crypto marketing. The ultra-light weight forces the eye to slow down.

Domain treatment — compost.fi

The .fi TLD becomes a design element. We tested muted, green (tying to the shoot), and weight differentiation.

Lockup system

Three lockup variants for different contexts: horizontal for headers and inline use, stacked for square formats, and text-only for footers and inline references.

compost.fi
Horizontal — headers
compost.fi
Stacked — square formats
compost.fi
Text only — footers
In context

Testing lockups in realistic contexts — footer, docs header — to ensure they hold up at actual usage sizes.

Footer
Docs header
compost.fi
Overview Architecture API
Phase 3

Design system

CSS variables, type scale, and lockup variants extracted into reusable tokens.

Colors
Background
#0a0a0a
Subtle
#111111
Accent
#4dcf6a
Accent dim
#2ba84a
Pot top
#8a7d6d
Pot mid
#5c5347
Pot base
#3d3630
Text primary
#e5e5e5
Typography — Outfit
The capital formation layer
Outfit 200 — Headlines — 2.5rem
Infrastructure-grade yield from Hyperliquid builder markets.
Outfit 300 — Body — 1.125rem
PROTOCOL ENFORCED   •   NO PROTOCOL TOKEN   •   FULL TRANSPARENCY
Outfit 400 — Labels — 0.875rem uppercase
Lockups
compost.fi
Horizontal
COMPOST
Stacked
Compost Finance Capital Formation Layer
Formal
Phase 4

Landing page

From brief to production through conversation-driven iteration.

The first draft was conventional — hero, value prop, features, CTA. It worked but felt generic. The frontend-design skill's guidance against "AI slop" aesthetics prompted a rethink.

Human feedback in the loop

"Too safe. Reads like a template." — This kind of directional feedback drove the iteration. The AI can execute fast, but the human has to know what's wrong.

The page was restructured around a 4-beat narrative instead of a feature list. The philosophy document provided the framing — tension between patience and opportunity.

Beat 1
The Setup
The opportunity is massive
Beat 2
The Barrier
But you need $20M
Beat 3
The Problem
Even then — which market?
Beat 4
The Answer
Compost: diversified access

The shoot animation became the signature moment — the mark growing organically on page load, reinforcing the brand's core metaphor of growth from decomposition.

Shoot growth animation — CSS
.hero-mark .shoot {
  animation: grow 2s ease-out forwards;
  transform-origin: bottom center;
}

@keyframes grow {
  0% {
    opacity: 0;
    transform: scaleY(0) translateY(20px);
  }
  50% {
    opacity: 1;
  }
  100% {
    opacity: 1;
    transform: scaleY(1) translateY(0);
  }
}
Phase 5

Platform debugging

Browser quirks, meta tags, and image format requirements.

iOS Safari viewport. The hero section used 100vh which doesn't account for Safari's address bar. Fixed with min-height: -webkit-fill-available as a fallback.

Meta tag debugging. Open Graph images need absolute URLs and specific dimensions. Twitter cards have their own tag format. We tested with multiple sharing debuggers until previews rendered correctly across Twitter, Telegram, and iMessage.

SVG to PNG for Telegram. Telegram doesn't render SVG in link previews. We exported the logo to PNG at 1200×630 for the OG image — the only raster asset in the entire project.

Favicon at multiple sizes. SVG favicon for modern browsers, with the mark simplified at 16px and 32px sizes so the leaf detail remains legible at small scales.

Version history

Git timeline

15 commits from philosophy to production.

init: brand philosophy and design principles
compost-philosophy.md — Quiet Infrastructure manifesto
logo: v1–v3 early explorations
Ball, two-leaf, single stem — finding the shape language
logo: v4–v5 proportion experiments
Tight spacing, four-layer pot variants
logo: v6 first organic curves
Bezier paths replace geometric shapes — the breakthrough
logo: v7–v9 refined leaf shape
Combined stem + leaf as one flowing path, darker stem overlay
logo: v10–v17 proportions and color
Tightening curves, adjusting pot ratios, color exploration
logo: v18–v26 final refinements
Saturation tuning, tighter leaf curl — production mark
wordmark: case, weight, tracking exploration
All caps + 200 weight + 0.12em. Domain treatment with .fi green accent
lockups: horizontal, stacked, text-only variants
Context mockups for footer and docs header. Breakout mark for headers
design-system: colors, typography, lockups
CSS variables, Outfit weights, horizontal/stacked/formal variants
landing: first complete page draft
Hero, value prop, how-it-works, CTA — correct but safe
landing: bold redesign with narrative structure
4-beat story arc, tension-driven scroll, market cards
landing: shoot animation and scroll reveals
CSS keyframes for mark growth, intersection observer for sections
fix: iOS Safari viewport, meta tags, OG image
-webkit-fill-available, absolute OG URLs, Twitter card tags
ship: favicon, SVG→PNG for Telegram, final polish
Multi-size favicon, raster OG export, noise texture overlay
Technical notes

How it worked

The mechanics of the AI-assisted workflow.

01

Image gen → SVG workflow

Gemini generated reference images to establish visual direction. Those references were then translated into hand-coded SVG through iterative conversation. The AI-generated image was a sketch, not a deliverable.

02

Skills as packaged expertise

Custom skills (Art, frontend-design) bundled domain knowledge and tool integrations. The Art skill wrapped image gen APIs; frontend-design provided aesthetic guardrails. Reusable across projects.

03

Subagents for parallelism

Haiku handled file exploration and search while Opus focused on creative work. ~340 subagent calls for codebase exploration meant faster context-gathering without burning expensive tokens.

04

SVG as version-controlled design

Raw path data instead of binary assets. Each logo iteration was a diffable code change. No Illustrator exports, no asset pipeline — the SVG code is the design file.

05

Human taste, AI execution

"Tighten the leaf curve." "Too saturated." "Reads like a template." Every creative decision was human-directed. The AI wrote code fast; the human judged whether it was good.

06

~2,600 API calls total

Not a quick demo — a real working session. Philosophy document, 26 logo iterations, brand guidelines, complete landing page, responsive CSS, animations, meta tags, and this process page.