Initial commit: HotWives Platform completa

- Backend completo com Express, TypeScript e Prisma
- Sistema de autenticação JWT
- API REST com todas as funcionalidades
- Sistema de mensagens e chat em tempo real (Socket.io)
- Upload e gerenciamento de fotos
- Sistema de perfis com verificação
- Busca avançada com filtros
- Sistema de eventos
- Dashboard administrativo
- Frontend Next.js 14 com TypeScript
- Design moderno com Tailwind CSS
- Componentes UI com Radix UI
- Tema dark/light
- Configuração Nginx pronta para produção
- Scripts de instalação e deploy
- Documentação completa
This commit is contained in:
root
2025-11-22 01:00:35 +00:00
commit 5e4a2283bf
51 changed files with 5158 additions and 0 deletions

78
frontend/app/globals.css Normal file
View File

@@ -0,0 +1,78 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
--primary: 339 82% 52%;
--primary-foreground: 0 0% 100%;
--secondary: 210 40% 96.1%;
--secondary-foreground: 222.2 47.4% 11.2%;
--muted: 210 40% 96.1%;
--muted-foreground: 215.4 16.3% 46.9%;
--accent: 210 40% 96.1%;
--accent-foreground: 222.2 47.4% 11.2%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--ring: 339 82% 52%;
--radius: 0.5rem;
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
--popover: 222.2 84% 4.9%;
--popover-foreground: 210 40% 98%;
--primary: 339 82% 52%;
--primary-foreground: 0 0% 100%;
--secondary: 217.2 32.6% 17.5%;
--secondary-foreground: 210 40% 98%;
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 210 40% 98%;
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
--ring: 339 82% 52%;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
}
}
/* Custom scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
@apply bg-gray-100 dark:bg-gray-900;
}
::-webkit-scrollbar-thumb {
@apply bg-gray-300 dark:bg-gray-700 rounded-full;
}
::-webkit-scrollbar-thumb:hover {
@apply bg-gray-400 dark:bg-gray-600;
}

36
frontend/app/layout.tsx Normal file
View File

@@ -0,0 +1,36 @@
import type { Metadata } from 'next'
import { Inter } from 'next/font/google'
import './globals.css'
import { ThemeProvider } from '@/components/theme-provider'
import { Toaster } from '@/components/ui/toaster'
const inter = Inter({ subsets: ['latin'] })
export const metadata: Metadata = {
title: 'HotWives - Plataforma de Encontros para Casais',
description: 'A melhor plataforma para casais que buscam novas experiências e conexões',
keywords: 'encontros, casais, relacionamentos, swing, hotwife',
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="pt-BR" suppressHydrationWarning>
<body className={inter.className}>
<ThemeProvider
attribute="class"
defaultTheme="dark"
enableSystem
disableTransitionOnChange
>
{children}
<Toaster />
</ThemeProvider>
</body>
</html>
)
}

193
frontend/app/page.tsx Normal file
View File

@@ -0,0 +1,193 @@
import Link from 'next/link'
import { Button } from '@/components/ui/button'
import { Heart, Users, Shield, MessageCircle, Calendar, Star } from 'lucide-react'
export default function HomePage() {
return (
<div className="min-h-screen bg-gradient-to-br from-pink-50 via-purple-50 to-indigo-50 dark:from-gray-900 dark:via-purple-900 dark:to-pink-900">
{/* Header */}
<header className="fixed top-0 w-full bg-white/80 dark:bg-gray-900/80 backdrop-blur-md z-50 border-b">
<div className="container mx-auto px-4 h-16 flex items-center justify-between">
<Link href="/" className="flex items-center space-x-2">
<Heart className="h-8 w-8 text-primary-500 fill-primary-500" />
<span className="text-2xl font-bold bg-gradient-to-r from-primary-500 to-pink-600 bg-clip-text text-transparent">
HotWives
</span>
</Link>
<nav className="hidden md:flex items-center space-x-6">
<Link href="/explore" className="hover:text-primary-500 transition">
Explorar
</Link>
<Link href="/events" className="hover:text-primary-500 transition">
Eventos
</Link>
<Link href="/about" className="hover:text-primary-500 transition">
Sobre
</Link>
</nav>
<div className="flex items-center space-x-4">
<Link href="/login">
<Button variant="ghost">Entrar</Button>
</Link>
<Link href="/register">
<Button className="bg-primary-500 hover:bg-primary-600">
Cadastrar
</Button>
</Link>
</div>
</div>
</header>
{/* Hero Section */}
<section className="pt-32 pb-20 px-4">
<div className="container mx-auto text-center">
<h1 className="text-5xl md:text-7xl font-bold mb-6 bg-gradient-to-r from-primary-500 via-pink-500 to-purple-600 bg-clip-text text-transparent">
Conecte-se com Casais<br />de Forma Segura
</h1>
<p className="text-xl md:text-2xl text-gray-600 dark:text-gray-300 mb-8 max-w-3xl mx-auto">
A plataforma mais completa e discreta para casais que buscam novas experiências e conexões autênticas.
</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<Link href="/register">
<Button size="lg" className="bg-primary-500 hover:bg-primary-600 text-lg px-8 py-6">
Começar Agora
</Button>
</Link>
<Link href="/explore">
<Button size="lg" variant="outline" className="text-lg px-8 py-6">
Explorar Perfis
</Button>
</Link>
</div>
</div>
</section>
{/* Features */}
<section className="py-20 px-4 bg-white/50 dark:bg-gray-800/50">
<div className="container mx-auto">
<h2 className="text-4xl font-bold text-center mb-16">
Por que escolher o HotWives?
</h2>
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
<div className="p-6 rounded-xl bg-white dark:bg-gray-900 shadow-lg hover:shadow-xl transition">
<Users className="h-12 w-12 text-primary-500 mb-4" />
<h3 className="text-xl font-bold mb-2">Perfis Verificados</h3>
<p className="text-gray-600 dark:text-gray-400">
Sistema de verificação rigoroso para garantir perfis autênticos e seguros.
</p>
</div>
<div className="p-6 rounded-xl bg-white dark:bg-gray-900 shadow-lg hover:shadow-xl transition">
<Shield className="h-12 w-12 text-primary-500 mb-4" />
<h3 className="text-xl font-bold mb-2">Privacidade Total</h3>
<p className="text-gray-600 dark:text-gray-400">
Controle completo sobre quem pode ver suas fotos e informações pessoais.
</p>
</div>
<div className="p-6 rounded-xl bg-white dark:bg-gray-900 shadow-lg hover:shadow-xl transition">
<MessageCircle className="h-12 w-12 text-primary-500 mb-4" />
<h3 className="text-xl font-bold mb-2">Chat em Tempo Real</h3>
<p className="text-gray-600 dark:text-gray-400">
Converse instantaneamente com outros casais de forma segura e privada.
</p>
</div>
<div className="p-6 rounded-xl bg-white dark:bg-gray-900 shadow-lg hover:shadow-xl transition">
<Calendar className="h-12 w-12 text-primary-500 mb-4" />
<h3 className="text-xl font-bold mb-2">Eventos Exclusivos</h3>
<p className="text-gray-600 dark:text-gray-400">
Participe de eventos e encontros organizados pela comunidade.
</p>
</div>
<div className="p-6 rounded-xl bg-white dark:bg-gray-900 shadow-lg hover:shadow-xl transition">
<Star className="h-12 w-12 text-primary-500 mb-4" />
<h3 className="text-xl font-bold mb-2">Busca Avançada</h3>
<p className="text-gray-600 dark:text-gray-400">
Encontre exatamente o que você procura com filtros inteligentes.
</p>
</div>
<div className="p-6 rounded-xl bg-white dark:bg-gray-900 shadow-lg hover:shadow-xl transition">
<Heart className="h-12 w-12 text-primary-500 mb-4 fill-primary-500" />
<h3 className="text-xl font-bold mb-2">Comunidade Ativa</h3>
<p className="text-gray-600 dark:text-gray-400">
Milhares de casais conectados e novas oportunidades todos os dias.
</p>
</div>
</div>
</div>
</section>
{/* CTA Section */}
<section className="py-20 px-4">
<div className="container mx-auto text-center">
<h2 className="text-4xl md:text-5xl font-bold mb-6">
Pronto para começar sua jornada?
</h2>
<p className="text-xl text-gray-600 dark:text-gray-300 mb-8 max-w-2xl mx-auto">
Junte-se a milhares de casais que estão explorando novas possibilidades de forma segura e discreta.
</p>
<Link href="/register">
<Button size="lg" className="bg-primary-500 hover:bg-primary-600 text-lg px-12 py-6">
Criar Conta Grátis
</Button>
</Link>
</div>
</section>
{/* Footer */}
<footer className="py-12 px-4 bg-gray-900 text-white">
<div className="container mx-auto">
<div className="grid md:grid-cols-4 gap-8">
<div>
<div className="flex items-center space-x-2 mb-4">
<Heart className="h-6 w-6 text-primary-500 fill-primary-500" />
<span className="text-xl font-bold">HotWives</span>
</div>
<p className="text-gray-400">
A plataforma mais completa para casais.
</p>
</div>
<div>
<h4 className="font-bold mb-4">Plataforma</h4>
<ul className="space-y-2 text-gray-400">
<li><Link href="/explore" className="hover:text-white">Explorar</Link></li>
<li><Link href="/events" className="hover:text-white">Eventos</Link></li>
<li><Link href="/premium" className="hover:text-white">Premium</Link></li>
</ul>
</div>
<div>
<h4 className="font-bold mb-4">Suporte</h4>
<ul className="space-y-2 text-gray-400">
<li><Link href="/help" className="hover:text-white">Ajuda</Link></li>
<li><Link href="/safety" className="hover:text-white">Segurança</Link></li>
<li><Link href="/contact" className="hover:text-white">Contato</Link></li>
</ul>
</div>
<div>
<h4 className="font-bold mb-4">Legal</h4>
<ul className="space-y-2 text-gray-400">
<li><Link href="/terms" className="hover:text-white">Termos de Uso</Link></li>
<li><Link href="/privacy" className="hover:text-white">Privacidade</Link></li>
<li><Link href="/cookies" className="hover:text-white">Cookies</Link></li>
</ul>
</div>
</div>
<div className="border-t border-gray-800 mt-8 pt-8 text-center text-gray-400">
<p>&copy; 2025 HotWives. Todos os direitos reservados.</p>
</div>
</div>
</footer>
</div>
)
}