← back to Consulting Rentv Com
RENTV: seeded Service-Provider Marketplace demo — 62 real LA providers (CRCP brokers + researched firms), linked from teardown
7dcd8bdef2777338f8022739977870151db62110 · 2026-07-17 10:28:43 -0700 · Steve
Files touched
M build.mjsM public/portal.htmlA public/versions/marketplace.html
Diff
commit 7dcd8bdef2777338f8022739977870151db62110
Author: Steve <steve@designerwallcoverings.com>
Date: Fri Jul 17 10:28:43 2026 -0700
RENTV: seeded Service-Provider Marketplace demo — 62 real LA providers (CRCP brokers + researched firms), linked from teardown
---
build.mjs | 2 +-
public/portal.html | 2 +-
public/versions/marketplace.html | 225 +++++++++++++++++++++++++++++++++++++++
3 files changed, 227 insertions(+), 2 deletions(-)
diff --git a/build.mjs b/build.mjs
index 4e5aa01..fffd088 100644
--- a/build.mjs
+++ b/build.mjs
@@ -163,7 +163,7 @@ const TEARDOWN=[
{k:'providers',u:'/service-providers.php — the marketplace',g:'F',
png:'providers.png',
i:['~40 categories, every single one "(0)" listings — Accounting (0), Brokerage (0), Construction (0). A directory of failure that trains visitors never to return.','No search, no cards, no map, no filters — a 1999 Yellow Pages list even if inventory existed.','"Don\u2019t Be Left Out!" CTA asks providers to join a visibly empty room.'],
- f:['SEED BEFORE RELAUNCH: scrape LA County business-license data + web research (Exa) for CRE-category firms — contractors, brokers, architects, property managers, lenders — and pre-populate 10–15 real listings per major category with phone numbers. Offer each firm its free listing to claim; they upgrade. An empty directory is not a product; a full one is.','Rebuild as a searchable card grid (name, category badge, city, phone, Contact) with geography filter.','Monetize with a Featured Listing tier — after inventory exists, never before.']},
+ f:['SEED BEFORE RELAUNCH: scrape LA County business-license data + web research (Exa) for CRE-category firms — contractors, brokers, architects, property managers, lenders — and pre-populate 10–15 real listings per major category with phone numbers. Offer each firm its free listing to claim; they upgrade. An empty directory is not a product; a full one is. <a href="/versions/marketplace.html" target="_blank" style="color:#9fd6b0;text-decoration:underline">→ We already built the seeded demo: 62 real LA providers, live here.</a>','Rebuild as a searchable card grid (name, category badge, city, phone, Contact) with geography filter.','Monetize with a Featured Listing tier — after inventory exists, never before.']},
{k:'store',u:'/store.php — conferences/store',g:'D-',
png:'store.png',
i:['Labeled "store," contains no product, price, or buy button — a press page wearing a store costume.','A FUTURE conference (Arizona, Oct 29 2026) is on the page with no Register button, no speakers, no price — revenue advertising that goes nowhere.','Past and future events unfiltered in one feed; sponsor logos outweigh the editorial 2:1.'],
diff --git a/public/portal.html b/public/portal.html
index 86ebaf6..9521592 100644
--- a/public/portal.html
+++ b/public/portal.html
@@ -200,7 +200,7 @@ footer{padding:56px clamp(24px,7vw,120px);border-top:1px solid var(--line);color
<section id="teardown"><div class="eyebrow">07 · Page-by-Page Teardown</div><h2 class="disp">Every page, graded — with the fix.</h2><div class="accbody">
<p class="lead2">We captured every page of rentv.com live and put each through an adversarial review. The pattern: <b>the content operation works — the website destroys it at every conversion point.</b> Headline finding: the site still runs <b>Universal Analytics (UA-148799896-1)</b>, which Google shut down in 2023 — <b>there has been no traffic data for ~3 years</b>. Every decision below is currently being made blind.</p>
- <div class="tdp rv"><div class="tdshot"><a href="/portal/audit/index.png" target="_blank"><img src="/portal/audit/index.png" loading="lazy" alt="index screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D+</span><h3 class="disp">rentv.com (homepage)</h3></div><div class="tdl">Issues</div><ul><li>Above the fold is a flea market: a sublease.com banner owns the top-right quarter, plus two more ads and a video box — before a single headline.</li><li>Three-column table layout leaves the actual news ~45% of a fixed-width page; nav links are 11px gray text.</li><li>Every story gets identical tiny treatment — no lead story, no hierarchy, no way to scan. No bylines, no trust anchors.</li><li>"The REview" widget renders as an unexplained black box with no CTA.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Kill the top-of-fold ad wall; hero = one featured story card (large image, 24px+ headline, deck, byline).</li><li>Responsive grid: full-width hero → card feed → labeled sticky sponsor rail (max 2 ads).</li><li>Editorial tiers: lead story, top-3 row, then the feed — type scale does the talking.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/advertise.png" target="_blank"><img src="/portal/audit/advertise.png" loading="lazy" alt="advertise screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/advertise.php — the AD SALES page</h3></div><div class="tdl">Issues</div><ul><li>The page that makes the money is a wall of 12px small print — products listed with no pricing table, no media kit, no visuals of any ad unit.</li><li>Zero proof of audience: no open rates, no advertiser logos, no case study. A media buyer closes the tab in 8 seconds.</li><li>Sole CTA is "call us / raw email" — no form, no rate-card download, no buy path.</li><li>A sublease.com ad sits in the header of the page selling RENTV’s own inventory — self-defeating.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Rebuild as a media-kit landing page: 3-tier pricing table (Newsletter / eBlast / Display), audience stats in bold, "Request Media Kit" form.</li><li>Add a Current Advertisers logo row + one pull-quote (one phone call gets it).</li><li>Remove sublease.com from this page entirely.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/subscriber.png" target="_blank"><img src="/portal/audit/subscriber.png" loading="lazy" alt="subscriber screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D</span><h3 class="disp">/subscriber_info.php — the $146/yr member page</h3></div><div class="tdl">Issues</div><ul><li>A real revenue product ($146/yr Executive Subscriber) sold via a dense bullet wall — free vs. paid never cleanly separated; unanswerable in 10 seconds.</li><li>No sample issue, no preview, no testimonial, no subscriber count — buying an information product sight-unseen.</li><li>CTA is plain text: "CLICK HERE or call us." No visible checkout; beige 2005-registrar aesthetic.</li><li>The News Archive is sold as a paid benefit — but the archive page is freely accessible to everyone.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Two-column conversion page: benefits (headline + one-liner + frequency) left, price card with live Stripe checkout right — add a $15/mo option.</li><li>Publish one Sample Issue link — the single biggest conversion lift available.</li><li>Gate the archive or stop selling it; never sell what you give away.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/providers.png" target="_blank"><img src="/portal/audit/providers.png" loading="lazy" alt="providers screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/service-providers.php — the marketplace</h3></div><div class="tdl">Issues</div><ul><li>~40 categories, every single one "(0)" listings — Accounting (0), Brokerage (0), Construction (0). A directory of failure that trains visitors never to return.</li><li>No search, no cards, no map, no filters — a 1999 Yellow Pages list even if inventory existed.</li><li>"Don’t Be Left Out!" CTA asks providers to join a visibly empty room.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>SEED BEFORE RELAUNCH: scrape LA County business-license data + web research (Exa) for CRE-category firms — contractors, brokers, architects, property managers, lenders — and pre-populate 10–15 real listings per major category with phone numbers. Offer each firm its free listing to claim; they upgrade. An empty directory is not a product; a full one is.</li><li>Rebuild as a searchable card grid (name, category badge, city, phone, Contact) with geography filter.</li><li>Monetize with a Featured Listing tier — after inventory exists, never before.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/store.png" target="_blank"><img src="/portal/audit/store.png" loading="lazy" alt="store screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D-</span><h3 class="disp">/store.php — conferences/store</h3></div><div class="tdl">Issues</div><ul><li>Labeled "store," contains no product, price, or buy button — a press page wearing a store costume.</li><li>A FUTURE conference (Arizona, Oct 29 2026) is on the page with no Register button, no speakers, no price — revenue advertising that goes nowhere.</li><li>Past and future events unfiltered in one feed; sponsor logos outweigh the editorial 2:1.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Split: "Upcoming Events" above the fold (date, venue, price, Register Now) vs. "Past Coverage" archive grid.</li><li>Sell recorded sessions as an on-demand library: title, price, 90-second preview, buy button.</li><li>Rename the tab — Conferences and Store are different intents.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/archive.png" target="_blank"><img src="/portal/audit/archive.png" loading="lazy" alt="archive screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D</span><h3 class="disp">/archive.php</h3></div><div class="tdl">Issues</div><ul><li>20 bare hyperlinks with no dates, story counts, previews, or search — a filing cabinet with the labels ripped off.</li><li>Freely accessible while being sold as a paid subscriber benefit.</li><li>No orientation: what years, what geographies, how fresh — unknowable.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Full-text search + geography/content-type filters over the archive.</li><li>Each link shows recent stories + a count ("482 articles, 2019–2026").</li><li>Pick a lane: gate it as a benefit, or use it free to drive newsletter signups.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/newsletter.png" target="_blank"><img src="/portal/audit/newsletter.png" loading="lazy" alt="newsletter screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D+</span><h3 class="disp">/newsletter.php</h3></div><div class="tdl">Issues</div><ul><li>NINE fields for a free newsletter (address, zip, phone…) — Bisnow asks for one. Conversion ≈ zero.</li><li>Distorted-text homemade CAPTCHA ("rjvxk6") — broken-looking, inaccessible.</li><li>Right half of the page is empty void; no pitch, no sample, no reason to sign up — the heading is just "NEWSLETTER."</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Three fields max: Email (required), Name, Company. Delete the rest.</li><li>Invisible reCAPTCHA v3 or honeypot; kill the distorted image.</li><li>Add the pitch: "Join 50,000+ CRE professionals · twice-weekly SoCal deals · free" + a sample-issue link.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/subscribe.png" target="_blank"><img src="/portal/audit/subscribe.png" loading="lazy" alt="subscribe screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/subscribe.php — the paywall</h3></div><div class="tdl">Issues</div><ul><li>The paywall page is a cartoon dog GIF + "Hold on there sport!" + a login box. That is the entire page every non-subscriber hits.</li><li>No subscribe CTA, no path for non-members, no visible password reset — a dead end that costs conversions daily.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Replace with a real paywall intercept: what you’re missing, "$146/yr — Subscribe Now" primary button, login secondary.</li><li>Remove the dog and "sport" TODAY — before any redesign.</li><li>Wire a real password-reset flow; a locked-out subscriber is a churned subscriber.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/contact.png" target="_blank"><img src="/portal/audit/contact.png" loading="lazy" alt="contact screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ca8a04">C-</span><h3 class="disp">/contact.php</h3></div><div class="tdl">Issues</div><ul><li>Twelve fields including FAX in 2026; same broken CAPTCHA; right half of the page is empty.</li><li>No visible email fallback if the form breaks (and on a Windows-1252 site, forms break).</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Six fields: Name, Company, Email, Phone (opt), Subject dropdown, Message.</li><li>Show a direct email + phone under the form; fix the half-empty template site-wide.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/jobworks.png" target="_blank"><img src="/portal/audit/jobworks.png" loading="lazy" alt="jobworks screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/jobworks.php — the jobs board</h3></div><div class="tdl">Issues</div><ul><li>Opens with an "Adobe Flash Player is no longer supported" error banner — Flash died Dec 2020; this has greeted every visitor for 5+ years.</li><li>Every job category is "(0)" — the second of three marketplace pillars with zero inventory.</li><li>Bare "create a listing" link with no pricing, reach, or pitch attached.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Delete the Flash widget today; replace with static HTML.</li><li>Seed or kill: offer 10–15 subscriber firms free 90-day listings, or pull JobWorks from the nav until it has inventory.</li><li>One combined CRE Marketplace landing (live counts + featured listings + "Post a listing" CTA) instead of empty silos.</li></ul></div></div>
+ <div class="tdp rv"><div class="tdshot"><a href="/portal/audit/index.png" target="_blank"><img src="/portal/audit/index.png" loading="lazy" alt="index screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D+</span><h3 class="disp">rentv.com (homepage)</h3></div><div class="tdl">Issues</div><ul><li>Above the fold is a flea market: a sublease.com banner owns the top-right quarter, plus two more ads and a video box — before a single headline.</li><li>Three-column table layout leaves the actual news ~45% of a fixed-width page; nav links are 11px gray text.</li><li>Every story gets identical tiny treatment — no lead story, no hierarchy, no way to scan. No bylines, no trust anchors.</li><li>"The REview" widget renders as an unexplained black box with no CTA.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Kill the top-of-fold ad wall; hero = one featured story card (large image, 24px+ headline, deck, byline).</li><li>Responsive grid: full-width hero → card feed → labeled sticky sponsor rail (max 2 ads).</li><li>Editorial tiers: lead story, top-3 row, then the feed — type scale does the talking.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/advertise.png" target="_blank"><img src="/portal/audit/advertise.png" loading="lazy" alt="advertise screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/advertise.php — the AD SALES page</h3></div><div class="tdl">Issues</div><ul><li>The page that makes the money is a wall of 12px small print — products listed with no pricing table, no media kit, no visuals of any ad unit.</li><li>Zero proof of audience: no open rates, no advertiser logos, no case study. A media buyer closes the tab in 8 seconds.</li><li>Sole CTA is "call us / raw email" — no form, no rate-card download, no buy path.</li><li>A sublease.com ad sits in the header of the page selling RENTV’s own inventory — self-defeating.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Rebuild as a media-kit landing page: 3-tier pricing table (Newsletter / eBlast / Display), audience stats in bold, "Request Media Kit" form.</li><li>Add a Current Advertisers logo row + one pull-quote (one phone call gets it).</li><li>Remove sublease.com from this page entirely.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/subscriber.png" target="_blank"><img src="/portal/audit/subscriber.png" loading="lazy" alt="subscriber screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D</span><h3 class="disp">/subscriber_info.php — the $146/yr member page</h3></div><div class="tdl">Issues</div><ul><li>A real revenue product ($146/yr Executive Subscriber) sold via a dense bullet wall — free vs. paid never cleanly separated; unanswerable in 10 seconds.</li><li>No sample issue, no preview, no testimonial, no subscriber count — buying an information product sight-unseen.</li><li>CTA is plain text: "CLICK HERE or call us." No visible checkout; beige 2005-registrar aesthetic.</li><li>The News Archive is sold as a paid benefit — but the archive page is freely accessible to everyone.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Two-column conversion page: benefits (headline + one-liner + frequency) left, price card with live Stripe checkout right — add a $15/mo option.</li><li>Publish one Sample Issue link — the single biggest conversion lift available.</li><li>Gate the archive or stop selling it; never sell what you give away.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/providers.png" target="_blank"><img src="/portal/audit/providers.png" loading="lazy" alt="providers screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/service-providers.php — the marketplace</h3></div><div class="tdl">Issues</div><ul><li>~40 categories, every single one "(0)" listings — Accounting (0), Brokerage (0), Construction (0). A directory of failure that trains visitors never to return.</li><li>No search, no cards, no map, no filters — a 1999 Yellow Pages list even if inventory existed.</li><li>"Don’t Be Left Out!" CTA asks providers to join a visibly empty room.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>SEED BEFORE RELAUNCH: scrape LA County business-license data + web research (Exa) for CRE-category firms — contractors, brokers, architects, property managers, lenders — and pre-populate 10–15 real listings per major category with phone numbers. Offer each firm its free listing to claim; they upgrade. An empty directory is not a product; a full one is. <a href="/versions/marketplace.html" target="_blank" style="color:#9fd6b0;text-decoration:underline">→ We already built the seeded demo: 62 real LA providers, live here.</a></li><li>Rebuild as a searchable card grid (name, category badge, city, phone, Contact) with geography filter.</li><li>Monetize with a Featured Listing tier — after inventory exists, never before.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/store.png" target="_blank"><img src="/portal/audit/store.png" loading="lazy" alt="store screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D-</span><h3 class="disp">/store.php — conferences/store</h3></div><div class="tdl">Issues</div><ul><li>Labeled "store," contains no product, price, or buy button — a press page wearing a store costume.</li><li>A FUTURE conference (Arizona, Oct 29 2026) is on the page with no Register button, no speakers, no price — revenue advertising that goes nowhere.</li><li>Past and future events unfiltered in one feed; sponsor logos outweigh the editorial 2:1.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Split: "Upcoming Events" above the fold (date, venue, price, Register Now) vs. "Past Coverage" archive grid.</li><li>Sell recorded sessions as an on-demand library: title, price, 90-second preview, buy button.</li><li>Rename the tab — Conferences and Store are different intents.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/archive.png" target="_blank"><img src="/portal/audit/archive.png" loading="lazy" alt="archive screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D</span><h3 class="disp">/archive.php</h3></div><div class="tdl">Issues</div><ul><li>20 bare hyperlinks with no dates, story counts, previews, or search — a filing cabinet with the labels ripped off.</li><li>Freely accessible while being sold as a paid subscriber benefit.</li><li>No orientation: what years, what geographies, how fresh — unknowable.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Full-text search + geography/content-type filters over the archive.</li><li>Each link shows recent stories + a count ("482 articles, 2019–2026").</li><li>Pick a lane: gate it as a benefit, or use it free to drive newsletter signups.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/newsletter.png" target="_blank"><img src="/portal/audit/newsletter.png" loading="lazy" alt="newsletter screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ea580c">D+</span><h3 class="disp">/newsletter.php</h3></div><div class="tdl">Issues</div><ul><li>NINE fields for a free newsletter (address, zip, phone…) — Bisnow asks for one. Conversion ≈ zero.</li><li>Distorted-text homemade CAPTCHA ("rjvxk6") — broken-looking, inaccessible.</li><li>Right half of the page is empty void; no pitch, no sample, no reason to sign up — the heading is just "NEWSLETTER."</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Three fields max: Email (required), Name, Company. Delete the rest.</li><li>Invisible reCAPTCHA v3 or honeypot; kill the distorted image.</li><li>Add the pitch: "Join 50,000+ CRE professionals · twice-weekly SoCal deals · free" + a sample-issue link.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/subscribe.png" target="_blank"><img src="/portal/audit/subscribe.png" loading="lazy" alt="subscribe screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/subscribe.php — the paywall</h3></div><div class="tdl">Issues</div><ul><li>The paywall page is a cartoon dog GIF + "Hold on there sport!" + a login box. That is the entire page every non-subscriber hits.</li><li>No subscribe CTA, no path for non-members, no visible password reset — a dead end that costs conversions daily.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Replace with a real paywall intercept: what you’re missing, "$146/yr — Subscribe Now" primary button, login secondary.</li><li>Remove the dog and "sport" TODAY — before any redesign.</li><li>Wire a real password-reset flow; a locked-out subscriber is a churned subscriber.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/contact.png" target="_blank"><img src="/portal/audit/contact.png" loading="lazy" alt="contact screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#ca8a04">C-</span><h3 class="disp">/contact.php</h3></div><div class="tdl">Issues</div><ul><li>Twelve fields including FAX in 2026; same broken CAPTCHA; right half of the page is empty.</li><li>No visible email fallback if the form breaks (and on a Windows-1252 site, forms break).</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Six fields: Name, Company, Email, Phone (opt), Subject dropdown, Message.</li><li>Show a direct email + phone under the form; fix the half-empty template site-wide.</li></ul></div></div><div class="tdp rv"><div class="tdshot"><a href="/portal/audit/jobworks.png" target="_blank"><img src="/portal/audit/jobworks.png" loading="lazy" alt="jobworks screenshot"></a><div class="tdcap">live capture · click to open</div></div><div class="tdbody"><div class="tdhead"><span class="tdgrade" style="background:#dc2626">F</span><h3 class="disp">/jobworks.php — the jobs board</h3></div><div class="tdl">Issues</div><ul><li>Opens with an "Adobe Flash Player is no longer supported" error banner — Flash died Dec 2020; this has greeted every visitor for 5+ years.</li><li>Every job category is "(0)" — the second of three marketplace pillars with zero inventory.</li><li>Bare "create a listing" link with no pricing, reach, or pitch attached.</li></ul><div class="tdl fix">The fix</div><ul class="fixul"><li>Delete the Flash widget today; replace with static HTML.</li><li>Seed or kill: offer 10–15 subscriber firms free 90-day listings, or pull JobWorks from the nav until it has inventory.</li><li>One combined CRE Marketplace landing (live counts + featured listings + "Post a listing" CTA) instead of empty silos.</li></ul></div></div>
<p class="lead2" style="margin-top:30px"><b>Overall verdict:</b> a site that was genuinely valuable in 2005 and has received near-zero strategic investment since. News still publishes, conferences still run, and 50,000 opt-in subscribers is a real asset — but a broken Flash banner, an all-zeros marketplace, a cartoon-dog paywall and a phone-number ad page are actively destroying that asset. First fix, before any redesign: <b>install GA4 today</b> — until RENTV knows its own traffic, everything else is guesswork.</p>
</div></section>
diff --git a/public/versions/marketplace.html b/public/versions/marketplace.html
new file mode 100644
index 0000000..b73b963
--- /dev/null
+++ b/public/versions/marketplace.html
@@ -0,0 +1,225 @@
+<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
+<title>RENTV Service-Provider Marketplace — seeded demo</title>
+<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500&family=Jost:wght@300;400;500&display=swap" rel="stylesheet">
+<style>
+:root{--bg:#0c1016;--panel:#121722;--ink:#eef1f6;--gold:#c8a15a;--line:rgba(200,161,90,.22);--dim:rgba(238,241,246,.66)}
+*{margin:0;padding:0;box-sizing:border-box}body{background:var(--bg);color:var(--ink);font-family:'Jost',system-ui,sans-serif}
+.badge{position:fixed;left:16px;bottom:16px;z-index:60;background:var(--gold);color:#0c1016;font-size:10px;letter-spacing:.2em;text-transform:uppercase;padding:7px 13px;border-radius:2px}
+header{padding:40px clamp(20px,6vw,80px) 24px;border-bottom:1px solid var(--line)}
+.k{font-size:11px;letter-spacing:.34em;text-transform:uppercase;color:var(--gold)}
+h1{font-family:'Cormorant Garamond',serif;font-weight:400;font-size:clamp(28px,4.4vw,48px);margin:8px 0 6px}
+header p{color:var(--dim);max-width:76ch;font-size:15.5px}
+.bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:18px clamp(20px,6vw,80px);border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--bg);z-index:10}
+#q{flex:1;min-width:220px;padding:11px 14px;background:var(--panel);border:1px solid var(--line);color:var(--ink);border-radius:5px;font-size:14px}
+.chip{background:none;border:1px solid var(--line);color:var(--dim);font-size:12px;padding:8px 13px;border-radius:20px;cursor:pointer;font-family:inherit}
+.chip b{color:var(--gold)}.chip.on{background:var(--gold);color:#0c1016}.chip.on b{color:#0c1016}
+.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:14px;padding:24px clamp(20px,6vw,80px) 80px}
+.pc{background:var(--panel);border:1px solid var(--line);border-radius:7px;padding:18px;display:flex;flex-direction:column;gap:6px;transition:.25s}
+.pc:hover{transform:translateY(-3px);box-shadow:0 14px 40px rgba(0,0,0,.45)}
+.pcat{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold)}
+.pname{font-weight:500;font-size:15.5px;line-height:1.3}.psub{font-size:13px;color:var(--dim)}
+.pmeta{display:flex;flex-direction:column;gap:2px;font-size:12.5px;color:var(--dim);margin-top:4px}
+.src{font-size:10.5px;opacity:.55;letter-spacing:.04em}
+.pbtn{margin-top:auto;align-self:flex-start;background:none;border:1px solid var(--gold);color:var(--gold);font-size:11px;letter-spacing:.18em;text-transform:uppercase;padding:8px 16px;border-radius:4px;cursor:pointer;font-family:inherit}
+.pbtn:hover{background:var(--gold);color:#0c1016}
+</style></head><body>
+<a class="badge" href="/portal#teardown">◀ Back to the teardown · seeded DEMO</a>
+<header><div class="k">RENTV · R.E. Marketplace — working demo</div>
+<h1 class="disp">Service Providers — never launch empty again.</h1>
+<p>The live site shows "(0)" in every category. This demo is the fix: <b style="color:var(--gold)">62 real Los Angeles providers</b> — 40 brokers from live listing data (with phone numbers), plus web-researched firms across 4 more categories — seeded so the marketplace opens FULL. Each firm gets a free claimable listing; Featured placement becomes the paid tier.</p></header>
+<div class="bar"><input id="q" placeholder="Search providers, firms, cities…"><button class="chip on" data-cat="all">All <b>(62)</b></button><button class="chip" data-cat="Brokerage">Brokerage <b>(40)</b></button><button class="chip" data-cat="Property Management">Property Management <b>(7)</b></button><button class="chip" data-cat="Legal">Legal <b>(6)</b></button><button class="chip" data-cat="Construction / TI">Construction / TI <b>(5)</b></button><button class="chip" data-cat="Appraisal">Appraisal <b>(4)</b></button></div>
+<div class="grid" id="grid"><div class="pc" data-cat="Brokerage" data-s="errol spiro — miller & desatnik realty corp 16 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Errol Spiro — Miller & Desatnik Realty Corp</div><div class="psub">16 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (310) 202-9166</span><span>✉ info@mdrealtycorp.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="robert stepp — stepp commercial 15 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Robert Stepp — Stepp Commercial</div><div class="psub">15 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (310) 463-2916</span><span>✉ rstepp@steppcommercial.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="handoko chen — growth investment group 14 active listings · pasadena">
+ <div class="pcat">Brokerage</div><div class="pname">Handoko Chen — Growth Investment Group</div><div class="psub">14 active listings · Pasadena</div>
+ <div class="pmeta"><span>📞 (626) 594-4901</span><span>✉ han.chen@growthinvestmentgroup.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="michael toveg — stepp commercial 14 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Michael Toveg — Stepp Commercial</div><div class="psub">14 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (310) 463-2916</span><span>✉ mtoveg@steppcommercial.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="cameron samimi — lyon stahl investment real estate 13 active listings · el segundo">
+ <div class="pcat">Brokerage</div><div class="pname">Cameron Samimi — Lyon Stahl Investment Real Estate</div><div class="psub">13 active listings · El Segundo</div>
+ <div class="pmeta"><span>📞 (310) 425-9838</span><span>✉ leadership@lyonstahl.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="jonathan taksa — taksa investment group 12 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Jonathan Taksa — Taksa Investment Group</div><div class="psub">12 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (424) 672-8220</span><span>✉ jon@taksainvestment.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="daniel withers — matthews 10 active listings · el segundo">
+ <div class="pcat">Brokerage</div><div class="pname">Daniel Withers — Matthews</div><div class="psub">10 active listings · El Segundo</div>
+ <div class="pmeta"><span>📞 (866) 889-0550</span><span>✉ contact@matthews.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="jenny eng — cbre la 10 active listings · glendale">
+ <div class="pcat">Brokerage</div><div class="pname">Jenny Eng — CBRE LA</div><div class="psub">10 active listings · Glendale</div>
+ <div class="pmeta"><span>📞 (818) 907-4606</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="cameron samimi — lyon stahl investment real estate, inc. 9 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Cameron Samimi — Lyon Stahl Investment Real Estate, Inc.</div><div class="psub">9 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (310) 425-9838</span><span>✉ cameron@lyonstahl.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="elizabeth maddox — myunits.com 9 active listings · burbank">
+ <div class="pcat">Brokerage</div><div class="pname">Elizabeth Maddox — Myunits.com</div><div class="psub">9 active listings · Burbank</div>
+ <div class="pmeta"><span>📞 (844) 698-6487</span><span>✉ elizabeth@myunits.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="taylor avakian — lyon stahl investment real estate 9 active listings · el segundo">
+ <div class="pcat">Brokerage</div><div class="pname">Taylor Avakian — Lyon Stahl Investment Real Estate</div><div class="psub">9 active listings · El Segundo</div>
+ <div class="pmeta"><span>📞 (310) 425-9838</span><span>✉ leadership@lyonstahl.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="bill ruane — estate properties 8 active listings · palos verdes estates">
+ <div class="pcat">Brokerage</div><div class="pname">Bill Ruane — Estate Properties</div><div class="psub">8 active listings · Palos Verdes Estates</div>
+ <div class="pmeta"><span>📞 (310) 877-2374</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="casey lins — kidder matthews 8 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Casey Lins — Kidder Matthews</div><div class="psub">8 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (877) 454-3337</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="johnnie stiegler — lyon stahl investment real estate 8 active listings · el segundo">
+ <div class="pcat">Brokerage</div><div class="pname">Johnnie Stiegler — Lyon Stahl Investment Real Estate</div><div class="psub">8 active listings · El Segundo</div>
+ <div class="pmeta"><span>📞 (310) 425-9838</span><span>✉ leadership@lyonstahl.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="vincent cook — kidder mathews los angeles 8 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Vincent Cook — Kidder Mathews Los Angeles</div><div class="psub">8 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (877) 454-3337</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="ken morgan — morgan skenderian investment real estate group 7 active listings · newport beach">
+ <div class="pcat">Brokerage</div><div class="pname">Ken Morgan — Morgan Skenderian Investment Real Estate Group</div><div class="psub">7 active listings · Newport Beach</div>
+ <div class="pmeta"><span>📞 (949) 251-8800</span><span>✉ kem@morganskenderian.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="stephen takahashi — lyon stahl investment real estate 7 active listings · el segundo">
+ <div class="pcat">Brokerage</div><div class="pname">Stephen Takahashi — Lyon Stahl Investment Real Estate</div><div class="psub">7 active listings · El Segundo</div>
+ <div class="pmeta"><span>📞 (310) 425-9838</span><span>✉ leadership@lyonstahl.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="woody stahl — lyon stahl investment real estate 7 active listings · el segundo">
+ <div class="pcat">Brokerage</div><div class="pname">Woody Stahl — Lyon Stahl Investment Real Estate</div><div class="psub">7 active listings · El Segundo</div>
+ <div class="pmeta"><span>📞 (310) 425-9838</span><span>✉ leadership@lyonstahl.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="brett lyon — lyon stahl investment real estate 6 active listings · el segundo">
+ <div class="pcat">Brokerage</div><div class="pname">Brett Lyon — Lyon Stahl Investment Real Estate</div><div class="psub">6 active listings · El Segundo</div>
+ <div class="pmeta"><span>📞 (310) 425-9838</span><span>✉ leadership@lyonstahl.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="donald heller — don heller group | christie's international real estate akg 6 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Donald Heller — Don Heller Group | Christie's International Real Estate AKG</div><div class="psub">6 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (310) 466-7809</span><span>✉ sales@donhellergroup.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="haik bokhchalian — johnhart real estate 6 active listings · sherman oaks">
+ <div class="pcat">Brokerage</div><div class="pname">Haik Bokhchalian — JohnHart Real Estate</div><div class="psub">6 active listings · Sherman Oaks</div>
+ <div class="pmeta"><span>📞 (888) 550-4440</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="ix garcia — kim real estate, inc 6 active listings · oakland">
+ <div class="pcat">Brokerage</div><div class="pname">Ix Garcia — Kim Real Estate, Inc</div><div class="psub">6 active listings · Oakland</div>
+ <div class="pmeta"><span>📞 (925) 336-9746</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="jesse weinberg — jesse weinberg 6 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Jesse Weinberg — Jesse Weinberg</div><div class="psub">6 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 800-804-9132</span><span>✉ info@jesseweinberg.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="shant sherbetdjian — re/max commercial & investment realty 6 active listings · pasadena">
+ <div class="pcat">Brokerage</div><div class="pname">Shant Sherbetdjian — RE/MAX Commercial & Investment Realty</div><div class="psub">6 active listings · Pasadena</div>
+ <div class="pmeta"><span>📞 (310) 802-2500</span><span>✉ slampe@remaxcir.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="artin sarkissian — the art in real estate 5 active listings · glendale">
+ <div class="pcat">Brokerage</div><div class="pname">Artin Sarkissian — The Art In Real Estate</div><div class="psub">5 active listings · Glendale</div>
+ <div class="pmeta"><span>📞 (818) 241-3000</span><span>✉ info@theartinrealestate.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="justin white — centennial advisers 5 active listings · long beach">
+ <div class="pcat">Brokerage</div><div class="pname">Justin White — Centennial Advisers</div><div class="psub">5 active listings · Long Beach</div>
+ <div class="pmeta"><span>📞 (562) 269-4844</span><span>✉ info@centennialadvisers.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="kelly morgan — houze real estate mgmt & development 5 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Kelly Morgan — Houze Real Estate Mgmt & Development</div><div class="psub">5 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (310) 836-3638</span><span>✉ info@kellymorgancommercial.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="matthew guerra — principle quality investments 5 active listings · whittier">
+ <div class="pcat">Brokerage</div><div class="pname">Matthew Guerra — Principle Quality Investments</div><div class="psub">5 active listings · Whittier</div>
+ <div class="pmeta"><span>📞 (909) 997-9765</span><span>✉ matthew.guerra@principlequalityinvestments.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="olga wright — lyon stahl investment real estate 5 active listings · el segundo">
+ <div class="pcat">Brokerage</div><div class="pname">Olga Wright — Lyon Stahl Investment Real Estate</div><div class="psub">5 active listings · El Segundo</div>
+ <div class="pmeta"><span>📞 (310) 425-9838</span><span>✉ leadership@lyonstahl.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="pat swanson — stream realty partners greater l.a. 5 active listings · irvine">
+ <div class="pcat">Brokerage</div><div class="pname">Pat Swanson — Stream Realty Partners Greater L.A.</div><div class="psub">5 active listings · Irvine</div>
+ <div class="pmeta"><span>📞 (214) 267-0400</span><span>✉ pat.swanson@streamrealty.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="reza ghobadi — colliers - los angeles - woodland hills, california 5 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Reza Ghobadi — Colliers - Los Angeles - Woodland Hills, California</div><div class="psub">5 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (818) 325-4142</span><span>✉ reza.ghobadi@colliers.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="blas fernandez — ikon properties 4 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Blas Fernandez — IKON Properties</div><div class="psub">4 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (818) 319-9191</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="chase simonton — re/max one 4 active listings · woodland hills">
+ <div class="pcat">Brokerage</div><div class="pname">Chase Simonton — RE/MAX One</div><div class="psub">4 active listings · Woodland Hills</div>
+ <div class="pmeta"><span>📞 (714) 721-7957</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="chris bosworth — cbre - atlanta 4 active listings · atlanta">
+ <div class="pcat">Brokerage</div><div class="pname">Chris Bosworth — CBRE - Atlanta</div><div class="psub">4 active listings · Atlanta</div>
+ <div class="pmeta"><span>📞 (404) 441-3849</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="gordon inman — keller williams realty - la harbor 4 active listings · rancho palos verdes">
+ <div class="pcat">Brokerage</div><div class="pname">Gordon Inman — Keller Williams Realty - LA Harbor</div><div class="psub">4 active listings · Rancho Palos Verdes</div>
+ <div class="pmeta"><span>📞 (310) 832-7272</span><span>✉ info@sanpedrochamber.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="hannah hampton — cbre la 4 active listings · glendale">
+ <div class="pcat">Brokerage</div><div class="pname">Hannah Hampton — CBRE LA</div><div class="psub">4 active listings · Glendale</div>
+ <div class="pmeta"><span>📞 (805) 630-3890</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="jacqueline carroll — compass 4 active listings · beverly hills">
+ <div class="pcat">Brokerage</div><div class="pname">Jacqueline Carroll — Compass</div><div class="psub">4 active listings · Beverly Hills</div>
+ <div class="pmeta"><span>📞 (212) 913-9058</span><span>✉ jacqueline.carroll@compass.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="john swartz — compass 4 active listings · beverly hills">
+ <div class="pcat">Brokerage</div><div class="pname">John Swartz — Compass</div><div class="psub">4 active listings · Beverly Hills</div>
+ <div class="pmeta"><span>📞 (212) 913-9058</span><span>✉ john.swartz@compass.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="jonathan nikfarjam — shield commercial real estate 4 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Jonathan Nikfarjam — Shield Commercial Real Estate</div><div class="psub">4 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (310) 593-9869</span><span>✉ contact@shieldcre.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Brokerage" data-s="josh kaplan — equity union 4 active listings · los angeles">
+ <div class="pcat">Brokerage</div><div class="pname">Josh Kaplan — Equity Union</div><div class="psub">4 active listings · Los Angeles</div>
+ <div class="pmeta"><span>📞 (800) 937-8489</span><span>✉ info@equityunion.com</span><span class="src">live listing data</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Property Management" data-s="los angeles property management group 30+ yrs residential + commercial across la & sfv">
+ <div class="pcat">Property Management</div><div class="pname">Los Angeles Property Management Group</div><div class="psub">30+ yrs residential + commercial across LA & SFV</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Property Management" data-s="cbre property management institutional-grade commercial pm">
+ <div class="pcat">Property Management</div><div class="pname">CBRE Property Management</div><div class="psub">Institutional-grade commercial PM</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Property Management" data-s="nai capital commercial pm + brokerage, la offices">
+ <div class="pcat">Property Management</div><div class="pname">NAI Capital Commercial</div><div class="psub">PM + brokerage, LA offices</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Property Management" data-s="crown commercial property management founder david crown · ~30 yrs commercial pm">
+ <div class="pcat">Property Management</div><div class="pname">Crown Commercial Property Management</div><div class="psub">Founder David Crown · ~30 yrs commercial PM</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Property Management" data-s="moss & company long-standing la multifamily/commercial manager">
+ <div class="pcat">Property Management</div><div class="pname">Moss & Company</div><div class="psub">Long-standing LA multifamily/commercial manager</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Property Management" data-s="beach front property management 20+ yrs — apartments, commercial, hud">
+ <div class="pcat">Property Management</div><div class="pname">Beach Front Property Management</div><div class="psub">20+ yrs — apartments, commercial, HUD</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Property Management" data-s="allview real estate leasing, tenant placement, rent collection">
+ <div class="pcat">Property Management</div><div class="pname">AllView Real Estate</div><div class="psub">Leasing, tenant placement, rent collection</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Legal" data-s="shapero law firm commercial real estate law">
+ <div class="pcat">Legal</div><div class="pname">Shapero Law Firm</div><div class="psub">Commercial real estate law</div>
+ <div class="pmeta"><span>📞 (213) 394-6031</span><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Legal" data-s="real estate law corporation leases + tenant-improvement work letters">
+ <div class="pcat">Legal</div><div class="pname">Real Estate Law Corporation</div><div class="psub">Leases + tenant-improvement work letters</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Legal" data-s="lerner & weiss apc commercial re litigation & transactions">
+ <div class="pcat">Legal</div><div class="pname">Lerner & Weiss APC</div><div class="psub">Commercial RE litigation & transactions</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Legal" data-s="stone & sallus llp real estate law, la">
+ <div class="pcat">Legal</div><div class="pname">Stone & Sallus LLP</div><div class="psub">Real estate law, LA</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Legal" data-s="schorr law real property disputes">
+ <div class="pcat">Legal</div><div class="pname">Schorr Law</div><div class="psub">Real property disputes</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Legal" data-s="roseman law apc acquisition, development, leasing">
+ <div class="pcat">Legal</div><div class="pname">Roseman Law APC</div><div class="psub">Acquisition, development, leasing</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Construction / TI" data-s="clune construction national ti specialist, la office">
+ <div class="pcat">Construction / TI</div><div class="pname">Clune Construction</div><div class="psub">National TI specialist, LA office</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Construction / TI" data-s="turner construction commercial gc, los angeles">
+ <div class="pcat">Construction / TI</div><div class="pname">Turner Construction</div><div class="psub">Commercial GC, Los Angeles</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Construction / TI" data-s="swinerton commercial gc + interiors">
+ <div class="pcat">Construction / TI</div><div class="pname">Swinerton</div><div class="psub">Commercial GC + interiors</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Construction / TI" data-s="corporate contractors inc. tenant improvements">
+ <div class="pcat">Construction / TI</div><div class="pname">Corporate Contractors Inc.</div><div class="psub">Tenant improvements</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Construction / TI" data-s="howard building corporation la commercial interiors">
+ <div class="pcat">Construction / TI</div><div class="pname">Howard Building Corporation</div><div class="psub">LA commercial interiors</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Appraisal" data-s="cbre valuation & advisory institutional appraisal">
+ <div class="pcat">Appraisal</div><div class="pname">CBRE Valuation & Advisory</div><div class="psub">Institutional appraisal</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Appraisal" data-s="colliers valuation & advisory commercial valuation">
+ <div class="pcat">Appraisal</div><div class="pname">Colliers Valuation & Advisory</div><div class="psub">Commercial valuation</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Appraisal" data-s="newmark valuation & advisory commercial valuation">
+ <div class="pcat">Appraisal</div><div class="pname">Newmark Valuation & Advisory</div><div class="psub">Commercial valuation</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div><div class="pc" data-cat="Appraisal" data-s="integra realty resources — la independent cre appraisal">
+ <div class="pcat">Appraisal</div><div class="pname">Integra Realty Resources — LA</div><div class="psub">Independent CRE appraisal</div>
+ <div class="pmeta"><span class="src">web-researched — verify before publish</span></div>
+ <button class="pbtn">Contact</button></div></div>
+<script>
+const q=document.getElementById('q'),cards=[...document.querySelectorAll('.pc')],chipsE=[...document.querySelectorAll('.chip')];
+let cat='all';
+function apply(){const s=q.value.toLowerCase();cards.forEach(c=>{c.style.display=((cat==='all'||c.dataset.cat===cat)&&(!s||c.dataset.s.includes(s)))?'':'none';});}
+chipsE.forEach(ch=>ch.onclick=()=>{chipsE.forEach(x=>x.classList.remove('on'));ch.classList.add('on');cat=ch.dataset.cat;apply();});
+q.oninput=apply;
+document.querySelectorAll('.pbtn').forEach(b=>b.onclick=()=>alert('Demo — in production this opens a contact/lead form (and a lead is a billable event).'));
+</script></body></html>
\ No newline at end of file
← 5923c95 auto-save: 2026-07-17T10:16:09 (4 files) — build.mjs data/cl
·
back to Consulting Rentv Com
·
auto-save: 2026-07-17T10:46:15 (3 files) — build.mjs public/ 8872b2b →