[object Object]

← 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

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 →