← back to NationalPaperHangers
UX_CREATIVE_BACKLOG.md
141 lines
# Unique UX backlog — National Paper Hangers
Brainstormed 2026-05-05 against the brief: ideas a luxury wallcovering trade
audience would notice that NO generic installer directory (Houzz, Thumbtack,
Angi, Yelp) has. Bias toward craft-specific signals.
**Already shipped this session:**
2 of these landed today — see "In flight / shipped" below.
---
## 1. "In the Seams" portfolio — detail-shot tabs
**Problem:** Generic portfolios show hero shots. In wallcovering, the *seam,
corner, and ceiling-line* are where craft is visible. A designer scanning a
silk install judges the studio in 5 seconds by whether the seam ghost is
controlled.
**MVP:** Add `detail_seam_url`, `detail_corner_url`, `detail_ceiling_url`
columns to `installer_portfolio`. On the public profile portfolio gallery,
each card has 4 tabs: "Big picture / In the seams / In the corners / At the
ceiling." Empty tabs hide gracefully. Admin profile gets matching upload
fields.
**Why no one has this:** Houzz/Angi optimize for hero-image scroll, not for
trade-buyer scrutiny. This explicitly invites scrutiny — luxury trade rewards
that.
---
## 2. Brand-Trained badges with verification dropdown
**Problem:** "Verified" is meaningless to a designer specifying a $4K/roll
de Gournay. They want to know: "has this installer been TRAINED by de Gournay?"
**MVP:** Replace `accreditations TEXT[]` UI with a structured
`installer_credentials(installer_id, brand, year_issued, year_expires,
certificate_scan_url)` table. Each badge on the profile is clickable; opens a
small modal with cert scan + dates. Inline upload in admin profile gates
behind ops review for the "Brand-Trained" claim (high signal, high fraud
incentive).
**Why no one has this:** Generic directories handle accreditations as flat
text. Making them structured + verifiable + clickable is a specifically
luxury-trade move.
---
## 3. "This Paper" peer-installer commentary *(SHIPPED 2026-05-10 — schema + 5 seed threads + public read-only list/detail + verified-installer comment submission + ops moderation + installer-profile contribution count + helpful votes with IP-hash idempotency)*
**Problem:** Wallcovering knowledge lives in the heads of 3,000 working
installers globally. Most papers (de Gournay Earlham, Fromental Bois,
Phillip Jeffries Manila Hemp) have install quirks (drop %, paste type,
soak time, seam matching). That tribal knowledge is invisible online.
**MVP:** New tables `paper_threads(slug, brand, paper_name, sku)` and
`paper_comments(thread_id, user_id, body, helpful_count)`. Thread pages are
public; comments are read-only for non-installers (verified
`installer_members.role IN ('owner','member')`). On installer profiles, show
a "12 contributions to paper threads" stat. Designers see which installers
are knowledge contributors — strong selection signal.
**Why no one has this:** Trade communities exist on private Slacks or IG
DMs. Making it the public-facing infrastructure of the directory captures
the entire surface.
---
## 4. Equipment Fleet card *(SHIPPED 2026-05-05)*
**Problem:** Most directories ask "what kind of work do you do?" — wallcovering
designers actually need to know "can you reach my 22ft entryway?" Equipment
inventory is decisive for high-end residential and hospitality.
**MVP:** `installers.equipment JSONB` with `max_reach_ft`, `lift_type`
(extension_ladder | scaffold | scissor_lift | boom_lift), `paper_table`
(none | folding | dedicated 60" | dedicated 72"+), `dust_extraction`,
`vehicle` (van | truck | trailer-equipped). Public profile shows a structured
"Studio Capacity" block. Admin profile has a structured editor.
**Why no one has this:** Contractor directories optimize for "I have a
truck." Wallcovering studios distinguish themselves by ladder height + table
length; surfacing it is the differentiator.
---
## 5. Live COI download (designer-addressed PDF) *(SHIPPED v0 2026-05-10 — no auto-PDF, broker still issues; structured request + 3-way email fan-out + admin inbox)*
**Problem:** In luxury commercial + hospitality, the design firm's primary
insurance requires the installer to be named as additional-insured on a
fresh COI for every job. Today this is a 3-day phone-tag exercise; the
designer has to call the installer, who calls their broker, who emails a PDF.
**MVP:** Installer uploads insurance metadata once (carrier, policy number,
limits, expiry). Designers click "Request COI" on profile, fill name +
address + project, and get a PDF generated on-demand with the right party
named additional-insured. Either auto-generated from a stored template or
auto-emailed to the broker for sign-off.
**Why no one has this:** Insurance is treated as a yes/no signal everywhere
else. Making the COI itself the deliverable is a category move.
---
## 6. Structured booking brief replacing the textarea *(parts in /book already)*
**Problem:** /book asks "tell us about your project" — useless. The studio
arrives without the right tools and bills hourly to figure it out.
**MVP:** Replace the existing single textarea on /book with a structured
brief: paper brand+SKU (autocomplete from a curated list), room dimensions,
ceiling height, surface state (new plaster / painted / wallpaper-to-remove),
known issues (electrical box near focal wall, plumbing knockout). The
installer arrives prepped. **Partially implemented** — current /book has
`material`, `square_feet`, `surfaces` text fields. Upgrade them to structured
inputs and add the missing categories.
**Why no one has this:** Generic directories optimize for low form friction.
Luxury trade rewards depth — a 12-field structured brief signals competence
on both sides.
---
## 7. "Acceptance rate" pride badge *(SHIPPED 2026-05-05)*
**Problem:** A studio booked solid enough to be selective is the studio you
want. Generic directories celebrate hustle ("Available now!"). Luxury trade
celebrates selectivity.
**MVP:** Compute over rolling 365d:
`accepted = count(bookings WHERE status='confirmed' OR status='completed')`,
`declined = count(bookings WHERE status='declined')`, `total = accepted +
declined`, `acceptance_rate = accepted / total`. Display on profile as
"Accepts X% of inquiries — Y bookings booked, Z declined" only when total
≥ 10 (else hide for new studios). Becomes a positive selectivity signal,
not a negative one.
**Why no one has this:** Most platforms hide rejection rates because they
read as bad. In luxury trade, a 60% acceptance rate is a status signal —
the studio is busy and choosy.