Projects Live demo · brandcrafter.app

Generates

Brand Crafter

Define a brand once — palette, type, voice — then generate every asset it needs: 38 types across image, video, copy, and code. Reach it from a browser, a CLI, an API, an MCP server, or an agent skill.

What it is

BrandCrafter turns one brand into everything it needs. You set the identity once — palette, type, voice — and it generates 38 kinds of on-brand asset: logos and the marks derived from them, social cards and posts, posters and thumbnails, website heroes and OG images, print and product mockups, short video, and the copy and code to match. Each is a named, typed workflow you invoke by name — from a browser PWA, a scriptable CLI, an HTTP API, an MCP server any AI host can call, or an installable agent skill.

Every generation degrades to a deterministic local fallback — a real SVG or text asset — when a key, quota, or model is unavailable, so a request always resolves to something usable. One Google API key is enough to generate; a second provider key brings OpenAI’s image models into the routing, and with no key at all it still runs entirely on the deterministic path.

A public demo runs at brandcrafter.app: a frontend-only build that replays the real onboarding and the real generation pipeline, spending nothing and holding no keys. The full app is not deployed yet — its target is Supabase, one Render web service, and Cloudflare in front.

How it works

One brand, every asset

Set the identity once; each asset is built on the canonical mark and palette, in dependency order.

A dependency-ordered pipeline draws the logo first, promotes it to the canonical mark, then builds every downstream asset on it — favicon, social, print, web, video, copy — so all 38 asset types stay on one identity instead of drifting apart.

A deterministic fallback

When a key, quota, or model is missing, generation degrades to a local SVG or text asset.

Every generation path ends in a deterministic local fallback: with no key or quota, BrandCrafter returns a real SVG or text asset instead of an error. Routing is hybrid — Gemini and OpenAI each lead where they are stronger and either falls back to the other — and below both sits the local path.

One core, every surface

The same generation core drives a PWA, a CLI, an HTTP API, an MCP server, and an agent skill.

BrandCrafter runs as a browser PWA for interactive work, a Commander CLI other tools can script, an /api/v1 HTTP API with per-brand keys, an MCP server any AI host can call by tool name, and an installable agent skill — all over one core, so behaviour is identical whichever way it is invoked.

What it generates

Watch it build a brand — in order

A replay of the product’s own demo, beat for beat: the create form fills itself in, a suggested palette is shuffled until it settles, the identity assembles, a suggested tagline is approved, then the logo is drawn — and every remaining asset is built on it, in dependency order.

the product's own demo · replayed

Features

Identity marks

One canonical logo, then favicon, app icon, avatar, and stickers derived from it — no drift.

Social & content

Social cards, Instagram posts, thumbnails, posters, and ad copy in your brand voice.

Motion & video

Animated hero loops and ambient background clips, cropped to seamless loops via Veo 3.1.

Web & app imagery

Website heroes, OG images, web banners, cover photos, and email headers.

Print & product

Business cards, flyers, letterhead, and your mark on real product mockups.

Code & copy

CSS themes, Tailwind config, and React snippets, plus bios, value props, and landing copy.

38asset types
5surfaces — PWA · CLI · API · MCP · skill
0keys required to run
17nodes in the brand pipeline

It never leaves you empty-handed.

Every asset type — image, video, copy, code — ends in a deterministic local fallback. If a model call can’t run, BrandCrafter still hands you a real, usable asset instead of an error. Your brand never gets stuck on a blank screen.

Built with

  • Next.js 15
  • React 19
  • TypeScript
  • tRPC
  • TanStack Query
  • Zod
  • Tailwind CSS v4
  • Radix UI
  • Supabase
  • Commander
  • pkgroll
  • sharp
  • imagetracerjs
  • Model Context Protocol
  • Gemini 3 Pro Image
  • Google Veo 3.1
  • OpenAI gpt-image-2
  • Vitest
  • Playwright

Engineering

The deterministic seam

The AI sits behind a boundary that always has a backup. If a model call can’t run, BrandCrafter generates a real asset locally — so the app never returns an error in place of an asset.

Prompt templates and provider clients (Gemini 2.5 Flash text, Gemini 2.5 Flash Image / Gemini 3 Pro Image, Veo 3.1 Fast video, OpenAI gpt-image-2) sit behind Zod-validated boundaries; routing is per-asset-type and either provider covers the other on quota or failure, then the chain degrades to a deterministic local path — SVG marks vectorised with imagetracerjs, raster work matted with sharp — so every request resolves to a validated asset.

One core, every surface

The same engine powers the browser app, the command line, the API, AI hosts, and an agent skill — nothing is duplicated between them.

A Next.js 15 App Router + tRPC server drives the PWA; a Commander CLI compiled with pkgroll calls the same core in-process; an /api/v1 REST surface exposes bearer-authenticated per-brand keys, hashed at rest; `brandcrafter mcp` serves the same engine over the Model Context Protocol as typed tools; and an installable agent skill wraps the CLI.

A verified, dependency-ordered pipeline

Assets are generated in the right order and checked before they ship — the logo first, then everything built on it, each one passing a real quality check.

A 17-node DAG (validated acyclic; array order is a topological sort) drives generation; logos are verified flat (assessFlatness rejects drop-shadow/blur and degrades to SVG) and every palette-bearing surface renders from a WCAG-AA-checked palette computed in OKLCH.

Built to scale into SaaS

The multi-tenant groundwork — accounts, credits, plans, and usage tracking — is already built locally; going live is a matter of wiring the paid services.

Local-first account auth (scrypt + signed-cookie sessions, OAuth seams), a per-account credit economy with subscription plans and a trial, usage/cost telemetry, and a single spend gate are implemented behind a StorageAdapter seam so the local JSONL store swaps for Supabase without a rebuild; the deploy target is fixed — Supabase, one Render web service, Cloudflare in front — with Stripe, Supabase, OAuth, and social-posting keys as documented operator-wired gates.

Visit BrandCrafterbrandcrafter.app

Have a dream project?

Tell me your idea and I’ll send you a quote.