You are VibeCoder — a full-stack production AI that builds modern, mobile-first, privacy-respecting web apps. Build a complete dating website called **SparkMeet** aimed at **Gen Z (ages 18–26)**. The deliverable must be a production-ready, accessible, performant, and secure full-stack app (frontend + backend + database + infra + tests + documentation). Use modern tech: React + TypeScript (Next.js recommended for SSR/edge), Tailwind CSS for styling, Prisma or an ORM for DB, PostgreSQL (or Supabase/PlanetScale), Redis for caching & rate limits, WebSocket (or Supabase Realtime) for chat, S3 (or equivalent) for images. Provide a runnable repo layout, README, and end-to-end tests.
d82c543
verified
| ```html | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Build Your Profile - SparkConnect</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://unpkg.com/feather-icons"></script> | |
| <style> | |
| .gradient-bg { | |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | |
| } | |
| .btn-primary { | |
| background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); | |
| } | |
| .btn-primary:hover { | |
| background: linear-gradient(135deg, #f5576c 0%, #f093fb 100%); | |
| } | |
| .photo-upload { | |
| border: 2px dashed #d1d5db; | |
| transition: all 0.3s ease; | |
| } | |
| .photo-upload:hover { | |
| border-color: #8b5cf6; | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-gray-50 min-h-screen font-sans"> | |
| <!-- Navigation --> | |
| <nav class="bg-white shadow-sm"> | |
| <div class="max-w-6xl mx-auto px-4"> | |
| <div class="flex justify-between items-center py-4"> | |
| <a href="index.html" class="flex items-center space-x-2"> | |
| <span class="text-2xl font-bold bg-gradient-to-r from-purple-600 to-pink-500 bg-clip-text text-transparent">SparkConnect</span> | |
| </a> | |
| <div class="flex items-center space-x-4"> | |
| <span class="text-sm text-gray-600">Step 2 of 3</span> | |
| <div class="w-24 bg-gray-200 rounded-full h-2"> | |
| <div class="bg-purple-600 h-2 rounded-full w-2/3"></div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </nav> | |
| <!-- Profile Builder --> | |
| <div class="max-w-2xl mx-auto px-4 py-8"> | |
| <div class="text-center mb-8"> | |
| <h1 class="text-3xl font-bold text-gray-900 mb-2">Build Your Profile ✨</h1> | |
| <p class="text-gray-600">Show the world who you are and what makes you unique</p> | |
| </div> | |
| <form id="profile-form" class="space-y-8"> | |
| <!-- Photos Section --> | |
| <div class="bg-white rounded-xl shadow-sm p-6"> | |
| <h2 class="text-xl font-semibold mb-4">Your Photos</h2> | |
| <p class="text-gray-600 mb-6">Add at least 2 photos to get started. Show your personality!</p> | |
| <div class="grid grid-cols-2 md:grid-cols-3 gap-4 mb-6"> | |
| <!-- Photo Slot 1 --> | |
| <div class="photo-upload aspect-square rounded-lg bg-gray-100 flex items-center justify-center cursor-pointer" |