← back to Wallpapercontractor
polish: distinct tagline + meta + Wc wordmark + procurement FAQ
98e6513187b9ecd563b8c6e40beb33a149a5ebee · 2026-05-13 15:38:17 -0700 · Steve Abrams
- SITE.tagline + description: bonded-crew specific vs generic template copy
- canonical + og:* meta tags in head partial
- Wc wordmark (serif W + italic c) in site header
- Procurement FAQ (4 items) section + styles
- Hero readability audit: PASS (APCA Lc 99.9 desktop / 100.3 mobile)
Deployed to Kamatera (pm2 wallpapercontractor restarted, port 9930)
Files touched
M public/css/styles.cssM server.jsM views/index.ejsM views/partials/head.ejs
Diff
commit 98e6513187b9ecd563b8c6e40beb33a149a5ebee
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed May 13 15:38:17 2026 -0700
polish: distinct tagline + meta + Wc wordmark + procurement FAQ
- SITE.tagline + description: bonded-crew specific vs generic template copy
- canonical + og:* meta tags in head partial
- Wc wordmark (serif W + italic c) in site header
- Procurement FAQ (4 items) section + styles
- Hero readability audit: PASS (APCA Lc 99.9 desktop / 100.3 mobile)
Deployed to Kamatera (pm2 wallpapercontractor restarted, port 9930)
---
public/css/styles.css | 91 ++++++++++++++++++++++++++++++++++++++++++++++---
server.js | 4 +--
views/index.ejs | 25 ++++++++++++++
views/partials/head.ejs | 10 +++++-
4 files changed, 122 insertions(+), 8 deletions(-)
diff --git a/public/css/styles.css b/public/css/styles.css
index 27529b3..7580b1a 100644
--- a/public/css/styles.css
+++ b/public/css/styles.css
@@ -56,15 +56,32 @@ a:hover { text-decoration: underline; }
.brand { display: flex; align-items: center; gap: 10px; font-weight: 700; color: var(--fg); }
.brand:hover { text-decoration: none; }
.brand-mark {
- width: 28px; height: 28px; border-radius: 6px;
- background: linear-gradient(135deg, var(--accent), #8a4a22);
+ width: 34px; height: 34px;
+ display: inline-flex; align-items: baseline; justify-content: center;
+ font-family: "Cormorant Garamond", Georgia, serif;
+ line-height: 1;
+ color: var(--accent);
position: relative;
+ padding-top: 4px;
+}
+.brand-mark-w {
+ font-size: 26px; font-weight: 500;
+ letter-spacing: -0.04em;
+}
+.brand-mark-c {
+ font-size: 20px; font-weight: 500; font-style: italic;
+ margin-left: -3px;
+ color: var(--fg);
}
.brand-mark::after {
- content: ""; position: absolute; inset: 4px;
- border: 2px solid rgba(255,255,255,.5); border-radius: 3px;
+ content: ""; position: absolute; left: 2px; right: 2px; bottom: 0;
+ height: 1px; background: var(--accent); opacity: .7;
+}
+.brand-name {
+ font-family: "Cormorant Garamond", Georgia, serif;
+ font-size: 22px; font-weight: 500;
+ letter-spacing: -0.01em;
}
-.brand-name { font-size: 18px; letter-spacing: -0.01em; }
.site-nav { display: flex; gap: 18px; margin-left: auto; }
.site-nav a { color: var(--fg); font-size: 14px; }
.theme-toggle {
@@ -330,6 +347,70 @@ a:hover { text-decoration: underline; }
.long-form h2 { font-size: 18px; margin-top: 28px; }
.long-form p { color: var(--fg); }
+/* ─── Procurement FAQ ─── */
+.faq {
+ margin: 56px 0 0;
+ padding: 32px 30px;
+ background: var(--bg-elev);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ max-width: 920px;
+}
+.faq-head { margin-bottom: 18px; }
+.faq-eyebrow {
+ display: block;
+ font-size: 11px; text-transform: uppercase; letter-spacing: .14em;
+ color: var(--fg-muted); font-weight: 600;
+ margin-bottom: 6px;
+}
+.faq-h2 {
+ font-family: "Cormorant Garamond", "Playfair Display", Georgia, serif;
+ font-weight: 500; font-size: 28px;
+ margin: 0; color: var(--fg);
+ letter-spacing: -0.01em;
+}
+.faq-item {
+ border-top: 1px solid var(--border);
+ padding: 14px 0;
+}
+.faq-item:first-of-type { border-top: 1px solid var(--border); }
+.faq-item summary {
+ cursor: pointer; list-style: none;
+ font-size: 16px; font-weight: 600;
+ color: var(--fg);
+ padding: 4px 28px 4px 0;
+ position: relative;
+ letter-spacing: -0.005em;
+}
+.faq-item summary::-webkit-details-marker { display: none; }
+.faq-item summary::after {
+ content: "+";
+ position: absolute; right: 4px; top: 2px;
+ font-family: "Cormorant Garamond", Georgia, serif;
+ font-size: 22px; font-weight: 400;
+ color: var(--accent);
+ transition: transform 200ms;
+}
+.faq-item[open] summary::after { content: "−"; }
+.faq-item summary:hover { color: var(--accent); }
+.faq-item p {
+ margin: 10px 0 4px;
+ font-size: 14.5px;
+ line-height: 1.65;
+ color: var(--fg-muted);
+ max-width: 780px;
+}
+.faq-foot {
+ margin: 22px 0 0;
+ padding-top: 18px;
+ border-top: 1px solid var(--border);
+ font-size: 13px;
+}
+@media (max-width: 600px) {
+ .faq { padding: 24px 20px; margin-top: 40px; }
+ .faq-item summary { font-size: 15px; }
+}
+
.seo-block { margin-top: 60px; padding-top: 30px; border-top: 1px solid var(--border); max-width: 860px; }
.seo-block h2 { font-size: 18px; margin: 0 0 12px; color: var(--fg-muted); text-transform: uppercase; letter-spacing: .06em; }
.seo-block p { color: var(--fg-muted); font-size: 14px; }
diff --git a/server.js b/server.js
index 52ae104..67518d5 100644
--- a/server.js
+++ b/server.js
@@ -42,8 +42,8 @@ const allCities = Array.from(new Set(contractors.map(c => c.city))).sort();
const SITE = {
domain: 'wallpapercontractor.com',
name: 'Wallpaper Contractor',
- tagline: 'Bonded, insured, commercial-scale wallpaper installation contractors',
- description: 'Find bonded and insured commercial wallpaper installation contractors for hospitality, retail, corporate, healthcare, and multifamily projects across the United States. Vetted contractors who carry general liability, workers comp, and surety bonding for large-format commercial wallcovering installs.',
+ tagline: 'The bonded-crew index for commercial wallcovering installation',
+ description: 'A curated index of bonded, insured wallcovering installation contractors built for procurement teams, GCs, and design firms staffing 30,000-square-foot scopes — hospitality, healthcare, multifamily, retail, corporate, government. Single-installer paperhangers route separately.',
email: 'info@wallpapercontractor.com',
phone: '888-373-4564',
address: 'Designer Wallcoverings, 15442 Ventura Bl #102, Sherman Oaks CA 91403',
diff --git a/views/index.ejs b/views/index.ejs
index 2ac015e..7eb6d27 100644
--- a/views/index.ejs
+++ b/views/index.ejs
@@ -152,6 +152,31 @@
</ul>
<% } %>
+ <!-- ─── Procurement FAQ ─────────────────────────────────────────── -->
+ <section class="faq" aria-label="Procurement FAQ">
+ <div class="faq-head">
+ <span class="faq-eyebrow">For procurement & GCs</span>
+ <h2 class="faq-h2">Common procurement questions</h2>
+ </div>
+ <details class="faq-item">
+ <summary>What's the difference between a paperhanger and a wallcovering contractor?</summary>
+ <p>A paperhanger is a skilled single-installer trade — ideal for residential, boutique commercial, and detail-heavy work up to a few thousand square feet. A wallcovering contractor runs a bonded crew of 4–40 installers, carries general-liability insurance with limits sufficient for prime/sub agreements, files certified payroll on prevailing-wage jobs, and can mobilize for 30,000-square-foot scopes on hospitality, healthcare, and multifamily projects. Both have a place; they are not interchangeable on a commercial bid sheet.</p>
+ </details>
+ <details class="faq-item">
+ <summary>How do you verify bonding and insurance?</summary>
+ <p>Each listing reflects contractor-supplied surety bonding status, general-liability limit, and union affiliation as of the most recent update we received from the contractor. We do not act as a broker, and limits change. Before contracting work, request a current Certificate of Insurance and bond rider naming your project entity as additional insured, and verify directly with the surety on file. Use the filters above to narrow to bonded-only or insured-only listings as a starting point.</p>
+ </details>
+ <details class="faq-item">
+ <summary>Can a single installer take on a 30,000-square-foot job?</summary>
+ <p>Almost never on a commercial timeline. A solo paperhanger averages 80–120 linear yards per day in clean conditions. A 30,000 sqft scope is roughly 3,300 single-rolls; even at peak production, that's 4–6 months of one-installer labor, which collides with schedule, lift logistics, and prime-contract liability terms. Hospitality and healthcare GCs almost always require a crew contractor for scopes above ~5,000 sqft.</p>
+ </details>
+ <details class="faq-item">
+ <summary>What do Type II and Type III commercial wallcoverings mean for installer selection?</summary>
+ <p>Type II is medium-duty commercial vinyl (CCC-W-408D, 20–28 oz/lin yd) — the workhorse spec for hotel corridors, offices, and education. Type III is heavy-duty (28+ oz/lin yd) used in healthcare patient rooms, transit, and high-abrasion retail. Type III is heavier to hang, requires different adhesive open-time and seam treatment, and is less forgiving of substrate imperfection — confirm your contractor has recent Type III experience before awarding a Type III scope. Specialty installs (acoustic panels, leather, hand-painted, digital murals) are separate skill sets — filter by specialty above.</p>
+ </details>
+ <p class="faq-foot muted">Sourcing for an active bid? Email <a href="mailto:<%= site.email %>"><%= site.email %></a> with the scope sheet and we'll surface 3–5 contractors with the right region, segment, and bonding profile within one business day. Free service, no kickback.</p>
+ </section>
+
<section class="seo-block">
<h2>How this directory works</h2>
<p>Wallpaper Contractor is a curated index of commercial wallcovering installation contractors operating in the United States. Each listing maps the contractor's regional coverage, the project segments they actively work in (hospitality, luxury hotel, casino, resort, restaurant, multifamily, healthcare, education, corporate, retail, cruise, government), the wallcovering specialties they install (Type II commercial vinyl, Type III heavy-duty, antimicrobial, acoustic, grasscloth, silk, hand-painted murals, digital murals, leather wall panels, marine-grade), peak crew size, years in business, surety bonding status, general-liability insurance limits, and union affiliation. Use the filters above to narrow by region, segment, specialty, bonding status, or insurance status.</p>
diff --git a/views/partials/head.ejs b/views/partials/head.ejs
index 6a13158..da786a5 100644
--- a/views/partials/head.ejs
+++ b/views/partials/head.ejs
@@ -5,6 +5,12 @@
<meta name="viewport" content="width=device-width,initial-scale=1">
<title><%= title || (site.name + ' — ' + site.tagline) %></title>
<meta name="description" content="<%= description || site.description %>">
+<link rel="canonical" href="https://<%= site.domain %><%= typeof canonicalPath !== 'undefined' ? canonicalPath : '/' %>">
+<meta property="og:type" content="website">
+<meta property="og:site_name" content="<%= site.name %>">
+<meta property="og:title" content="<%= title || (site.name + ' — ' + site.tagline) %>">
+<meta property="og:description" content="<%= description || site.description %>">
+<meta property="og:url" content="https://<%= site.domain %>/">
<meta name="theme-color" content="#0e1c26">
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
<link rel="preconnect" href="https://fonts.googleapis.com">
@@ -35,7 +41,9 @@ gtag('config', '<%= site.ga_id %>');
<header class="site-header">
<div class="wrap header-row">
<a class="brand" href="/">
- <span class="brand-mark"></span>
+ <span class="brand-mark" aria-hidden="true">
+ <span class="brand-mark-w">W</span><span class="brand-mark-c">c</span>
+ </span>
<span class="brand-name"><%= site.name %></span>
</a>
<nav class="site-nav">
← e043f6c polish: editorial hero + 3-step matching explainer section
·
back to Wallpapercontractor
·
fix: add rel=noopener noreferrer to all target=_blank links eedf687 →