Proyecto para cliente10 min de lectura
AllYouNeedIsNft: startup de marketplace de NFT

Tecnologías
Enlaces
Contenido
- Desafío
- Descubrimiento
- Opciones consideradas
- Decisión
- Implementación
- Resultado
- El motor de indexación en acción
- Generación de miniaturas
- Caché bajo demanda
- Nethereum y Domain-Driven Design
- GraphQL con Hot Chocolate
- Colecciones, día a día
- Backend en .NET Core
- Inicio de sesión con firma de wallet
- Panel de administración
- Corrección de errores en móvil
- El formulario de listado
- El formulario de transferencia
- Drops de NFT
- Servicio de unicidad de NFT
- NFTwitting: enseñar NFT a artistas
- Videos educativos para clientes
- Llamadas de los fundadores
Servicios
- →Cofundación y liderazgo técnico
- →Arquitectura y desarrollo de frontend (Next.js)
- →Integración de contratos inteligentes de Ethereum (Solidity + ethers.js)
- →UX de autenticación por wallet (MetaMask, WalletConnect)
- →Planificación de producto, hoja de ruta y contratación de ingenieros
Entregables
- ✓Marketplace de NFT en funcionamiento, listado, compra y venta de tokens en mainnet de Ethereum
- ✓Páginas de perfil de creador y colección con rutas optimizadas para SEO
- ✓Flujo de onboarding de wallet diseñado para usuarios sin experiencia previa en cripto
- ✓MVP lanzado en 3 meses desde cero líneas de código
Desafío
Cofundé AllYouNeedIsNft en un momento en que los marketplaces de NFT estaban en auge pero el espacio estaba dominado por OpenSea. La ventana para entrar era estrecha: lanzar rápido un marketplace funcional, diferenciarse por UX, y establecer relaciones con creadores antes de que el mercado se enfriara. El desafío técnico era real. La integración con blockchain, la seguridad de los contratos inteligentes, la autenticación por wallet y un frontend de nivel consumidor tenían que construirse desde cero por un equipo pequeño sin una base de código existente.
Descubrimiento
Las conversaciones tempranas con artistas y coleccionistas revelaron una queja constante sobre las plataformas existentes: flujos de wallet confusos, mala experiencia móvil y ninguna consideración para creadores emergentes. La oportunidad era un marketplace que se sintiera tan simple como una tienda ecommerce mientras ocultaba la complejidad de blockchain por debajo.
Opciones consideradas
- Bifurcar los contratos de código abierto de OpenSea, evaluado. Se usaron como referencia pero no se bifurcaron directamente; la lógica de negocio requería mecánicas propias de regalías y subastas.
- Usar un marketplace como servicio (por ejemplo, Rarible Protocol), rechazado. Demasiado lock-in; la estructura de comisiones no era viable para el segmento de creadores objetivo.
- Contratos personalizados en Solidity + frontend en Next.js: elegida. Control total sobre la lógica de los contratos, la optimización de gas y la UX.
Decisión
Next.js para el frontend (SSR para SEO en las páginas de colecciones), Solidity para los contratos de marketplace y regalías en Ethereum, ethers.js para la interacción con la wallet. MetaMask y WalletConnect cubrían las dos superficies de wallet dominantes. Las decisiones de arquitectura se tomaron con la velocidad del MVP como restricción principal. La extensibilidad en segundo lugar.

allyouneedisnft.com, scrollable snapshot of the live marketplace
Implementación
Lideré toda la arquitectura del frontend: el enrutamiento, el flujo de conexión de wallet, la capa de interacción con contratos y las páginas de colección/token. El flujo de autenticación por wallet fue un desafío de UX particular, tenía que funcionar para usuarios que nunca habían tocado criptomonedas. Diseñé un modal de onboarding paso a paso que guiaba a los nuevos usuarios a través de la instalación de MetaMask y la conexión sin salir de la página.
Detrás del marketplace había un motor de indexación propio que hablaba con la blockchain directamente a través de la librería Nethereum. Extraía los datos de los tokens en cadena, leía el JSON de metadatos para ERC-1155, ERC-721 y varios formatos más, y guardaba los atributos de las colecciones en una base de datos local. Las imágenes se descargaban de IPFS y se reescalaban a los tamaños que el sitio muestra realmente, de modo que las páginas de colección nunca cargaban los originales a resolución completa.
La caché funcionaba por lazy load: una colección se indexaba la primera vez que alguien la abría, bajo demanda, en lugar de rastrear toda la cadena por adelantado. El progreso de la actualización se enviaba al navegador por WebSockets y se mostraba como una barra de progreso en vivo, así que en la primera visita a una colección grande se veía cómo se iba llenando en vez de una página vacía.
Impulsé las decisiones de producto semana a semana: prioricé los flujos de compra y listado para el MVP, y postergué las subastas y ofertas a la v2. Incorporé a dos ingenieros, definí la estrategia de ramificación y realicé demos semanales con los cofundadores para mantener la hoja de ruta honesta.
Resultado
El MVP se lanzó en 3 meses desde cero. Las primeras colecciones de creadores salieron en vivo en el pico del interés del mercado de NFT. La plataforma manejó transacciones reales en mainnet sin exploits de contratos. Sirvió como una fuerte prueba de concepto de la capacidad del equipo para ejecutar en un espacio de rápido movimiento y técnicamente complejo.
El motor de indexación en acción
Generación de miniaturas
Generación de miniaturas para las imágenes de la colección. La colección se descarga en segundo plano como un proceso microservicio aparte, de modo que el sitio principal no se bloquea mientras tanto, y los archivos se van dejando en disco según llegan, en vez de mantenerse en memoria o volver a pedirse en cada petición.
Caché bajo demanda
Para que el sitio cargara muy rápido, construí una caché propia. Descargaba el JSON de la colección desde la blockchain, bajaba las imágenes y creaba copias redimensionadas. La caché se regeneraba una vez al día bajo demanda: si alguien abría una colección con la caché caducada, empezaba la actualización, y la caché nueva llegaba a todos los que abrían esa colección después.

