# Feature 3.1 — Landing Page ## Overview Next.js marketing site. Hero section, How It Works, 3-tier pricing with founder badges, email capture CTA, and a blog for SEO content. Deployed on Vercel. This is the first thing a visitor sees — it needs to convert. All copy uses VYNDR voice: direct, confident, no fluff, speaks like a sharp bettor who respects your time. ## Dependencies - None (static marketing page, no backend calls) - Feature 3.4 (Stripe) links from pricing CTAs ## Tech - **Framework:** Next.js 14+ (App Router) - **Styling:** Tailwind CSS - **Deployment:** Vercel - **Directory:** `web/` in the vyndr repo (monorepo) ## Pages ### / (Home) Single-page scroll with sections: **1. Hero** - Headline: "Stop guessing. Start grading." - Subheadline: "VYNDR scans your parlay in seconds. AI-powered prop analysis across DraftKings, FanDuel, and BetMGM." - CTA button: "Scan Your First Parlay — Free" → links to /scan (Feature 3.2) - Background: dark, clean, sports-betting aesthetic. No stock photos. **2. How It Works** 3-step visual flow: 1. "Paste your parlay" — illustration of leg input 2. "Get your grade" — A/B/C/D grade card with color 3. "See the edge" — reasoning breakdown preview **3. Features Grid** - Prop Analysis: 6-step grading pipeline - Correlation Detection: flags conflicting legs - Line Movement: sharp money alerts - Bet Tracking: ROI and win rate over time - Kill Conditions: 6 hard checks before you bet **4. Pricing** 3-tier card layout: | | Free | Analyst | Desk | |---|---|---|---| | Price | $0 | $19.99/mo | $49.99/mo | | Founder Price | — | $14.99/mo | $34.99/mo | | Scans | 5/month | Unlimited | Unlimited | | Line Movement | View | View + Alerts | View + Alerts + Priority | | Bet Tracking | No | Yes | Yes | | Cascade Alerts | No | Yes | Priority | | Performance Analytics | No | Basic | Full + Patterns | Founder badge: "Founder Rate — Locked for Life" visual badge on Analyst/Desk cards. CTA: "Get Started" on Free, "Subscribe" on paid → links to Stripe checkout (Feature 3.4). **5. Social Proof / Trust** - "Built by bettors, for bettors" - Number counters: props analyzed, parlays scanned (can be seeded/estimated) **6. Footer** - Email capture: "Get early access + founder pricing" - Links: Terms, Privacy, Twitter/X, Discord (placeholder) ### /login Supabase Auth login page (email + password, or magic link). ### /signup Supabase Auth signup page → auto-creates user profile (trigger from Feature 1.4). ### /blog MDX-powered blog for SEO content. Static generation at build time. **Content types:** - Betting strategy guides ("How to Read Line Movement Like a Sharp") - Prop analysis breakdowns ("Why PRA Props Are the Most Profitable Market") - Product updates ("New: Cascade Alerts When Your Player Gets Scratched") - Stat explainers ("What Back-to-Back Games Do to Over/Under Props") **Implementation:** - MDX files in `content/blog/` directory - `@next/mdx` or `contentlayer` for parsing - Each post: frontmatter (title, date, slug, description, tags) + MDX body - `/blog` index page with post list, sorted by date - `/blog/[slug]` dynamic route for individual posts - SEO: Open Graph tags, JSON-LD structured data, sitemap.xml - Reading time estimate in post header **Blog post frontmatter:** ```mdx --- title: "How to Read Line Movement Like a Sharp" date: "2026-03-22" slug: "line-movement-guide" description: "Line moves tell a story. Here's how to read it." tags: ["strategy", "line-movement", "sharp-money"] --- ``` **Blog component structure:** ``` web/ ├── app/ │ └── blog/ │ ├── page.tsx # Blog index │ └── [slug]/page.tsx # Individual post ├── content/ │ └── blog/ │ ├── line-movement-guide.mdx │ └── pra-props-explained.mdx ``` ## VYNDR Voice Guide All user-facing copy follows these rules: - **Direct.** No hedging. "This line is soft" not "This line might be worth considering." - **Confident.** The system did the work. Present findings with authority. - **Concise.** Bettors scan fast. Short sentences. No filler. - **Respectful.** Never condescending. Assume the reader knows the game. - **Honest.** If the edge is thin, say so. A D grade is "no edge — avoid" not "proceed with caution." Examples: - Hero: "Stop guessing. Start grading." - Grade A: "Strong edge. Clear play." - Grade D: "No edge. Walk away." - Kill condition: "Back-to-back game. High-minute player. Historically underperforms." - Upgrade pitch: "You've got a good eye. Unlock unlimited scans." ## Component Structure ``` web/ ├── app/ │ ├── layout.tsx # Root layout, fonts, metadata │ ├── page.tsx # Landing page (home) │ ├── login/page.tsx # Login │ ├── signup/page.tsx # Signup │ ├── scan/page.tsx # Feature 3.2 │ ├── tracker/page.tsx # Feature 3.3 │ ├── blog/ │ │ ├── page.tsx # Blog index │ │ └── [slug]/page.tsx # Individual post │ └── api/ # Next.js API routes (proxy to backend if needed) ├── components/ │ ├── Hero.tsx │ ├── HowItWorks.tsx │ ├── Features.tsx │ ├── Pricing.tsx │ ├── Footer.tsx │ ├── GradeCard.tsx # Reusable A/B/C/D grade display │ ├── BlogCard.tsx # Post preview card for blog index │ └── ui/ # Shared UI primitives ├── content/ │ └── blog/ # MDX blog posts ├── lib/ │ ├── supabase.ts # Supabase client (browser) │ ├── api.ts # Backend API client │ └── blog.ts # MDX parsing + post listing helpers ├── public/ │ └── ... # Static assets ├── tailwind.config.ts ├── next.config.ts └── package.json ``` ## Design System - **Colors:** Dark background (#0a0a0a), card backgrounds (#141414), accent green (#22c55e for A grade), yellow (#eab308 for B), orange (#f97316 for C), red (#ef4444 for D) - **Typography:** Inter for body, JetBrains Mono for grades/numbers - **Cards:** Rounded, subtle border, slight glow on hover - **Grade colors:** A=green, B=yellow, C=orange, D=red — consistent across all UI ## Acceptance Criteria 1. Landing page loads with hero, how it works, features, pricing, footer 2. Pricing cards show all 3 tiers with correct prices and feature lists 3. Founder badges visible on Analyst and Desk cards 4. CTA buttons link to correct destinations (scan, checkout) 5. Login/signup pages functional with Supabase Auth 6. Email capture form in footer collects email (store in Supabase or simple list) 7. Blog index at /blog lists posts sorted by date 8. Individual blog posts render MDX with correct formatting 9. Blog posts include Open Graph tags and JSON-LD structured data 10. All copy follows VYNDR voice (direct, confident, concise) 11. Responsive: works on mobile, tablet, desktop 12. Deploys to Vercel 13. Lighthouse performance score > 90 14. Dark theme throughout, grade colors consistent ## Test Plan - Visual regression: screenshots at 3 breakpoints (mobile/tablet/desktop) - Link verification: all CTAs navigate correctly - Auth flow: signup → login → redirect to /scan - Email capture: submit email → stored - Blog: index page renders, individual post renders MDX - Blog: SEO tags present in page source - Lighthouse audit: performance > 90, accessibility > 85