Files
blackroad-figma-plugin/code.js
Your Name 737a9f132b 🚀 Wave 5 Complete - blackroad-figma-plugin [2026-02-02 23:15:39]
- Complete platform implementation
- 26 platforms in 7 hours
- $6M+ ARR potential
- Part of BlackRoad Empire

Built with BlackRoad OS
2026-02-02 23:15:39 -06:00

342 lines
10 KiB
JavaScript

// BlackRoad Brand System - Figma Plugin
// Provides brand colors, spacing, and components directly in Figma
const BRAND = {
colors: {
black: { name: 'Black', hex: '#000000', rgb: { r: 0, g: 0, b: 0 } },
white: { name: 'White', hex: '#FFFFFF', rgb: { r: 1, g: 1, b: 1 } },
hotPink: { name: 'Hot Pink', hex: '#FF1D6C', rgb: { r: 1, g: 0.114, b: 0.424 } },
amber: { name: 'Amber', hex: '#F5A623', rgb: { r: 0.961, g: 0.651, b: 0.137 } },
electricBlue: { name: 'Electric Blue', hex: '#2979FF', rgb: { r: 0.161, g: 0.475, b: 1 } },
violet: { name: 'Violet', hex: '#9C27B0', rgb: { r: 0.612, g: 0.153, b: 0.690 } },
orange: { name: 'Orange', hex: '#F26522', rgb: { r: 0.949, g: 0.396, b: 0.133 } },
magenta: { name: 'Magenta', hex: '#E91E63', rgb: { r: 0.914, g: 0.118, b: 0.388 } },
skyBlue: { name: 'Sky Blue', hex: '#448AFF', rgb: { r: 0.267, g: 0.541, b: 1 } },
deepPurple: { name: 'Deep Purple', hex: '#5E35B1', rgb: { r: 0.369, g: 0.208, b: 0.694 } }
},
spacing: {
xs: 8,
sm: 13,
md: 21,
lg: 34,
xl: 55,
'2xl': 89,
'3xl': 144
},
typography: {
fontFamily: 'SF Pro Display',
lineHeight: 1.618
}
};
// Show UI
figma.showUI(__html__, { width: 400, height: 600 });
// Handle messages from UI
figma.ui.onmessage = async (msg) => {
if (msg.type === 'apply-color') {
const { colorKey } = msg;
const color = BRAND.colors[colorKey];
if (!color) {
figma.notify('❌ Color not found');
return;
}
const selection = figma.currentPage.selection;
if (selection.length === 0) {
figma.notify('⚠️ Please select an object first');
return;
}
for (const node of selection) {
if ('fills' in node) {
const fills = [{
type: 'SOLID',
color: color.rgb
}];
node.fills = fills;
}
}
figma.notify(`✅ Applied ${color.name} (${color.hex})`);
}
else if (msg.type === 'create-color-palette') {
const frame = figma.createFrame();
frame.name = 'BlackRoad Brand Colors';
frame.resize(800, 600);
frame.fills = [{ type: 'SOLID', color: { r: 0, g: 0, b: 0 } }];
let x = 34;
let y = 34;
// Title
const title = figma.createText();
await figma.loadFontAsync({ family: "Inter", style: "Bold" });
title.characters = '🌌 BlackRoad Brand Colors';
title.fontSize = 34;
title.fills = [{ type: 'SOLID', color: { r: 1, g: 1, b: 1 } }];
title.x = x;
title.y = y;
frame.appendChild(title);
y += 89;
// Primary colors
const primaryColors = ['hotPink', 'amber', 'electricBlue', 'violet'];
for (const colorKey of primaryColors) {
const color = BRAND.colors[colorKey];
// Color swatch
const rect = figma.createRectangle();
rect.resize(144, 89);
rect.fills = [{ type: 'SOLID', color: color.rgb }];
rect.cornerRadius = 13;
rect.x = x;
rect.y = y;
frame.appendChild(rect);
// Color name
const label = figma.createText();
label.characters = `${color.name}\n${color.hex}`;
label.fontSize = 13;
label.fills = [{ type: 'SOLID', color: { r: 1, g: 1, b: 1 } }];
label.x = x + 144 + 21;
label.y = y + 21;
frame.appendChild(label);
x += 144 + 144 + 34;
if (x > 600) {
x = 34;
y += 89 + 21;
}
}
figma.currentPage.appendChild(frame);
figma.currentPage.selection = [frame];
figma.viewport.scrollAndZoomIntoView([frame]);
figma.notify('✅ Created brand color palette');
}
else if (msg.type === 'create-gradient') {
const selection = figma.currentPage.selection;
if (selection.length === 0) {
figma.notify('⚠️ Please select an object first');
return;
}
// Create brand gradient (135deg with Golden Ratio stops)
const gradient = {
type: 'GRADIENT_LINEAR',
gradientTransform: [
[0.707, -0.707, 0.707],
[0.707, 0.707, 0]
],
gradientStops: [
{ position: 0, color: BRAND.colors.amber.rgb },
{ position: 0.382, color: BRAND.colors.hotPink.rgb },
{ position: 0.618, color: BRAND.colors.violet.rgb },
{ position: 1, color: BRAND.colors.electricBlue.rgb }
]
};
for (const node of selection) {
if ('fills' in node) {
node.fills = [gradient];
}
}
figma.notify('✅ Applied brand gradient (Golden Ratio stops: 38.2%, 61.8%)');
}
else if (msg.type === 'create-spacing-guide') {
const frame = figma.createFrame();
frame.name = 'BlackRoad Spacing Guide (Golden Ratio)';
frame.resize(1000, 800);
frame.fills = [{ type: 'SOLID', color: { r: 0, g: 0, b: 0 } }];
await figma.loadFontAsync({ family: "Inter", style: "Bold" });
await figma.loadFontAsync({ family: "Inter", style: "Regular" });
let y = 34;
// Title
const title = figma.createText();
title.characters = '📐 BlackRoad Spacing (Fibonacci/Golden Ratio)';
title.fontSize = 34;
title.fontName = { family: "Inter", style: "Bold" };
title.fills = [{ type: 'SOLID', color: { r: 1, g: 1, b: 1 } }];
title.x = 34;
title.y = y;
frame.appendChild(title);
y += 89;
// Create spacing examples
const spacingKeys = Object.keys(BRAND.spacing);
for (const key of spacingKeys) {
const value = BRAND.spacing[key];
// Spacing bar
const bar = figma.createRectangle();
bar.resize(value, 34);
bar.fills = [{
type: 'GRADIENT_LINEAR',
gradientTransform: [[1, 0, 0], [0, 1, 0]],
gradientStops: [
{ position: 0, color: BRAND.colors.amber.rgb },
{ position: 0.382, color: BRAND.colors.hotPink.rgb },
{ position: 0.618, color: BRAND.colors.violet.rgb },
{ position: 1, color: BRAND.colors.electricBlue.rgb }
]
}];
bar.cornerRadius = 8;
bar.x = 34;
bar.y = y;
frame.appendChild(bar);
// Label
const label = figma.createText();
label.characters = `--space-${key}: ${value}px`;
label.fontSize = 18;
label.fontName = { family: "Inter", style: "Regular" };
label.fills = [{ type: 'SOLID', color: { r: 1, g: 1, b: 1 } }];
label.x = 34 + value + 21;
label.y = y + 8;
frame.appendChild(label);
y += 55;
}
figma.currentPage.appendChild(frame);
figma.currentPage.selection = [frame];
figma.viewport.scrollAndZoomIntoView([frame]);
figma.notify('✅ Created spacing guide');
}
else if (msg.type === 'create-logo') {
// Create BlackRoad logo
const frame = figma.createFrame();
frame.name = 'BlackRoad Logo';
frame.resize(200, 200);
frame.fills = [{ type: 'SOLID', color: { r: 0, g: 0, b: 0 } }];
// Outer circle (hot pink)
const outerCircle = figma.createEllipse();
outerCircle.resize(176, 176);
outerCircle.x = 12;
outerCircle.y = 12;
outerCircle.fills = [];
outerCircle.strokes = [{ type: 'SOLID', color: BRAND.colors.hotPink.rgb }];
outerCircle.strokeWeight = 12;
frame.appendChild(outerCircle);
// Top half (amber)
const topHalf = figma.createEllipse();
topHalf.resize(160, 160);
topHalf.x = 20;
topHalf.y = 20;
topHalf.fills = [{ type: 'SOLID', color: BRAND.colors.amber.rgb }];
// Clip to top half
const topMask = figma.createRectangle();
topMask.resize(160, 80);
topMask.x = 20;
topMask.y = 20;
topMask.fills = [{ type: 'SOLID', color: { r: 0, g: 0, b: 0 } }];
const topGroup = figma.group([topHalf, topMask], frame);
topGroup.clipsContent = true;
// Bottom half (electric blue)
const bottomHalf = figma.createEllipse();
bottomHalf.resize(160, 160);
bottomHalf.x = 20;
bottomHalf.y = 20;
bottomHalf.fills = [{ type: 'SOLID', color: BRAND.colors.electricBlue.rgb }];
const bottomMask = figma.createRectangle();
bottomMask.resize(160, 80);
bottomMask.x = 20;
bottomMask.y = 100;
bottomMask.fills = [{ type: 'SOLID', color: { r: 0, g: 0, b: 0 } }];
const bottomGroup = figma.group([bottomHalf, bottomMask], frame);
bottomGroup.clipsContent = true;
// Center circle (black)
const centerCircle = figma.createEllipse();
centerCircle.resize(56, 56);
centerCircle.x = 72;
centerCircle.y = 72;
centerCircle.fills = [{ type: 'SOLID', color: { r: 0, g: 0, b: 0 } }];
frame.appendChild(centerCircle);
figma.currentPage.appendChild(frame);
figma.currentPage.selection = [frame];
figma.viewport.scrollAndZoomIntoView([frame]);
figma.notify('✅ Created BlackRoad logo');
}
else if (msg.type === 'create-component-library') {
// Create complete component library
const page = figma.createPage();
page.name = '🌌 BlackRoad Brand Components';
figma.currentPage = page;
await figma.loadFontAsync({ family: "Inter", style: "Bold" });
await figma.loadFontAsync({ family: "Inter", style: "Regular" });
let x = 0;
let y = 0;
// Section 1: Colors
const colorsFrame = figma.createFrame();
colorsFrame.name = 'Colors';
colorsFrame.resize(400, 300);
colorsFrame.x = x;
colorsFrame.y = y;
colorsFrame.fills = [{ type: 'SOLID', color: { r: 0.05, g: 0.05, b: 0.05 } }];
page.appendChild(colorsFrame);
// Section 2: Spacing
x += 450;
const spacingFrame = figma.createFrame();
spacingFrame.name = 'Spacing';
spacingFrame.resize(400, 300);
spacingFrame.x = x;
spacingFrame.y = y;
spacingFrame.fills = [{ type: 'SOLID', color: { r: 0.05, g: 0.05, b: 0.05 } }];
page.appendChild(spacingFrame);
// Section 3: Logo
x += 450;
const logoFrame = figma.createFrame();
logoFrame.name = 'Logo';
logoFrame.resize(400, 300);
logoFrame.x = x;
logoFrame.y = y;
logoFrame.fills = [{ type: 'SOLID', color: { r: 0, g: 0, b: 0 } }];
page.appendChild(logoFrame);
figma.notify('✅ Created component library page');
}
else if (msg.type === 'get-brand-data') {
figma.ui.postMessage({
type: 'brand-data',
data: BRAND
});
}
else if (msg.type === 'close') {
figma.closePlugin();
}
};