En el frontend la actualización de la caché se veía como una barra de progreso alimentada por una conexión WebSocket. La actualización de la colección se lanzaba como un proceso en segundo plano independiente para no frenar el resto del sitio, y escribía su estado en el socket a medida que avanzaba. El frontend movía la barra de progreso con cada actualización.

Cuando terminaba la indexación, la página mostraba un botón de recarga y todos los elementos de la colección se recargaban ya con sus imágenes. En el backend el progreso se veía así: el servicio registraba cada token actualizado y el porcentaje completado, y enviaba cada paso a los oyentes del socket.


La actualización en la página y en el log del backend
Nethereum y Domain-Driven Design
Para hablar con la blockchain, el backend usaba Nethereum, una librería de Ethereum para .NET. La captura muestra cómo se crea un nuevo elemento NFT a partir de sus metadatos, con un envoltorio basado en un tipo genérico para que el mismo código sirva a distintos tipos de token. Todo el proyecto siguió Domain-Driven Design y se dividió en capas: el dominio con las entidades y los procesos de negocio, la infraestructura para la base de datos y la blockchain, y la capa de aplicación encima.

GraphQL con Hot Chocolate
El backend se construyó sobre GraphQL, una tecnología puntera en aquel momento, con la librería Hot Chocolate. Encima funcionaban varios trucos de SQL: carga diferida de campos concretos y la regeneración de la caché al pedir un campo determinado dentro de un objeto de proyección.

Colecciones, día a día
Algunas etapas intermedias de la página de colecciones. Cada día se añadían colecciones nuevas al sitio, y cada captura muestra el catálogo un poco más avanzado.


Dos etapas de la página de colecciones
Backend en .NET Core
Así era el backend de AllYouNeedIsNFT. Todo funcionaba sobre .NET Core, así que la mayor parte del desarrollo se hacía en JetBrains Rider. La solución vivía en un monorepo junto a paquetes compartidos, y cada servicio se construía como una imagen de Docker.

La solución del backend en Rider
Inicio de sesión con firma de wallet
Para confirmar que un usuario es realmente dueño de la dirección de wallet que declara, creamos un mecanismo de autenticación propio. El sitio le pide firmar un mensaje arbitrario con un token de seguridad de un solo uso, y luego el backend verifica la firma. Una firma válida demuestra que la persona tiene el derecho de firma de esa dirección concreta, así que no queda duda de quién es.
Las capturas de abajo muestran la verificación de la firma bajo el depurador: el servicio recupera la dirección a partir del mensaje firmado y el handler la compara con la dirección que declaró el usuario.



La solicitud de inicio de sesión y la verificación de la firma en el depurador
Panel de administración
El sitio también tuvo un panel de administración. En él un autor gestionaba sus propias colecciones y ajustes, y un administrador global podía gestionar las colecciones y los ajustes de otros usuarios.

Un breve recorrido por la interfaz de administración de la plataforma.
Corrección de errores en móvil
Corrección de errores en la versión móvil. El marketplace tenía mucha funcionalidad, así que también había bastantes errores: direcciones de wallet largas que se salían de sus campos y controles que se solapaban en pantallas estrechas. Cada flujo se probaba desde un teléfono en la red de pruebas Sepolia, hasta la creación de un listado con Seaport.


