feat: complete launch & marketing layer

- Add marketing pages: blog, changelog, roadmap, waitlist, security, maintenance
- Add GDPR cookie consent banner with preference modal
- Add referral system with API routes for code generation/tracking
- Add waitlist API with referral support
- Add PWA support: manifest, service worker, install prompt
- Add onboarding flow with 6-step guided tour
- Add in-app notification center with bell dropdown
- Add admin launch checklist (32 items across 8 categories)
- Update landing page with trust badges
- Add Open Graph image and favicon
- Configure ESLint for PWA install patterns
- Add LAUNCH_CHECKLIST.md with go-to-market guide

Supabase migrations for:
- blog_posts and blog_categories tables
- waitlist_signups table
- roadmap_items table
- launch_checklist_items table
This commit is contained in:
2026-06-02 06:19:56 +00:00
parent f6d2dc4e6c
commit 7dfaba6e3d
46 changed files with 4065 additions and 2188 deletions
+58
View File
@@ -0,0 +1,58 @@
<svg width="1200" height="630" viewBox="0 0 1200 630" fill="none" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="1200" y2="630" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#1a4d2e"/>
<stop offset="100%" stop-color="#2d6a4f"/>
</linearGradient>
<linearGradient id="accent" x1="0" y1="0" x2="400" y2="400" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#c97a3e"/>
<stop offset="100%" stop-color="#e8a962"/>
</linearGradient>
</defs>
<!-- Background -->
<rect width="1200" height="630" fill="url(#bg)"/>
<!-- Decorative grid pattern -->
<g opacity="0.05" stroke="#ffffff" stroke-width="1">
<line x1="0" y1="157.5" x2="1200" y2="157.5"/>
<line x1="0" y1="315" x2="1200" y2="315"/>
<line x1="0" y1="472.5" x2="1200" y2="472.5"/>
<line x1="300" y1="0" x2="300" y2="630"/>
<line x1="600" y1="0" x2="600" y2="630"/>
<line x1="900" y1="0" x2="900" y2="630"/>
</g>
<!-- Logo circle -->
<circle cx="600" cy="280" r="100" fill="rgba(255,255,255,0.1)"/>
<circle cx="600" cy="280" r="70" fill="rgba(255,255,255,0.15)"/>
<circle cx="600" cy="280" r="45" fill="url(#accent)"/>
<!-- Route path illustration -->
<path d="M300 450 Q400 400, 500 350 T600 280 T700 220 T850 170"
stroke="#c97a3e" stroke-width="4" stroke-linecap="round" fill="none" opacity="0.6"/>
<path d="M900 450 Q800 400, 700 350 T600 280 T500 220 T350 170"
stroke="#ffffff" stroke-width="4" stroke-linecap="round" fill="none" opacity="0.3"/>
<!-- Stop dots -->
<circle cx="500" cy="350" r="12" fill="#ffffff" opacity="0.4"/>
<circle cx="700" cy="220" r="12" fill="#ffffff" opacity="0.4"/>
<circle cx="850" cy="170" r="12" fill="#ffffff" opacity="0.4"/>
<circle cx="700" cy="350" r="12" fill="#ffffff" opacity="0.4"/>
<circle cx="500" cy="220" r="12" fill="#ffffff" opacity="0.4"/>
<circle cx="350" cy="170" r="12" fill="#ffffff" opacity="0.4"/>
<!-- Brand text -->
<text x="600" y="460" text-anchor="middle" font-family="system-ui, sans-serif" font-size="48" font-weight="700" fill="#ffffff">
Route Commerce
</text>
<text x="600" y="510" text-anchor="middle" font-family="system-ui, sans-serif" font-size="24" font-weight="400" fill="rgba(255,255,255,0.7)">
Fresh Produce Wholesale Platform
</text>
<!-- Tagline badge -->
<rect x="480" y="540" width="240" height="40" rx="20" fill="rgba(255,255,255,0.1)"/>
<text x="600" y="567" text-anchor="middle" font-family="system-ui, sans-serif" font-size="14" font-weight="500" fill="rgba(255,255,255,0.8)">
Built for farms, co-ops &amp; distributors
</text>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB