Skip to content

leocagli/previate-esta-hackaton

Repository files navigation

🎉 Previate - Plataforma Social Web3 para Eventos

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.

🌟 Características Principales

✅ Implementado

  • 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

🚧 Roadmap

Fase 1: Sistema de Identidad ENS Completo (En Desarrollo)

  • 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

Fase 2: Mensajería Descentralizada

  • 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

Fase 3: Ticketing Web3

  • 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

🔗 Integraciones Clave

1. ENS (.eth) - Identidad Digital

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.

2. Verificación de Perfiles

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.

3. Mensajería con XMTP

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.

4. Base de Datos Descentralizada

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.

🔄 Flujo General de la Plataforma

```mermaid graph LR A[Conectar Wallet] --> B[Resolver ENS] B --> C[Firma de Mensaje] C --> D[Guardar Verificación] D --> E[Chat XMTP / Eventos] ```

  1. Conexión: El usuario conecta su wallet (MetaMask, Rainbow, etc.).
  2. Resolución: La app busca el nombre ENS y avatar asociado.
  3. Firma: Se solicita una firma off-chain para verificar propiedad.
  4. Verificación: Se registra el estado verificado en la DB descentralizada.
  5. Interacción: Acceso habilitado a chats XMTP y compra de tickets.

🔐 Flujo de Autenticación Web3

```

  1. Conexión de Wallet ↓
  2. Resolución de ENS (nombre.eth → dirección) ↓
  3. Firma de Mensaje de Verificación ↓
  4. Verificación de Identidad ↓
  5. Acceso a Funcionalidades Sociales (Chat, Eventos, etc.) ```

Ejemplo de Flujo de Usuario

```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 ```

🛠️ Stack Tecnológico

Frontend

  • 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

Web3

  • 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

Backend (Futuro)

  • XMTP: Protocolo de mensajería descentralizada
  • Arkiv: Sistema de almacenamiento y mensajería
  • IPFS: Almacenamiento descentralizado de contenido

🚀 Inicio Rápido

Requisitos Previos

  • Node.js 18+
  • MetaMask u otra wallet compatible
  • (Opcional) ENS name para autenticación completa

Instalación

```bash

Clonar repositorio

git clone https://github.com/tu-usuario/previate-web.git cd previate-web

Instalar dependencias

npm install

Configurar variables de entorno

cp .env.example .env.local

Edita .env.local con tus valores

Iniciar servidor de desarrollo

npm run dev ```

Variables de Entorno

```env

WalletConnect Project ID (obtener en https://cloud.walletconnect.com)

NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=tu_project_id

RPC URLs (opcional, usa valores por defecto si no se especifican)

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

Dirección del contrato de tickets (después del deploy)

NEXT_PUBLIC_EVENT_TICKET_CONTRACT=0x... ```

📱 Onboarding Web2 → Web3

Previate está diseñado para facilitar la transición de usuarios tradicionales (Web2) al ecosistema descentralizado (Web3):

Estrategia de Adopción

  1. Login Opcional con Wallet: Los usuarios pueden explorar sin conectar wallet
  2. Sub-nicknames Amigables: En lugar de 0x742d35Cc6..., usar juan.previate.eth
  3. Experiencia Familiar: UI/UX similar a redes sociales tradicionales
  4. Educación Progresiva: Tutoriales contextuales sobre Web3
  5. Gastos Minimizados: Uso de Layer 2 y gasless transactions cuando sea posible

Ventajas para Usuarios Web2

  • 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

🎟️ Sistema de Ticketing NFT

Los tickets como NFTs ofrecen múltiples ventajas:

Beneficios

  • 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

Ejemplo de Contrato

```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);
}

}

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors