added on local at 2026-07-01 21:47:30
| 1 | #!/usr/bin/perl | |
| 2 | #====================================================================== | |
| 3 | # RePricer -- comparison landing page (RePricer vs the average repricer). | |
| 4 | # Public, no auth required. Top-funnel SEO. | |
| 5 | # | |
| 6 | # /vs_competitors.cgi | |
| 7 | # | |
| 8 | # Generic 2-column comparison -- no named competitors. Numbers reflect | |
| 9 | # the typical pricing + feature gating of the category, not any single | |
| 10 | # product. | |
| 11 | #====================================================================== | |
| 12 | use strict; | |
| 13 | use warnings; | |
| 14 | ||
| 15 | use lib '/var/www/vhosts/3dshawn.com/repricer.3dshawn.com'; | |
| 16 | use CGI; | |
| 17 | use MODS::Login; | |
| 18 | use MODS::RePricer::Wrapper; | |
| 19 | ||
| 20 | $|=1; | |
| 21 | my $auth = MODS::Login->new; | |
| 22 | my $wrap = MODS::RePricer::Wrapper->new; | |
| 23 | my $userinfo = $auth->login_verify(); # may be undef | |
| 24 | ||
| 25 | sub _h { my $s = shift // ''; $s =~ s/&/&/g; $s =~ s/</</g; $s =~ s/>/>/g; $s =~ s/"/"/g; $s } | |
| 26 | ||
| 27 | # Feature matrix. Left = RePricer; Right = "typical repricer in the market". | |
| 28 | my @ROWS = ( | |
| 29 | { label => 'Starting price (paid)', us => '$9 / mo', them => '$55+ / mo' }, | |
| 30 | { label => 'Amazon support', us => 'yes', them => 'yes' }, | |
| 31 | { label => 'eBay support', us => 'yes', them => 'often only Amazon' }, | |
| 32 | { label => 'Walmart support', us => 'yes', them => 'higher tiers only' }, | |
| 33 | { label => 'All 6 rule strategies', us => 'yes', them => 'partial / AI-only' }, | |
| 34 | { label => 'Hard floor / ceiling', us => 'yes', them => 'yes' }, | |
| 35 | { label => 'MAP enforcement', us => 'yes', them => 'varies' }, | |
| 36 | { label => 'Buy Box history charts', us => 'yes', them => 'limited' }, | |
| 37 | { label => 'CSV import / export', us => 'yes', them => 'often paid add-on' }, | |
| 38 | { label => 'Reprice cadence', us => '1 minute (Studio)', them => 'usually 5-15 min' }, | |
| 39 | { label => 'Per-product overrides', us => 'yes', them => 'AI-only / partial' }, | |
| 40 | { label => '2FA', us => 'yes', them => 'sometimes' }, | |
| 41 | { label => 'Open REST API', us => 'Studio tier', them => 'rarely' }, | |
| 42 | { label => 'Honest published price', us => 'yes', them => '"starts at" + sales call' }, | |
| 43 | ); | |
| 44 | ||
| 45 | sub _cell { | |
| 46 | my $v = shift; | |
| 47 | return '<span style="color:#10b981;font-weight:700">✓</span>' if lc $v eq 'yes'; | |
| 48 | return '<span style="color:#fca5a5;font-weight:700">×</span>' if lc $v eq 'no'; | |
| 49 | return '<span style="color:#14b8a6">' . _h($v) . '</span>'; | |
| 50 | } | |
| 51 | ||
| 52 | my $body = '<div style="max-width:1000px;margin:0 auto;padding:24px 28px">'; | |
| 53 | $body .= ' <div style="font-size:11px;letter-spacing:2px;color:#14b8a6;text-transform:uppercase">Compare</div>'; | |
| 54 | $body .= ' <h1 style="font-size:clamp(26px,3.6vw,40px);color:#fff;margin:6px 0 6px;font-weight:700;letter-spacing:-0.02em">RePricer vs the typical repricer</h1>'; | |
| 55 | $body .= ' <p style="color:#7e92b6;font-size:14px;margin:0 0 22px;max-width:680px">An honest side-by-side. We're newer (and cheaper) than most — here's what that gets you, and where the rest of the market still has edges.</p>'; | |
| 56 | ||
| 57 | $body .= '<section style="background:#0b1226;border:1px solid #1f2a4a;border-radius:12px;overflow:hidden;margin-bottom:24px">'; | |
| 58 | $body .= '<table style="width:100%;border-collapse:collapse;font-size:13px;color:#e6ecf6">'; | |
| 59 | $body .= '<thead><tr style="background:#0a0f1f;color:#7e92b6">'; | |
| 60 | $body .= '<th style="padding:14px;text-align:left;text-transform:uppercase;font-size:11px;letter-spacing:1px">Feature</th>'; | |
| 61 | $body .= '<th style="padding:14px;text-align:center;text-transform:uppercase;font-size:11px;letter-spacing:1px;color:#14b8a6;background:rgba(20,184,166,0.05)">RePricer</th>'; | |
| 62 | $body .= '<th style="padding:14px;text-align:center;text-transform:uppercase;font-size:11px;letter-spacing:1px">Typical repricer</th>'; | |
| 63 | $body .= '</tr></thead><tbody>'; | |
| 64 | foreach my $row (@ROWS) { | |
| 65 | $body .= '<tr style="border-top:1px solid #1f2a4a"><td style="padding:10px 14px;color:#e6ecf6;font-weight:500">' . _h($row->{label}) . '</td>'; | |
| 66 | $body .= '<td style="padding:10px 14px;text-align:center;background:rgba(20,184,166,0.05)">' . _cell($row->{us}) . '</td>'; | |
| 67 | $body .= '<td style="padding:10px 14px;text-align:center">' . _cell($row->{them}) . '</td>'; | |
| 68 | $body .= '</tr>'; | |
| 69 | } | |
| 70 | $body .= '</tbody></table>'; | |
| 71 | $body .= '</section>'; | |
| 72 | ||
| 73 | # Honest write-up sections | |
| 74 | $body .= '<section style="background:#0b1226;border:1px solid #1f2a4a;border-radius:12px;padding:18px 22px;margin-bottom:14px">'; | |
| 75 | $body .= ' <h2 style="color:#fff;font-size:18px;margin:0 0 10px">Where RePricer wins</h2>'; | |
| 76 | $body .= ' <ul style="color:#e6ecf6;font-size:14px;line-height:1.8;margin:0;padding-left:22px">'; | |
| 77 | $body .= ' <li><b>All three big marketplaces from $9.</b> Most of the market charges $55+ and still only covers Amazon. We do Amazon + eBay + Walmart at the Starter tier.</li>'; | |
| 78 | $body .= ' <li><b>Full rule library, not just “AI.”</b> You pick the strategy (beat lowest, match Buy Box, cost-plus, etc.) and tune the guardrails yourself. No black box.</li>'; | |
| 79 | $body .= ' <li><b>1-minute reprice cadence on Studio.</b> Most of the category throttles to 5–15 minutes regardless of tier.</li>'; | |
| 80 | $body .= ' <li><b>Per-product detail page</b> with full Chart.js price history, competitor snapshots, and the rule that fired on every change.</li>'; | |
| 81 | $body .= ' <li><b>Honest pricing.</b> No “starts at $X” bait followed by an enterprise quote. The price on the website is the price you pay.</li>'; | |
| 82 | $body .= ' </ul>'; | |
| 83 | $body .= '</section>'; | |
| 84 | ||
| 85 | $body .= '<section style="background:#0b1226;border:1px solid #1f2a4a;border-radius:12px;padding:18px 22px;margin-bottom:14px">'; | |
| 86 | $body .= ' <h2 style="color:#fff;font-size:18px;margin:0 0 10px">Where established players might still be a better fit</h2>'; | |
| 87 | $body .= ' <ul style="color:#e6ecf6;font-size:14px;line-height:1.8;margin:0;padding-left:22px">'; | |
| 88 | $body .= ' <li><b>You want a fully-managed AI</b> that figures out the strategy for you and you're willing to pay enterprise pricing for it — some of the established players have spent years training those models.</li>'; | |
| 89 | $body .= ' <li><b>You need deep Amazon-only reporting</b> tightly integrated with FBA-management tooling — the Amazon-specialist platforms go deeper there.</li>'; | |
| 90 | $body .= ' <li><b>Track record matters more than price.</b> If “the safe choice” is what gets the deal approved internally, the legacy platforms have been at this for a decade.</li>'; | |
| 91 | $body .= ' <li>We don't pretend to be everything to everyone — but if you sell on more than one marketplace and want honest pricing, you're probably in the right place.</li>'; | |
| 92 | $body .= ' </ul>'; | |
| 93 | $body .= '</section>'; | |
| 94 | ||
| 95 | $body .= '<div style="text-align:center;margin-top:24px">'; | |
| 96 | $body .= ' <a href="/signup.cgi" style="display:inline-block;background:#064e3b;color:#a7f3d0;padding:14px 28px;border-radius:8px;text-decoration:none;font-weight:700;font-size:16px">Start your 14-day free trial</a>'; | |
| 97 | $body .= ' <div style="color:#7e92b6;font-size:12px;margin-top:8px">No credit card. Cancel any time. We won't charge automatically when the trial ends.</div>'; | |
| 98 | $body .= '</div>'; | |
| 99 | ||
| 100 | $body .= '</div>'; | |
| 101 | ||
| 102 | print "Content-Type: text/html; charset=utf-8\nCache-Control: no-store, no-cache, must-revalidate, max-age=0\nPragma: no-cache\nExpires: 0\n\n"; | |
| 103 | $wrap->render({ userinfo => $userinfo, title => 'RePricer vs the typical repricer', body => $body }); | |
| 104 | exit; |