Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 50 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,8 +121,57 @@ jobs:
# 1% tolerance at threshold 0.1 accommodates resvg native binary variation across architectures.
run: bun run .github/scripts/compare-og.mjs /tmp/og-ref/og-x64.png /tmp/og-arm64.png

publish:
demo-probe:
needs: verify
runs-on: [self-hosted, Linux, X64]
timeout-minutes: 20
steps:
- name: checkout
uses: actions/checkout@v4
with:
submodules: false
fetch-depth: 1

- name: setup-bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.2.x
no-cache: true

- name: install
run: bun install --frozen-lockfile

- name: build
run: bun run build

- name: install-demo
working-directory: examples/demo
run: bun install --frozen-lockfile

- name: build-demo
working-directory: examples/demo
env:
VITE_BASE: /vBrand/
run: bun run build

- name: playwright-install
run: npx playwright install chromium

- name: test-e2e
run: bun run test:e2e

- name: probe-verdict-gate
if: always()
run: |
if [ -f /tmp/vbrand-probe-results.json ]; then
node scripts/probe-verdict-gate.mjs /tmp/vbrand-probe-results.json
else
echo 'UNGROUNDED-CLAIM: 0 probes, 0 bugs, 0/3 axes covered'
exit 1
fi

publish:
needs: [verify, demo-probe]
if: startsWith(github.ref, 'refs/tags/v')
runs-on: [self-hosted, Linux, X64]
steps:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ vbrand/.cache/
.playwright-cli/
.vbrand/
examples/demo/test-results/
/test-results/

src/ssr/tailwind.css
src/ssr/tailwind-bundle.ts
3 changes: 2 additions & 1 deletion .interface-design/system.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ Table uses `borderCollapse: 'collapse'` with a 2px bottom border on thead, 1px o
## Component Patterns

### Badge
Confidence pill: white text on `CONFIDENCE_COLOR[level]` background; `borderRadius: 4`, `padding: '2px 8px'`, `fontSize: 11`, `fontWeight: 700`, `letterSpacing: 1`.
Confidence pill: white text on `CONFIDENCE_COLOR[level]` background; `borderRadius: '4px'`, `padding: '2px 8px'`, `fontSize: 11`, `fontWeight: 700`, `letterSpacing: 1`.
Note: borderRadius is always expressed as a string `'4px'` throughout the codebase (not numeric `4`).

### FieldRow
Table row with `CONFIDENCE_BG[confidence]` background. Columns: field name (monospace), badge, value (word-break), source/reason (muted).
Expand Down
5 changes: 3 additions & 2 deletions examples/demo/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>vBrand 0.4.0-alpha.4 - adaptive themed demo</title>
<meta name="description" content="vBrand 0.4.0-alpha.4 adaptive themed demo: load any brand via fixture, URL, GitHub repo, or npm package; select from 4 app-type templates; edit composition live. fixture: sources are offline-reliable." />
<title>vBrand - adaptive themed demo</title>
<meta name="description" content="vBrand adaptive themed demo: load any brand via fixture, URL, GitHub repo, or npm package; select from 4 app-type templates; edit composition live. Stack + CMS substrate + deploy-target axes flexed at WOW. fixture: sources are offline-reliable." />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600&amp;family=Inter:wght@300;400;500;600;700&amp;family=JetBrains+Mono:wght@400;500&amp;display=swap" rel="stylesheet" />
Expand Down
2 changes: 1 addition & 1 deletion examples/demo/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@booga/vbrand-demo",
"version": "0.4.0-alpha.4.2",
"version": "0.4.0-alpha.5",
"private": true,
"type": "module",
"scripts": {
Expand Down
1 change: 1 addition & 0 deletions examples/demo/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export default defineConfig({
retries: process.env['CI'] ? 2 : 0,
reporter: [
['list'],
['json', { outputFile: '/tmp/vbrand-probe-results.json' }],
[path.join(__dirname, 'tests/runtime-probe/verdict-reporter.ts')],
],
use: {
Expand Down
23 changes: 17 additions & 6 deletions examples/demo/postcss.config.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
// SPDX-License-Identifier: MIT
// Copyright (c) 2026 bvasilenko
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
import { createRequire } from 'node:module';

const require = createRequire(import.meta.url);

function hasPackage(name) {
try {
require.resolve(name);
return true;
} catch {
return false;
}
}

const plugins = { tailwindcss: {} };
if (hasPackage('autoprefixer')) plugins.autoprefixer = {};

export default { plugins };
30 changes: 30 additions & 0 deletions examples/demo/public/cms-fixtures/payload-collections.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"collections": [
{
"slug": "pages",
"fields": [
"landing.hero.heading",
"landing.hero.eyebrow",
"landing.hero.description",
"landing.hero.primaryCta.label",
"landing.features.heading",
"landing.cta.heading",
"landing.cta.description",
"landing.cta.primaryCta.label",
"landing.footer.copyright",
"marketing.hero.heading",
"marketing.hero.eyebrow",
"marketing.hero.description",
"marketing.testimonials.heading",
"marketing.pricing.heading",
"marketing.cta.primaryCta.label",
"docs.sidebar.heading",
"docs.article.title",
"docs.toc.heading",
"dashboard.sidebar.heading",
"dashboard.stats.heading",
"dashboard.grid.heading"
]
}
]
}
134 changes: 134 additions & 0 deletions examples/demo/public/cms-fixtures/payload-pages.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
{
"docs": [
{
"slug": "stripe",
"content": {
"landing.hero.heading": "Stripe",
"landing.hero.eyebrow": "Financial infrastructure to grow your revenue.",
"landing.hero.description": "Payments and billing infrastructure for internet businesses",
"landing.hero.primaryCta.label": "Get started",
"landing.features.heading": "What defines Stripe",
"landing.cta.heading": "Build with Stripe",
"landing.cta.description": "Payments and billing infrastructure for internet businesses",
"landing.cta.primaryCta.label": "Get started",
"landing.footer.copyright": "Copyright 2026 Stripe",
"marketing.hero.heading": "Stripe",
"marketing.hero.eyebrow": "Financial infrastructure to grow your revenue.",
"marketing.hero.description": "Payments and billing infrastructure for internet businesses",
"marketing.testimonials.heading": "What teams say about Stripe",
"marketing.pricing.heading": "Simple pricing for Stripe brand ops",
"marketing.cta.primaryCta.label": "Get started",
"docs.sidebar.heading": "Stripe",
"docs.article.title": "Stripe brand guide",
"docs.toc.heading": "Stripe on this page",
"dashboard.sidebar.heading": "Stripe",
"dashboard.stats.heading": "Brand stats",
"dashboard.grid.heading": "Color palette"
}
},
{
"slug": "vercel",
"content": {
"landing.hero.heading": "Vercel",
"landing.hero.eyebrow": "Build and deploy on the AI Cloud.",
"landing.hero.description": "Frontend cloud platform for deploying and scaling web applications",
"landing.hero.primaryCta.label": "Get started",
"landing.features.heading": "What defines Vercel",
"landing.cta.heading": "Build with Vercel",
"landing.cta.description": "Frontend cloud platform for deploying and scaling web applications",
"landing.cta.primaryCta.label": "Get started",
"landing.footer.copyright": "Copyright 2026 Vercel",
"marketing.hero.heading": "Vercel",
"marketing.hero.eyebrow": "Build and deploy on the AI Cloud.",
"marketing.hero.description": "Frontend cloud platform for deploying and scaling web applications",
"marketing.testimonials.heading": "What teams say about Vercel",
"marketing.pricing.heading": "Simple pricing for Vercel brand ops",
"marketing.cta.primaryCta.label": "Get started",
"docs.sidebar.heading": "Vercel",
"docs.article.title": "Vercel brand guide",
"docs.toc.heading": "Vercel on this page",
"dashboard.sidebar.heading": "Vercel",
"dashboard.stats.heading": "Brand stats",
"dashboard.grid.heading": "Color palette"
}
},
{
"slug": "linear",
"content": {
"landing.hero.heading": "Linear",
"landing.hero.eyebrow": "The product development system for teams and agents.",
"landing.hero.description": "Issue tracking and project management for high-performance software teams",
"landing.hero.primaryCta.label": "Get started",
"landing.features.heading": "What defines Linear",
"landing.cta.heading": "Build with Linear",
"landing.cta.description": "Issue tracking and project management for high-performance software teams",
"landing.cta.primaryCta.label": "Get started",
"landing.footer.copyright": "Copyright 2026 Linear",
"marketing.hero.heading": "Linear",
"marketing.hero.eyebrow": "The product development system for teams and agents.",
"marketing.hero.description": "Issue tracking and project management for high-performance software teams",
"marketing.testimonials.heading": "What teams say about Linear",
"marketing.pricing.heading": "Simple pricing for Linear brand ops",
"marketing.cta.primaryCta.label": "Get started",
"docs.sidebar.heading": "Linear",
"docs.article.title": "Linear brand guide",
"docs.toc.heading": "Linear on this page",
"dashboard.sidebar.heading": "Linear",
"dashboard.stats.heading": "Brand stats",
"dashboard.grid.heading": "Color palette"
}
},
{
"slug": "notion",
"content": {
"landing.hero.heading": "Notion",
"landing.hero.eyebrow": "The AI workspace that works for you.",
"landing.hero.description": "All-in-one workspace for notes, wikis, databases, and project management",
"landing.hero.primaryCta.label": "Get started",
"landing.features.heading": "What defines Notion",
"landing.cta.heading": "Build with Notion",
"landing.cta.description": "All-in-one workspace for notes, wikis, databases, and project management",
"landing.cta.primaryCta.label": "Get started",
"landing.footer.copyright": "Copyright 2026 Notion",
"marketing.hero.heading": "Notion",
"marketing.hero.eyebrow": "The AI workspace that works for you.",
"marketing.hero.description": "All-in-one workspace for notes, wikis, databases, and project management",
"marketing.testimonials.heading": "What teams say about Notion",
"marketing.pricing.heading": "Simple pricing for Notion brand ops",
"marketing.cta.primaryCta.label": "Get started",
"docs.sidebar.heading": "Notion",
"docs.article.title": "Notion brand guide",
"docs.toc.heading": "Notion on this page",
"dashboard.sidebar.heading": "Notion",
"dashboard.stats.heading": "Brand stats",
"dashboard.grid.heading": "Color palette"
}
},
{
"slug": "github",
"content": {
"landing.hero.heading": "GitHub",
"landing.hero.eyebrow": "The future of building happens together.",
"landing.hero.description": "Software development and collaboration platform for over 100 million developers",
"landing.hero.primaryCta.label": "Get started",
"landing.features.heading": "What defines GitHub",
"landing.cta.heading": "Build with GitHub",
"landing.cta.description": "Software development and collaboration platform for over 100 million developers",
"landing.cta.primaryCta.label": "Get started",
"landing.footer.copyright": "Copyright 2026 GitHub",
"marketing.hero.heading": "GitHub",
"marketing.hero.eyebrow": "The future of building happens together.",
"marketing.hero.description": "Software development and collaboration platform for over 100 million developers",
"marketing.testimonials.heading": "What teams say about GitHub",
"marketing.pricing.heading": "Simple pricing for GitHub brand ops",
"marketing.cta.primaryCta.label": "Get started",
"docs.sidebar.heading": "GitHub",
"docs.article.title": "GitHub brand guide",
"docs.toc.heading": "GitHub on this page",
"dashboard.sidebar.heading": "GitHub",
"dashboard.stats.heading": "Brand stats",
"dashboard.grid.heading": "Color palette"
}
}
]
}
Loading
Loading