← back to NationalPaperHangers

PROCESS.md

122 lines

# NationalPaperHangers.com — Build Process

**Status:** scaffolding (2026-05-05)
**Owner:** Steve Abrams
**Domain:** nationalpaperhangers.com (DW already references it for non-LA installation referrals)
**Local path:** `~/Projects/NationalPaperHangers/`
**Port:** 9765 (main Express app — 9760 was already in use by smb-builder)
**Database:** `national_paper_hangers` (standalone PG, NOT in dw_unified)
**Email:** info@nationalpaperhangers.com via George (`http://localhost:9850`, account=info)

## What this is

A luxury wallcovering installer marketplace + scheduling platform. Two product surfaces:

1. **Public marketplace** — find / vet / book a verified installer for a wallcovering project
2. **Installer admin** — paid subscription dashboard where installers manage their profile, calendar, availability, and inbound bookings

The scheduling system is the monetization wedge: installers PAY (recurring subscription) for the calendar tool that lets consumers self-book installs into open slots.

## Architecture

```
Consumer → public site → installer profile → /book → calendar slot picker → booking confirmed
                                                              ↓
                                         Installer admin (paid) ← email + dashboard
```

Stack:
- Node.js + Express (consistent with DW family)
- PostgreSQL (standalone DB, schema versioned in `db/schema.sql`)
- EJS templates + vanilla JS (no React for MVP)
- bcrypt + express-session for installer auth
- Stripe Checkout for subscription billing (stub until key arrives)
- George Gmail agent for transactional email (`/api/send` w/ `?account=info`)
- pm2 process management (`national-paper-hangers`)
- Domain-suite MCP for nationalpaperhangers.com DNS (Cloudflare proxy + LE SSL)

## Build phases

### Phase 0 — foundation (this session)
- [x] mkdir
- [x] PROCESS.md (this file)
- [x] README.md, package.json, .env.example, .gitignore
- [x] db/schema.sql — full schema
- [x] server.js + lib/* + middleware
- [x] Public routes (home, find, profile)
- [x] Auth routes (signup, login, logout)
- [x] Admin routes (dashboard, calendar, profile, bookings, billing)
- [x] Booking API (slot calculator, create booking, cancel booking)
- [x] Views (luxury editorial templates)
- [x] CSS (black + ivory + oxblood + brass; dark/light toggle)
- [x] JS (calendar UIs)

### Phase 1 — wire up real services
- [ ] Provision PG database, run schema
- [ ] Stripe key in via `secrets` skill, wire live billing
- [ ] George email integration (already running, just point env)
- [ ] DNS for nationalpaperhangers.com (Cloudflare zone, LE SSL on Kamatera)
- [ ] Seed 5–10 installer profiles (verified, real-data style)

### Phase 2 — verification + trust
- [ ] COI / insurance upload flow
- [ ] Manual review queue for new installers
- [ ] Verified badge system w/ expiration tracking
- [ ] Code-of-conduct gate at signup

### Phase 3 — concierge intake
- [ ] Architect / hospitality brief wizard
- [ ] Staff shortlist tool
- [ ] Multi-installer quote comparison

### Phase 4 — payments + escrow
- [ ] Consumer deposit collection
- [ ] Milestone invoicing
- [ ] Payout splits to installers
- [ ] Refund / dispute workflows

### Phase 5 — growth
- [ ] Programmatic city pages (long-tail SEO)
- [ ] Material-specific landing pages
- [ ] Manufacturer / showroom co-branded portals
- [ ] Enterprise account roles (design firms, hospitality groups)

## Pricing (initial)

| Tier | Price | Includes |
|---|---|---|
| Basic listing | Free / invite-only | Profile only, no inbound leads, no calendar |
| Pro installer | $39 / mo or $399 / yr | Full profile, calendar, lead receipt, messaging |
| Signature installer | $149 / mo or $1,500 / yr | Pro + premium placement + concierge leads + portfolio features |
| Enterprise installer | $399 / mo+ | Team seats, territory controls, API/CRM export |
| Concierge match fee | 5–8 % of booked labor | Curated shortlist + staff oversight |

## Standing-rule compliance checklist

- [x] Local install → `~/Projects/NationalPaperHangers/` (rule: feedback_projects_home.md)
- [x] Process markdown written first (rule: feedback_suggest_process_md.md)
- [x] Dark/light toggle planned (rule: feedback_dark_light_toggle_standard.md)
- [x] Grid-search on find page (rule: feedback_every_site_grid_search.md)
- [x] Own info@ email (rule: feedback_every_site_info_email.md)
- [x] Default .com (rule: feedback_default_tld_com.md)
- [x] Standalone PG, not in dw_unified (NOT a DW micro-site, rule: feedback_dw_microsite_strict_scope.md)
- [x] Default launchd / pm2, not cloud (rule: feedback_no_cloud_agents.md)
- [x] No DNS touch on protected list (designerwallcoverings.com etc., rule: feedback_dns_donotouch.md)
- [ ] 3-agent QA loop before declaring "done" (rule: feedback_test_every_site_completion.md) — phase 1 gate
- [ ] CAN-SPAM + DNC compliance for outbound (rule: project_comms_compliance_agent.md) — phase 1 gate
- [ ] info@nationalpaperhangers.com MX/SPF/DKIM/DMARC live before launch (rule: feedback_every_site_info_email.md) — phase 1 gate

## Open decisions

- Whether to surface a "find installers near you" map at launch or wait for real density (currently: search by zip + service-area radius, no map)
- Whether to require COI upload at free-tier signup or only at paid-tier upgrade (currently: paid-tier only)
- Whether to allow consumer self-booking for first contact, or force a brief-form intake first (currently: brief form, then installer-controlled slot offer)

## Reference benchmarks (from research brief)

- **wallpaperinstaller.com** — legacy directory, $25–45/yr, no transaction layer, big SEO footprint
- **wallcoveringinstallers.org (WIA)** — $350/yr installer membership, accredited training, strong trust signal, no booking
- **Designer Wallcoverings** — luxury demand engine, currently delegates non-LA installs to NPH. NPH must convert that trade demand into governed, scheduled installs.

The competitive wedge: **NONE of them have a real calendar / booking system.** That is what we are building.