Pruebas móviles en la red Sepolia
El formulario de listado
Un recorrido por cómo usar el formulario de listado en allyouneedisnft.com.
El formulario de transferencia
Un recorrido por el formulario para transferir los derechos sobre un elemento de una colección en nuestra plataforma.
Drops de NFT
Una revisión de cómo se crea un drop de NFT, otra función del sitio. Usaba un contrato específico, y durante el evento cualquiera podía conseguir gratis un elemento aleatorio de la colección.
El evento en sí se parece a una sesión AMA. Primero hay una etapa de calentamiento, se crea un canal de Discord y se asignan los anfitriones. Durante el evento se hacen distintos concursos, los invitados charlan, un anfitrión lo conduce todo y, de paso, se hacen sorteos y ventas de la colección.
Servicio de unicidad de NFT
Un desarrollador externo hizo un servicio que comprueba la unicidad y la originalidad de las imágenes NFT, unique.allyouneedisnft.com. La captura muestra su página principal.

A veces tenía que grabar videos presentando funciones y proyectos nuevos para nuestra audiencia de habla inglesa. En el video está uno de ellos: la presentación del servicio que verifica la unicidad de imágenes NFT contra una base de datos reunida de distintos sitios, OpenSea y otros.
En el trabajo sobre unicidad, del servicio se encargó ese desarrollador externo, y con él se acordó la siguiente especificación. Después yo supervisé la ejecución e integré la solución en el sitio principal.
NFTwitting: enseñar NFT a artistas
Para enseñar a la gente a trabajar con NFT, lanzamos un proyecto aparte, NFTwitting. Tuvo un bot de Telegram y su propia campaña publicitaria. En el bot se podía recoger un regalo, suscribirse a las novedades y entrar en el club, y nosotros obteníamos los datos del usuario para calentarlo y llevarlo después a la venta. La campaña se dirigía a artistas, para mostrarles cómo trabajar con NFT y ganar dinero con ellos.


La campaña publicitaria para artistas y el bot al que llevaba
Dentro de AllYouNeedIsNFT también fuimos haciendo crecer un club NFT que enseñaba a los artistas a trabajar con NFT, a tratar con clientes y a vender sus obras en las plataformas NFT más conocidas. El video es un anuncio de lo que enseñamos en nuestro grupo.
Videos educativos para clientes
Trabajando con clientes, muchas veces tenía que responder sus preguntas. Cuando una pregunta se repetía mucho, le dedicaba tiempo: escribía un guion, grababa el video y la voz. El objetivo era educativo: sumar más gente al mundo NFT y acercarla a las cripto.
Este video es un ejemplo: un recorrido por cómo crear una billetera en el conocido exchange Binance y cómo operar con USDT.
Otro video de mi serie educativa ayuda a quienes nunca trabajaron con cripto a entender qué es USDT TRC-20 y cómo usarlo. Quien lo mira configura la extensión de navegador TronLink, crea una billetera y hace su primera transferencia.
Llamadas de los fundadores
Llamadas de los fundadores: reuniones de estado y encuentros periódicos donde cada uno contaba con qué se había topado, cuál era el siguiente plan, hacia dónde íbamos y qué habíamos conseguido ya.

Relacionado
Proyectos

Aurora.Luxe: peritaje técnico y especificaciones para una tienda de ropa de seda
Antes: otro equipo desarrollaba la tienda, y cuando fallaba el intercambio con 1C nadie podía ver por qué ni comprobar el trabajo con precisión. Después: peritaje técnico y aceptación del lado del propietario, y especificaciones como la del sistema de logs que permiten comprobar cada desarrollo punto por punto.

CasaLista: marketplace de servicios para el hogar en Buenos Aires
Antes: un catálogo de servicios que había que reescribir una vez por idioma, así que los moderadores duplicaban trabajo o publicaban fichas a medio traducir. Después: una sola carga da de alta el artículo en todos los idiomas a la vez, más una landing independiente para un servicio concreto en tres idiomas.

Gazbet, Tienda de una empresa de hormigón celular
Antes: no había sitio web, cada consulta empezaba con una llamada y un presupuesto manual. Después: un catálogo con una calculadora que convierte los parámetros del comprador en una oferta concreta, así más visitas terminan en venta.
Artículos

AllYouNeedIsNFT: verificación de unicidad de imágenes y un editor generativo de NFT
Dos herramientas del marketplace AllYouNeedIsNFT: un servicio que compara una imagen NFT nueva con colecciones indexadas y un editor que arma collages con los recursos de un solo artista.
Estructura de proyecto y pruebas en .NET Core 6 vs .NET Core 5: pruebas unitarias, GraphQL y fixtures de test server
Una comparación práctica de las estructuras de proyecto de .NET Core 5 y 6, con ejemplos reales de pruebas unitarias, integración con GraphQL y configuración de fixtures de test server.
Disponible para colaboración por contrato
Estoy disponible para colaborar por contrato. Si tiene una idea de proyecto interesante, reserve una llamada por Calendly.
Agenda una llamada de 30 min