Single source of truth for WiseChef brand identity across every sub-product. Update this repo, every product gets the change through a reviewable PR.
assets/brand/ Logo PNGs (mark-{16..512}.png), favicon.svg, og-image.png
tokens/ Design tokens — colors, fonts, radii, shadows, spacing
index.js JS/TS-friendly object exports
index.d.ts TypeScript declarations
tokens.css CSS custom properties (--wc-*)
tailwind/preset.cjs Tailwind preset wiring all tokens as wc-* classes
consumers.json Registry of every product repo that consumes this package
.github/workflows/
ci.yml Validate on every push/PR
propagate.yml On `vX.Y.Z` tag → open bump PRs in every consumer
That's it. No npm registry, no auth tokens, works for public clones and CI runners alike.
import { colors, brand, fonts } from '@wisechef/brand';
console.log(brand.bookingUrl);
// → 'https://calendar.app.google/P9J9oaiemtHdsvG99'@import '@wisechef/brand/tokens.css';
body { background: var(--wc-bg); color: var(--wc-text); }
.cta { box-shadow: var(--wc-shadow-pill-cta); }// tailwind.config.cjs
module.exports = {
presets: [require('@wisechef/brand/tailwind-preset')],
content: [/* your globs */],
};Then use bg-wc-bg, text-wc-accent, border-wc-border, shadow-wc-pill-cta, rounded-wc-pill, etc.
// Vite/Astro: import the path
import logoSrc from '@wisechef/brand/assets/brand/mark-96.png';
// Or copy at build-time (recommended for products that need favicon at /):
// pnpm exec cp node_modules/@wisechef/brand/assets/brand/* public/brand/- Open a PR in this repo: edit a token, swap a logo PNG, add a new
--wc-*variable. - CI runs
scripts/validate.mjs— checks asset existence, JS↔CSS parity, consumers.json shape. - Merge to main.
- Cut a release tag:
git tag v1.1.0 && git push --tags. - The
propagate.ymlworkflow fires automatically:- Validates the package
- Reads
consumers.json - Opens
chore(brand): bump @wisechef/brand → v1.1.0PRs in every consumer repo
- Each consumer's own CI runs against the bump PR. Adam reviews + merges per product. Products with auto-deploy ship live on merge.
No surprise auto-merges. Every consumer gets a reviewable PR. Adam stays in the loop on what brand change lands where, when.
- Patch (1.0.x) — bug fixes, asset re-exports, doc-only.
- Minor (1.x.0) — additive: new tokens, new components, new assets. Consumers using
^1.0.0upgrade automatically on next install. - Major (x.0.0) — breaking: token rename, asset removal, component API change. Consumer bump PR is intentionally diff-noisy so reviewers see the cost.
Edit consumers.json:
{
"name": "my-new-product",
"repo": "wisechef-ai/my-new-product",
"default_branch": "main",
"stack": "astro|react-vite|next|sveltekit|...",
"package_json_path": "package.json",
"production_url": "https://my-new-product.wisechef.ai",
"deploy_workflow": ".github/workflows/deploy.yml",
"notes": "..."
}Then open a PR. Once merged, the next brand release will fan out to your new consumer.
The PAT (WISECHEF_BRAND_PROPAGATE_PAT) needs contents: write + pull-requests: write on the new repo — add it in the fine-grained PAT settings.
Adam, 2026-04-25: "Create a meta repo from which our every sub-products are compound and created and we won't lose track on multiple offers we are doing + there will be a place where we store our brand motives/assets/etc."
The trigger was a shipped-but-broken design rollout: wisechef.ai/visibility (and every other inner page) was missing the toque logo, while rescue.wisechef.ai had it. Three separate repos = three drifting brands.
This repo is the contract. If you're shipping a new sub-product, your nav, your favicon, your colors come from here. If something looks off, fix it here once.
# Inside the consumer repo:
pnpm link --global ../wisechef-brand
# or, in package.json:
# "@wisechef/brand": "link:../wisechef-brand"When done, pnpm install to restore the git-URL dep.
Internal — WiseChef sub-products only.