← back to Robet Site
pull from Booksy: booking → his Booksy page, hero → his real shop photo (strong scrim for readability), 20 portfolio photos in gallery, 5★ reviews section; Lighthouse P91/A100/BP100/SEO100, 9/9 tests
6d5052d31a926dd3e0ccc31906629b4a9860d56a · 2026-06-30 05:51:27 -0700 · Steve
Files touched
M config.jsonM public/app.jsA public/hero.jpgM public/index.htmlD public/photos/booksy-01.jpegD public/photos/booksy-02.jpegD public/photos/booksy-03.jpegD public/photos/booksy-04.jpegD public/photos/booksy-05.jpegD public/photos/booksy-06.jpegD public/photos/booksy-07.jpegD public/photos/booksy-08.jpegD public/photos/booksy-09.jpegD public/photos/booksy-10.jpegD public/photos/booksy-11.jpegD public/photos/booksy-12.jpegD public/photos/booksy-13.jpegD public/photos/booksy-14.jpegA public/photos/cut-001.jpgA public/photos/cut-002.jpgA public/photos/cut-003.jpgA public/photos/cut-004.jpgA public/photos/cut-005.jpgA public/photos/cut-006.jpgA public/photos/cut-007.jpgA public/photos/cut-008.jpgA public/photos/cut-009.jpgA public/photos/cut-010.jpgA public/photos/cut-011.jpgA public/photos/cut-012.jpgA public/photos/cut-013.jpgA public/photos/cut-014.jpgA public/photos/cut-015.jpgA public/photos/cut-016.jpgA public/photos/cut-017.jpgA public/photos/cut-018.jpgA public/photos/cut-019.jpgA public/photos/cut-020.jpgA public/reviews.jsonM public/styles.css
Diff
commit 6d5052d31a926dd3e0ccc31906629b4a9860d56a
Author: Steve <steve@designerwallcoverings.com>
Date: Tue Jun 30 05:51:27 2026 -0700
pull from Booksy: booking → his Booksy page, hero → his real shop photo (strong scrim for readability), 20 portfolio photos in gallery, 5★ reviews section; Lighthouse P91/A100/BP100/SEO100, 9/9 tests
---
config.json | 2 +-
public/app.js | 16 ++++++++++++++++
public/hero.jpg | Bin 0 -> 125301 bytes
public/index.html | 9 +++++++++
public/photos/booksy-01.jpeg | Bin 600964 -> 0 bytes
public/photos/booksy-02.jpeg | Bin 260207 -> 0 bytes
public/photos/booksy-03.jpeg | Bin 102789 -> 0 bytes
public/photos/booksy-04.jpeg | Bin 166904 -> 0 bytes
public/photos/booksy-05.jpeg | Bin 131322 -> 0 bytes
public/photos/booksy-06.jpeg | Bin 97096 -> 0 bytes
public/photos/booksy-07.jpeg | Bin 144747 -> 0 bytes
public/photos/booksy-08.jpeg | Bin 62401 -> 0 bytes
public/photos/booksy-09.jpeg | Bin 116070 -> 0 bytes
public/photos/booksy-10.jpeg | Bin 85492 -> 0 bytes
public/photos/booksy-11.jpeg | Bin 125655 -> 0 bytes
public/photos/booksy-12.jpeg | Bin 219011 -> 0 bytes
public/photos/booksy-13.jpeg | Bin 212265 -> 0 bytes
public/photos/booksy-14.jpeg | Bin 182614 -> 0 bytes
public/photos/cut-001.jpg | Bin 0 -> 400263 bytes
public/photos/cut-002.jpg | Bin 0 -> 157755 bytes
public/photos/cut-003.jpg | Bin 0 -> 137331 bytes
public/photos/cut-004.jpg | Bin 0 -> 197123 bytes
public/photos/cut-005.jpg | Bin 0 -> 164020 bytes
public/photos/cut-006.jpg | Bin 0 -> 132667 bytes
public/photos/cut-007.jpg | Bin 0 -> 325886 bytes
public/photos/cut-008.jpg | Bin 0 -> 156333 bytes
public/photos/cut-009.jpg | Bin 0 -> 269341 bytes
public/photos/cut-010.jpg | Bin 0 -> 195276 bytes
public/photos/cut-011.jpg | Bin 0 -> 283988 bytes
public/photos/cut-012.jpg | Bin 0 -> 479237 bytes
public/photos/cut-013.jpg | Bin 0 -> 464667 bytes
public/photos/cut-014.jpg | Bin 0 -> 401907 bytes
public/photos/cut-015.jpg | Bin 0 -> 172003 bytes
public/photos/cut-016.jpg | Bin 0 -> 218977 bytes
public/photos/cut-017.jpg | Bin 0 -> 283411 bytes
public/photos/cut-018.jpg | Bin 0 -> 244560 bytes
public/photos/cut-019.jpg | Bin 0 -> 275494 bytes
public/photos/cut-020.jpg | Bin 0 -> 237616 bytes
public/reviews.json | 12 ++++++++++++
public/styles.css | 12 +++++++++++-
40 files changed, 49 insertions(+), 2 deletions(-)
diff --git a/config.json b/config.json
index 4d5304c..c229582 100644
--- a/config.json
+++ b/config.json
@@ -3,7 +3,7 @@
"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",
+ "heroImage": "/hero.jpg",
"contact": {
"email": "robert@agentabrams.com",
"phone": "",
diff --git a/public/app.js b/public/app.js
index 9656c9a..dce6a6f 100644
--- a/public/app.js
+++ b/public/app.js
@@ -83,6 +83,22 @@
}
})();
+ // ── reviews from Booksy (public/reviews.json) ──
+ (async () => {
+ const grid = $('#reviewsGrid'); if (!grid) return;
+ let data = {};
+ try { data = await (await fetch('/reviews.json')).json(); } catch (_) { return; }
+ const link = $('#reviewsLink'); if (link && data.sourceUrl) link.href = data.sourceUrl;
+ const stars = (n) => '★'.repeat(n) + '☆'.repeat(5 - n);
+ grid.innerHTML = (data.items || []).map((r) =>
+ `<div class="review">
+ <div class="stars">${stars(r.rank)}</div>
+ <div class="who mono">${r.author}</div>
+ <div class="svc mono">${r.service}</div>
+ <div class="when mono">${r.date}</div>
+ </div>`).join('');
+ })();
+
// ── contact form ──
$('#contactForm').addEventListener('submit', async (e) => {
e.preventDefault();
diff --git a/public/hero.jpg b/public/hero.jpg
new file mode 100644
index 0000000..eed8111
Binary files /dev/null and b/public/hero.jpg differ
diff --git a/public/index.html b/public/index.html
index d34c298..e8b5e20 100644
--- a/public/index.html
+++ b/public/index.html
@@ -73,6 +73,7 @@
<a href="#work">Services</a>
<a href="#booking">Book</a>
<a href="#gallery">Gallery</a>
+ <a href="#reviews">Reviews</a>
<a href="#contact">Contact</a>
<a href="/admin">Admin</a>
</nav>
@@ -120,6 +121,14 @@ CUT.</h1>
<div class="gallery-grid" id="galleryGrid"></div>
</section>
+ <!-- reviews (from Booksy) -->
+ <section id="reviews">
+ <span class="kicker">/ reviews</span>
+ <h2 class="sec-h">5.0 on Booksy.</h2>
+ <div class="reviews-grid" id="reviewsGrid"></div>
+ <p class="mono" style="margin-top:18px"><a id="reviewsLink" href="#" target="_blank" rel="noopener noreferrer">Read all reviews on Booksy →</a></p>
+ </section>
+
<!-- contact -->
<section id="contact">
<span class="kicker">/ contact</span>
diff --git a/public/photos/booksy-01.jpeg b/public/photos/booksy-01.jpeg
deleted file mode 100644
index 3223c4f..0000000
Binary files a/public/photos/booksy-01.jpeg and /dev/null differ
diff --git a/public/photos/booksy-02.jpeg b/public/photos/booksy-02.jpeg
deleted file mode 100644
index 6ad4005..0000000
Binary files a/public/photos/booksy-02.jpeg and /dev/null differ
diff --git a/public/photos/booksy-03.jpeg b/public/photos/booksy-03.jpeg
deleted file mode 100644
index 1698dd8..0000000
Binary files a/public/photos/booksy-03.jpeg and /dev/null differ
diff --git a/public/photos/booksy-04.jpeg b/public/photos/booksy-04.jpeg
deleted file mode 100644
index 53bf8a2..0000000
Binary files a/public/photos/booksy-04.jpeg and /dev/null differ
diff --git a/public/photos/booksy-05.jpeg b/public/photos/booksy-05.jpeg
deleted file mode 100644
index ecd6c0e..0000000
Binary files a/public/photos/booksy-05.jpeg and /dev/null differ
diff --git a/public/photos/booksy-06.jpeg b/public/photos/booksy-06.jpeg
deleted file mode 100644
index 761713f..0000000
Binary files a/public/photos/booksy-06.jpeg and /dev/null differ
diff --git a/public/photos/booksy-07.jpeg b/public/photos/booksy-07.jpeg
deleted file mode 100644
index 84ca44a..0000000
Binary files a/public/photos/booksy-07.jpeg and /dev/null differ
diff --git a/public/photos/booksy-08.jpeg b/public/photos/booksy-08.jpeg
deleted file mode 100644
index f9238f6..0000000
Binary files a/public/photos/booksy-08.jpeg and /dev/null differ
diff --git a/public/photos/booksy-09.jpeg b/public/photos/booksy-09.jpeg
deleted file mode 100644
index b4986f9..0000000
Binary files a/public/photos/booksy-09.jpeg and /dev/null differ
diff --git a/public/photos/booksy-10.jpeg b/public/photos/booksy-10.jpeg
deleted file mode 100644
index 8dc115f..0000000
Binary files a/public/photos/booksy-10.jpeg and /dev/null differ
diff --git a/public/photos/booksy-11.jpeg b/public/photos/booksy-11.jpeg
deleted file mode 100644
index 45fcb9d..0000000
Binary files a/public/photos/booksy-11.jpeg and /dev/null differ
diff --git a/public/photos/booksy-12.jpeg b/public/photos/booksy-12.jpeg
deleted file mode 100644
index 6000d21..0000000
Binary files a/public/photos/booksy-12.jpeg and /dev/null differ
diff --git a/public/photos/booksy-13.jpeg b/public/photos/booksy-13.jpeg
deleted file mode 100644
index 70f0489..0000000
Binary files a/public/photos/booksy-13.jpeg and /dev/null differ
diff --git a/public/photos/booksy-14.jpeg b/public/photos/booksy-14.jpeg
deleted file mode 100644
index 2d72708..0000000
Binary files a/public/photos/booksy-14.jpeg and /dev/null differ
diff --git a/public/photos/cut-001.jpg b/public/photos/cut-001.jpg
new file mode 100644
index 0000000..db931ac
Binary files /dev/null and b/public/photos/cut-001.jpg differ
diff --git a/public/photos/cut-002.jpg b/public/photos/cut-002.jpg
new file mode 100644
index 0000000..5712f16
Binary files /dev/null and b/public/photos/cut-002.jpg differ
diff --git a/public/photos/cut-003.jpg b/public/photos/cut-003.jpg
new file mode 100644
index 0000000..5b93109
Binary files /dev/null and b/public/photos/cut-003.jpg differ
diff --git a/public/photos/cut-004.jpg b/public/photos/cut-004.jpg
new file mode 100644
index 0000000..c46fda4
Binary files /dev/null and b/public/photos/cut-004.jpg differ
diff --git a/public/photos/cut-005.jpg b/public/photos/cut-005.jpg
new file mode 100644
index 0000000..f3c8ffd
Binary files /dev/null and b/public/photos/cut-005.jpg differ
diff --git a/public/photos/cut-006.jpg b/public/photos/cut-006.jpg
new file mode 100644
index 0000000..51cd336
Binary files /dev/null and b/public/photos/cut-006.jpg differ
diff --git a/public/photos/cut-007.jpg b/public/photos/cut-007.jpg
new file mode 100644
index 0000000..d19d8ff
Binary files /dev/null and b/public/photos/cut-007.jpg differ
diff --git a/public/photos/cut-008.jpg b/public/photos/cut-008.jpg
new file mode 100644
index 0000000..4b320c6
Binary files /dev/null and b/public/photos/cut-008.jpg differ
diff --git a/public/photos/cut-009.jpg b/public/photos/cut-009.jpg
new file mode 100644
index 0000000..393b463
Binary files /dev/null and b/public/photos/cut-009.jpg differ
diff --git a/public/photos/cut-010.jpg b/public/photos/cut-010.jpg
new file mode 100644
index 0000000..22c2f2c
Binary files /dev/null and b/public/photos/cut-010.jpg differ
diff --git a/public/photos/cut-011.jpg b/public/photos/cut-011.jpg
new file mode 100644
index 0000000..ac27614
Binary files /dev/null and b/public/photos/cut-011.jpg differ
diff --git a/public/photos/cut-012.jpg b/public/photos/cut-012.jpg
new file mode 100644
index 0000000..52b08d8
Binary files /dev/null and b/public/photos/cut-012.jpg differ
diff --git a/public/photos/cut-013.jpg b/public/photos/cut-013.jpg
new file mode 100644
index 0000000..a506bec
Binary files /dev/null and b/public/photos/cut-013.jpg differ
diff --git a/public/photos/cut-014.jpg b/public/photos/cut-014.jpg
new file mode 100644
index 0000000..52812d1
Binary files /dev/null and b/public/photos/cut-014.jpg differ
diff --git a/public/photos/cut-015.jpg b/public/photos/cut-015.jpg
new file mode 100644
index 0000000..0806299
Binary files /dev/null and b/public/photos/cut-015.jpg differ
diff --git a/public/photos/cut-016.jpg b/public/photos/cut-016.jpg
new file mode 100644
index 0000000..64657ae
Binary files /dev/null and b/public/photos/cut-016.jpg differ
diff --git a/public/photos/cut-017.jpg b/public/photos/cut-017.jpg
new file mode 100644
index 0000000..952bf73
Binary files /dev/null and b/public/photos/cut-017.jpg differ
diff --git a/public/photos/cut-018.jpg b/public/photos/cut-018.jpg
new file mode 100644
index 0000000..92871fa
Binary files /dev/null and b/public/photos/cut-018.jpg differ
diff --git a/public/photos/cut-019.jpg b/public/photos/cut-019.jpg
new file mode 100644
index 0000000..18eff66
Binary files /dev/null and b/public/photos/cut-019.jpg differ
diff --git a/public/photos/cut-020.jpg b/public/photos/cut-020.jpg
new file mode 100644
index 0000000..7a9b61e
Binary files /dev/null and b/public/photos/cut-020.jpg differ
diff --git a/public/reviews.json b/public/reviews.json
new file mode 100644
index 0000000..a077b88
--- /dev/null
+++ b/public/reviews.json
@@ -0,0 +1,12 @@
+{
+ "source": "Booksy",
+ "sourceUrl": "https://booksy.com/en-us/431695_robert-yourbarber310-sherman-oaks-barber_barber-shop_134655_los-angeles",
+ "average": "5.0",
+ "items": [
+ { "rank": 5, "author": "Ben Huebscher", "service": "Haircut, Beard Trim, & Line up", "date": "2022-11-03" },
+ { "rank": 5, "author": "Mario Arellano Jr", "service": "Men's/Kids Haircut", "date": "2022-09-24" },
+ { "rank": 5, "author": "Armen Adzhemyan", "service": "Haircut, Beard Trim, & Line up", "date": "2022-09-16" },
+ { "rank": 5, "author": "Sam C", "service": "Men & Kids Haircut", "date": "2022-02-26" },
+ { "rank": 5, "author": "Mario Arellano", "service": "Men's Haircut", "date": "2021-11-03" }
+ ]
+}
diff --git a/public/styles.css b/public/styles.css
index f5064df..0b52917 100644
--- a/public/styles.css
+++ b/public/styles.css
@@ -95,7 +95,8 @@ a { color: inherit; }
.hero-img { position: absolute; inset: 0; background-size: cover; background-position: center;
filter: grayscale(0.2) contrast(1.1); }
.hero-img::after { content: ""; position: absolute; inset: 0;
- background: linear-gradient(0deg, rgba(10,10,10,.72) 0%, rgba(10,10,10,.15) 55%, rgba(10,10,10,.35) 100%); }
+ /* strong scrim so the wordmark stays readable over his real (bright) shop photo */
+ background: linear-gradient(0deg, rgba(10,10,10,.88) 0%, rgba(10,10,10,.5) 48%, rgba(10,10,10,.66) 100%); }
.hero-inner { position: relative; padding: 0 24px 48px; max-width: 1100px; }
.hero h1 {
color: var(--paper); text-transform: uppercase; white-space: pre-line;
@@ -172,6 +173,15 @@ section { padding: 70px 24px; border-bottom: var(--bord); }
.gallery-note { grid-column: 1 / -1; margin-top: 18px; font-weight: 600; }
.gallery-note code { background: var(--ink); color: var(--accent); padding: 2px 8px; }
+/* reviews */
+.reviews-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 0; }
+.review { border: var(--bord); padding: 24px; margin: -2.5px 0 0 -2.5px; background: var(--paper); }
+.review .stars { color: #c20010; font-size: 22px; letter-spacing: 2px; } /* AA 5.63:1 on paper */
+.review .who { font-size: 18px; font-weight: 800; margin-top: 8px; text-transform: uppercase; }
+.review .svc { font-weight: 600; margin-top: 4px; }
+.review .when { color: #555; font-size: 12px; margin-top: 8px; } /* AA 6.8:1 (was opacity .55 → failed) */
+.review:hover { background: var(--accent); }
+
/* "Designed by AgentAbrams" corner credit */
.credit {
position: fixed; right: 12px; bottom: 12px; z-index: 40;
← 75166d3 pull from Booksy: 14 real cut photos (inspiration + review_p
·
back to Robet Site
·
deeper Booksy pull: full review TEXT for all 5 reviews (clic bd5bc35 →