Previate es una aplicación social descentralizada que conecta personas a través de eventos, fiestas y experiencias compartidas. Construida con Next.js 16 y tecnologías Web3, permite a los usuarios gestionar su identidad digital mediante ENS (Ethereum Name Service) y participar en un ecosistema de eventos verificados en blockchain.
- Descubrimiento de Eventos: Exploración de eventos con filtros por categoría, fecha, ubicación y género musical
- Perfiles de Usuario: Perfiles personalizados con historial de eventos y estadísticas
- Grupos Sociales: Creación y gestión de comunidades temáticas
- Juegos de Previa: Juegos interactivos como "Yo Nunca", "Mayor o Menor" y más
- Integración Web3: Conexión con MetaMask y otras wallets compatibles con WalletConnect
- Autenticación ENS: Sistema de identidad basado en Ethereum Name Service
- Resolución de ENS: Autenticación mediante nombres ENS (.eth)
- Sub-nicknames Opcionales: Permite a usuarios crear subdominios personalizados para facilitar la transición Web2 → Web3
- Verificación de Firma: Proceso de sign-in seguro mediante firma de mensajes
- Avatar & Metadata ENS: Integración completa de perfiles ENS con avatares y metadata on-chain
- Integración XMTP: Protocolo de mensajería peer-to-peer descentralizado
- Arkiv Messaging: Sistema alternativo de mensajería cifrada end-to-end
- Mini Wallet Integrada: Envío de tokens y NFTs directamente en conversaciones
- Notificaciones Push: Sistema de notificaciones en tiempo real
- NFT Tickets: Entradas como tokens ERC-721 verificables en blockchain
- Marketplace Secundario: Reventa segura de tickets con comisiones automáticas
- Verificación QR: Sistema de validación de entradas mediante códigos QR on-chain
- Gestión de Capacidad: Control automático de aforo mediante smart contracts
- Royalties para Organizadores: Sistema de regalías para creadores de eventos
El sistema utiliza Ethereum Name Service como pilar fundamental de la identidad:
- Resolución de Identidad: Convierte direcciones complejas (0x...) en nombres legibles (usuario.eth).
- Text Records: Lee metadatos asociados al ENS como avatar, biografía y redes sociales.
- Identidad Pública: Proporciona un perfil unificado y portátil a través de la plataforma.
Sistema robusto para validar la autenticidad de los usuarios:
- Firma Digital: El usuario firma un mensaje criptográfico para probar la propiedad de la wallet.
- Base de Datos Descentralizada: El estado de "perfil verificado" se almacena en Ceramic/ComposeDB o Tableland.
- Reputación On-chain: Construcción de historial verificable de asistencia a eventos.
Comunicación segura y descentralizada integrada directamente en la app:
- Chat Privado: Mensajería directa entre wallets/ENS sin intermediarios.
- Privacidad Total: Encriptación de extremo a extremo por defecto.
- Gasless: Envío de mensajes sin coste de transacción, rápido y eficiente.
- Interoperabilidad: Los chats son accesibles desde cualquier cliente compatible con XMTP.
Almacenamiento de datos de usuario resistente a la censura:
- Tecnología: Implementación con Ceramic/ComposeDB o Tableland.
- Datos Almacenados: Perfiles de usuario, estados de verificación y metadatos de eventos.
- Separación de Datos: La mensajería se maneja vía XMTP, mientras que la metadata estructural vive en la DB descentralizada.
```mermaid graph LR A[Conectar Wallet] --> B[Resolver ENS] B --> C[Firma de Mensaje] C --> D[Guardar Verificación] D --> E[Chat XMTP / Eventos] ```
- Conexión: El usuario conecta su wallet (MetaMask, Rainbow, etc.).
- Resolución: La app busca el nombre ENS y avatar asociado.
- Firma: Se solicita una firma off-chain para verificar propiedad.
- Verificación: Se registra el estado verificado en la DB descentralizada.
- Interacción: Acceso habilitado a chats XMTP y compra de tickets.
```
- Conexión de Wallet ↓
- Resolución de ENS (nombre.eth → dirección) ↓
- Firma de Mensaje de Verificación ↓
- Verificación de Identidad ↓
- Acceso a Funcionalidades Sociales (Chat, Eventos, etc.) ```
```typescript // 1. Usuario conecta wallet await connect({ connector: metaMask() })
// 2. Sistema resuelve ENS name const ensName = await getEnsName({ address: userAddress })
// 3. Usuario firma mensaje de autenticación const signature = await signMessage({ message: authMessage })
// 4. Sistema verifica firma y crea sesión const verified = await verifySignature({ signature, message, address })
// 5. Usuario accede a plataforma con identidad verificada ```
- Next.js 16: Framework React con App Router y Server Components
- React 19: Biblioteca de UI con las últimas características
- Tailwind CSS v4: Estilos utilitarios modernos
- TypeScript: Tipado estático para mayor seguridad
- Wagmi v2: Hooks de React para Ethereum
- Viem v2: Cliente TypeScript para Ethereum (alternativa a ethers.js)
- MetaMask SDK: Integración nativa con MetaMask
- Ethereum Identity Kit: Kit de identidad descentralizada
- OpenZeppelin Contracts: Contratos inteligentes seguros y auditados
- XMTP: Protocolo de mensajería descentralizada
- Arkiv: Sistema de almacenamiento y mensajería
- IPFS: Almacenamiento descentralizado de contenido
- Node.js 18+
- MetaMask u otra wallet compatible
- (Opcional) ENS name para autenticación completa
```bash
git clone https://github.com/tu-usuario/previate-web.git cd previate-web
npm install
cp .env.example .env.local
npm run dev ```
```env
WalletConnect Project ID (obtener en https://cloud.walletconnect.com)
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=tu_project_id
NEXT_PUBLIC_MAINNET_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/tu-api-key NEXT_PUBLIC_SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/tu-api-key
NEXT_PUBLIC_EVENT_TICKET_CONTRACT=0x... ```
Previate está diseñado para facilitar la transición de usuarios tradicionales (Web2) al ecosistema descentralizado (Web3):
- Login Opcional con Wallet: Los usuarios pueden explorar sin conectar wallet
- Sub-nicknames Amigables: En lugar de
0x742d35Cc6..., usarjuan.previate.eth - Experiencia Familiar: UI/UX similar a redes sociales tradicionales
- Educación Progresiva: Tutoriales contextuales sobre Web3
- Gastos Minimizados: Uso de Layer 2 y gasless transactions cuando sea posible
- Sin custodia: Control total sobre identidad y activos
- Portabilidad: Perfil y reputación transferibles entre plataformas
- Monetización Directa: Venta de tickets sin intermediarios
- Privacidad: Comunicaciones cifradas end-to-end
Los tickets como NFTs ofrecen múltiples ventajas:
- Verificación Instantánea: Autenticidad comprobable en blockchain
- Prevención de Fraude: Imposible falsificar o duplicar
- Reventa Controlada: Límites de precio y comisiones automáticas
- Coleccionables: Los tickets se convierten en recuerdos digitales
- Utilidad Extendida: Acceso a contenido exclusivo post-evento
```solidity // EventTicketNFT.sol contract EventTicketNFT is ERC721URIStorage, Ownable { uint256 public ticketPrice; uint256 public maxCapacity; uint256 public ticketsSold;
function mintTicket(address to) public payable {
require(msg.value >= ticketPrice, "Insufficient payment");
require(ticketsSold < maxCapacity, "Event sold out");
uint256 tokenId = ticketsSold++;
_safeMint(to, tokenId);
}
}