feat: Feature 3.1 — Landing page + blog + Phase 3 specs

Next.js 14+ web app in web/ directory:
- Landing page: Hero, How It Works, Features, 3-tier Pricing with
  founder badges, Footer with email capture
- Blog system: MDX-powered, /blog index + /blog/[slug] pages,
  reading time, Open Graph tags, JSON-LD structured data
- Auth pages: /login + /signup (Supabase Auth ready)
- Design system: dark theme, grade colors (A/B/C/D), BetonBLK voice
- 1 seed blog post: "How to Read Line Movement Like a Sharp"
- Specs for 3.2 (Scan UI), 3.3 (Bet Tracker), 3.4 (Stripe)

Build passes clean: 7 static pages generated.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kev
2026-03-22 09:43:38 -04:00
parent ed6502a880
commit bfa8345ebf
26 changed files with 5142 additions and 31 deletions
+62
View File
@@ -0,0 +1,62 @@
'use client';
import { useState } from 'react';
export default function Footer() {
const [email, setEmail] = useState('');
const [submitted, setSubmitted] = useState(false);
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
// TODO: Store email in Supabase
setSubmitted(true);
};
return (
<footer className="py-16 px-4 border-t border-[var(--border)]">
<div className="max-w-5xl mx-auto">
<div className="grid md:grid-cols-2 gap-12 mb-12">
<div>
<h3 className="font-mono font-bold text-lg mb-2">
Beton<span className="text-[var(--accent)]">BLK</span>
</h3>
<p className="text-sm text-[var(--text-muted)] max-w-sm">
AI-powered parlay intelligence. Built by bettors, for bettors.
</p>
</div>
<div>
<h4 className="font-semibold mb-3">Get early access + founder pricing</h4>
{submitted ? (
<p className="text-[var(--grade-a)] text-sm">You're in. We'll be in touch.</p>
) : (
<form onSubmit={handleSubmit} className="flex gap-2">
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
placeholder="your@email.com"
required
className="flex-1 px-4 py-2 rounded-lg bg-[var(--card)] border border-[var(--border)] text-sm text-white placeholder:text-[var(--text-muted)] focus:outline-none focus:border-[var(--accent)]"
/>
<button
type="submit"
className="px-6 py-2 bg-[var(--accent)] text-white rounded-lg text-sm font-medium hover:opacity-90 transition"
>
Join
</button>
</form>
)}
</div>
</div>
<div className="flex justify-between items-center text-xs text-[var(--text-muted)] border-t border-[var(--border)] pt-6">
<span>2026 BetonBLK. All rights reserved.</span>
<div className="flex gap-4">
<a href="#" className="hover:text-white transition">Terms</a>
<a href="#" className="hover:text-white transition">Privacy</a>
<a href="#" className="hover:text-white transition">Twitter/X</a>
</div>
</div>
</div>
</footer>
);
}