const { useState, useEffect, useRef } = React;
/* ------------------------------- Tweak defaults ------------------------------- */
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"palette": "honeyMoss",
"heroLayout": "split",
"showMarquee": true,
"showSplash": true,
"embedVideos": false
}/*EDITMODE-END*/;
// Palettes pulled from the logo (cream/yellow ground + paint splash colors).
// Each palette defines: bg (page), ink (text), accent (primary), accent2 (secondary), tags (3 tag colors).
const PALETTES = {
stainedGlass: {
name: "Stained Glass",
bg: "#F5E9C8", paper: "#FAF3DD",
ink: "#1A1410", inkSoft: "#3A2F26",
accent: "#2E5BD8", accent2: "#3FA85C",
tags: ["#E2412A", "#2E5BD8", "#3FA85C"],
},
cobaltLeaf: {
name: "Cobalt & Leaf",
bg: "#F5E9C8", paper: "#FAF3DD",
ink: "#1A1410", inkSoft: "#3A2F26",
accent: "#2E5BD8", accent2: "#F2A93B",
tags: ["#2E5BD8", "#3FA85C", "#F2A93B"],
},
emberAmber: {
name: "Ember & Amber",
bg: "#F5E9C8", paper: "#FAF3DD",
ink: "#1A1410", inkSoft: "#3A2F26",
accent: "#E2412A", accent2: "#F2A93B",
tags: ["#E2412A", "#F2A93B", "#3FA85C"],
},
meadow: {
name: "Meadow",
bg: "#F5E9C8", paper: "#FAF3DD",
ink: "#1A1410", inkSoft: "#3A2F26",
accent: "#3FA85C", accent2: "#2E5BD8",
tags: ["#3FA85C", "#2E5BD8", "#F2A93B"],
},
inkwell: {
name: "Inkwell",
bg: "#F5E9C8", paper: "#FAF3DD",
ink: "#1A1410", inkSoft: "#3A2F26",
accent: "#1A1410", accent2: "#E2412A",
tags: ["#1A1410", "#E2412A", "#F2A93B"],
},
honeyMoss: {
name: "Honey & Moss",
bg: "#F5E9C8", paper: "#FAF3DD",
ink: "#1A1410", inkSoft: "#3A2F26",
accent: "#F2A93B", accent2: "#3FA85C",
tags: ["#F2A93B", "#3FA85C", "#2E5BD8"],
},
};
/* ------------------------------- Icons ------------------------------- */
const I = {
yt: (props) => (
),
ig: (props) => (
),
tt: (props) => (
),
shop: (props) => (
),
play: (props) => (
),
arrow: (props) => (
),
};
/* ------------------------------- Data ------------------------------- */
const VIDEOS = [
{ id: "CL8XI_ae3Qo", title: "Painting blossoms onto cobalt glass", tag: "Latest", duration: "12 min" },
{ id: "t1do9qbKfXg", title: "Layering color: glass painting basics", tag: "Tutorial", duration: "9 min" },
{ id: "EGxLsbUgsCs", title: "A wine glass becomes a garden", tag: "Studio", duration: "15 min" },
];
const PRODUCTS = [
{ name: "Hand-painted vase, no. 04", category: "Originals", price: "$148", color: "p1" },
{ name: "Wildflower wine glass set", category: "Sets of two", price: "$96", color: "p2" },
{ name: "Botanical pitcher", category: "Originals", price: "$210", color: "p3" },
];
/* ------------------------------- Components ------------------------------- */
function Nav({ accent }) {
return (
);
}
function Hero({ accent, accent2, tags = [], showSplash, layout }) {
return (
Hi, I'm the artist behind Glass Art Lab. I paint flowers, leaves and small wild things onto vases, glasses and pitchers — and I film every step on YouTube so you can paint along.
Brushstrokes
that turn glass
into a garden.
I started painting on glass because the surface refuses to behave. Paint pools, slides, catches the light wrong, then suddenly catches it perfectly — and there's a flower where there wasn't one before. I never quite know what a piece will look like until the last layer is dry.
Every video on the channel is filmed in my home studio, usually with the cat doing laps in the background. I share the messy parts too — the wobbly first lines, the colors that didn't work, the things I had to scrape off and start over. That's the part I think makes painting feel possible.
If you'd like to paint along, the channel is the best place to start. If you'd like to take home an original, the shop is opening soon. Either way — thank you for being here.
A few favorites from the channel. New tutorials and studio sessions go up most Fridays — subscribe so you don't miss them.
Past pieces, studio shots, and works-in-progress — a window into the workbench.
A small batch of hand-painted pieces, signed and packed in the studio. When the shop opens, this is where you'll find them.
Once a month, I send a note with what's drying on the workbench, what's heading to the shop, and what video is up next. No noise — just glass.