← back to Robet Site
re-theme to ROBERT BARBER (business identified): hero BOOK A CUT + barber-pole SVG, services Cut/Fade/Beard&Shave, HairSalon JSON-LD, barber OG card, copy throughout; Lighthouse held 100s, 9/9 tests
c065dfb3ad9a7797b8eeb8363139ad12651ffb39 · 2026-06-30 04:37:03 -0700 · Steve
Files touched
M config.jsonM public/hero.svgM public/index.htmlM public/og.pngM tests/api.test.mjs
Diff
commit c065dfb3ad9a7797b8eeb8363139ad12651ffb39
Author: Steve <steve@designerwallcoverings.com>
Date: Tue Jun 30 04:37:03 2026 -0700
re-theme to ROBERT BARBER (business identified): hero BOOK A CUT + barber-pole SVG, services Cut/Fade/Beard&Shave, HairSalon JSON-LD, barber OG card, copy throughout; Lighthouse held 100s, 9/9 tests
---
config.json | 8 ++++----
public/hero.svg | 24 ++++++++++++++++--------
public/index.html | 37 +++++++++++++++++++------------------
public/og.png | Bin 41769 -> 45444 bytes
tests/api.test.mjs | 2 +-
5 files changed, 40 insertions(+), 31 deletions(-)
diff --git a/config.json b/config.json
index dd78bad..ac5bb30 100644
--- a/config.json
+++ b/config.json
@@ -1,14 +1,14 @@
{
"brand": "ROBERT",
- "tagline": "BOOK A MEETING.",
- "heroHeadline": "BOOK\nA\nMEETING.",
- "heroSub": "Pick a time, tell me what you need, get a straight answer. No back-and-forth.",
+ "tagline": "BOOK A CUT.",
+ "heroHeadline": "BOOK\nA\nCUT.",
+ "heroSub": "Walk in sharp. Pick a time, pick your cut — in and out, no waiting around.",
"heroImage": "/hero.svg",
"contact": {
"email": "info@designerwallcoverings.com",
"phone": "",
"address": "",
- "hours": "By appointment — pick a slot below"
+ "hours": "By appointment — pick a chair below"
},
"scheduling": {
"owner": "info@designerwallcoverings.com",
diff --git a/public/hero.svg b/public/hero.svg
index b4176a1..444b705 100644
--- a/public/hero.svg
+++ b/public/hero.svg
@@ -1,11 +1,17 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1000" preserveAspectRatio="xMidYMid slice" role="img" aria-label="Brutalist concrete structure">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1000" preserveAspectRatio="xMidYMid slice" role="img" aria-label="Brutalist barbershop">
<defs>
<linearGradient id="conc" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#3a3a38"/>
<stop offset="1" stop-color="#15140f"/>
</linearGradient>
<pattern id="dots" width="22" height="22" patternUnits="userSpaceOnUse">
- <circle cx="3" cy="3" r="2.4" fill="#f5f500" fill-opacity="0.18"/>
+ <circle cx="3" cy="3" r="2.4" fill="#f5f500" fill-opacity="0.16"/>
+ </pattern>
+ <!-- barber pole: red / paper / ink diagonal stripes -->
+ <pattern id="pole" width="120" height="120" patternUnits="userSpaceOnUse" patternTransform="rotate(35)">
+ <rect width="120" height="40" y="0" fill="#ff2e1f"/>
+ <rect width="120" height="40" y="40" fill="#f3f1ea"/>
+ <rect width="120" height="40" y="80" fill="#0a0a0a"/>
</pattern>
<filter id="grain"><feTurbulence type="fractalNoise" baseFrequency="0.9" numOctaves="2" stitchTiles="stitch"/>
<feColorMatrix type="saturate" values="0"/><feComponentTransfer><feFuncA type="linear" slope="0.06"/></feComponentTransfer>
@@ -20,19 +26,21 @@
<rect x="120" y="140" width="430" height="720" fill="#4a4945"/>
<rect x="120" y="140" width="430" height="120" fill="#f5f500"/>
<rect x="600" y="320" width="300" height="540" fill="#2b2a26"/>
- <rect x="950" y="80" width="520" height="500" fill="#56544e"/>
- <rect x="950" y="600" width="520" height="320" fill="#ff2e1f"/>
+ <rect x="1180" y="80" width="290" height="840" fill="#56544e"/>
+ </g>
+
+ <!-- the barber pole -->
+ <g stroke="#0a0a0a" stroke-width="8">
+ <rect x="980" y="120" width="120" height="760" fill="url(#pole)"/>
+ <rect x="965" y="80" width="150" height="50" fill="#c9c6bd"/> <!-- cap -->
+ <rect x="965" y="870" width="150" height="50" fill="#c9c6bd"/> <!-- base -->
</g>
<!-- girders -->
<g stroke="#0a0a0a" stroke-width="10" stroke-linecap="square">
<line x1="0" y1="900" x2="1600" y2="900"/>
<line x1="335" y1="140" x2="335" y2="860"/>
- <line x1="1210" y1="80" x2="1210" y2="580"/>
</g>
- <!-- diagonal brace -->
- <polygon points="600,860 900,320 940,340 640,880" fill="#f5f500" stroke="#0a0a0a" stroke-width="4"/>
-
<rect width="1600" height="1000" filter="url(#grain)" opacity="0.5"/>
</svg>
diff --git a/public/index.html b/public/index.html
index 283a6a3..5b1eece 100644
--- a/public/index.html
+++ b/public/index.html
@@ -3,8 +3,8 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>ROBERT · Book a Meeting</title>
- <meta name="description" content="Book a meeting with Robert. Pick a time, get a straight answer." />
+ <title>ROBERT · Barber</title>
+ <meta name="description" content="Book a cut with Robert — barber. Pick a time, pick your cut, walk in sharp." />
<link rel="canonical" href="https://robert.agentabrams.com/" />
<link rel="preconnect" href="https://venturacorridor.com" crossorigin />
<meta name="theme-color" content="#0a0a0a" />
@@ -15,8 +15,8 @@
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:site_name" content="ROBERT" />
- <meta property="og:title" content="ROBERT · Book a Meeting" />
- <meta property="og:description" content="Pick a time, tell me what you need, get a straight answer. No back-and-forth." />
+ <meta property="og:title" content="ROBERT · Barber" />
+ <meta property="og:description" content="Walk in sharp. Pick a time, pick your cut — in and out." />
<meta property="og:url" content="https://robert.agentabrams.com/" />
<meta property="og:image" content="https://robert.agentabrams.com/og.png" />
<meta property="og:image:width" content="1200" />
@@ -24,23 +24,24 @@
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
- <meta name="twitter:title" content="ROBERT · Book a Meeting" />
- <meta name="twitter:description" content="Pick a time, tell me what you need, get a straight answer." />
+ <meta name="twitter:title" content="ROBERT · Barber" />
+ <meta name="twitter:description" content="Walk in sharp. Pick a time, pick your cut." />
<meta name="twitter:image" content="https://robert.agentabrams.com/og.png" />
<!-- structured data (data block; not executed → exempt from CSP script-src) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
- "@type": "Person",
+ "@type": "HairSalon",
"name": "Robert",
"url": "https://robert.agentabrams.com/",
"image": "https://robert.agentabrams.com/og.png",
"email": "info@designerwallcoverings.com",
- "description": "Book a meeting with Robert. Pick a time, get a straight answer.",
+ "description": "Robert — barber. Cuts, fades, beard line-ups and hot-towel shaves. Book a chair online.",
+ "priceRange": "$$",
"potentialAction": {
"@type": "ScheduleAction",
- "name": "Book a meeting",
+ "name": "Book a cut",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://venturacorridor.com/book?owner=info@designerwallcoverings.com",
@@ -84,26 +85,26 @@
<div class="hero-inner">
<h1 id="heroHeadline">BOOK
A
-MEETING.</h1>
- <p id="heroSub">Pick a time, tell me what you need, get a straight answer. No back-and-forth.</p>
- <a class="cta" href="#booking">Book a slot →</a>
+CUT.</h1>
+ <p id="heroSub">Walk in sharp. Pick a time, pick your cut — in and out, no waiting around.</p>
+ <a class="cta" href="#booking">Book a chair →</a>
</div>
</section>
<!-- work / services -->
<section id="work">
- <span class="kicker">/ what you get</span>
- <h2 class="sec-h">An appointment that pays off.</h2>
+ <span class="kicker">/ the work</span>
+ <h2 class="sec-h">Sharp every time.</h2>
<div class="grid3">
- <div class="cell"><h3>Consult</h3><p>Bring the problem. Leave with a clear direction and concrete next steps.</p></div>
- <div class="cell"><h3>Review</h3><p>We go through the specifics together — options, tradeoffs, and timeline.</p></div>
- <div class="cell"><h3>Decide</h3><p>Walk away with a decision and a plan — not a maybe.</p></div>
+ <div class="cell"><h3>Cut</h3><p>Scissor or clipper, tailored to your head — not a template. Wash and style included.</p></div>
+ <div class="cell"><h3>Fade</h3><p>Skin, low, mid, or high. Clean lines, blended right, no harsh edges.</p></div>
+ <div class="cell"><h3>Beard & Shave</h3><p>Line-up, trim, or a hot-towel straight-razor shave. Sharp and close.</p></div>
</div>
</section>
<!-- booking: Smart Scheduling -->
<section id="booking">
- <span class="kicker">/ smart scheduling</span>
+ <span class="kicker">/ book a chair</span>
<h2 class="sec-h">Pick a time.</h2>
<div class="embed-box" id="embedBox"></div>
<p class="mono" style="margin-top:14px">
diff --git a/public/og.png b/public/og.png
index 22503c2..32c29b6 100644
Binary files a/public/og.png and b/public/og.png differ
diff --git a/tests/api.test.mjs b/tests/api.test.mjs
index 3deb6aa..d6d04d4 100644
--- a/tests/api.test.mjs
+++ b/tests/api.test.mjs
@@ -90,7 +90,7 @@ test('homepage embeds valid JSON-LD with a booking action', async () => {
const m = html.match(/<script type="application\/ld\+json">([\s\S]*?)<\/script>/);
assert.ok(m, 'ld+json block present');
const j = JSON.parse(m[1]); // throws if invalid → test fails
- assert.equal(j['@type'], 'Person');
+ assert.equal(j['@type'], 'HairSalon');
assert.equal(j.potentialAction['@type'], 'ScheduleAction');
assert.match(j.potentialAction.target.urlTemplate, /venturacorridor\.com\/book/);
});
← 2ffa1a4 loop ledger: round3 items (7)+(4) done — ROUND 3 COMPLETE (8
·
back to Robet Site
·
ledger: barber re-theme noted 9b96ab4 →