FiveM Store
Marketplace premium para la comunidad de FiveM: compra y descarga scripts, assets y recursos para servidores.
Cronología
3 Semanas
Rol
Full Stack Developer

El Problema
La comunidad de FiveM carece de una plataforma centralizada y de confianza donde adquirir recursos premium para servidores. Los creadores de contenido no tienen un canal profesional para monetizar su trabajo y los administradores de servidores deben buscar en foros dispersos con riesgo de descargar contenido malicioso o desactualizado.
- ✕Ausencia de un marketplace confiable y seguro específico para FiveM.
- ✕Sin protección para el contenido digital: los archivos podían redistribuirse libremente.
- ✕Falta de soporte en tiempo real para resolver dudas de compra o instalación.
- ✕Gestión manual de inventario y pedidos sin panel de administración centralizado.
La Solución
Diseñé y desarrollé una plataforma e-commerce completa orientada a la comunidad de FiveM, combinando pagos seguros, descarga protegida de contenido digital y soporte en tiempo real mediante WebSockets.
E-commerce Completo
Carrito de compras, sistema de descuentos y pasarela de pago segura integrada con Stripe Checkout.
Descargas Seguras
Sistema de tokens temporales de un solo uso para proteger el contenido digital y evitar redistribuciones no autorizadas.
Panel de Administración
Gestión completa de productos, categorías, pedidos y soporte al cliente desde un único dashboard.
Soporte Real-time
Chat de tickets integrado con notificaciones instantáneas vía Socket.io para una atención al cliente fluida.
Multi-idioma
Soporte completo para Español e Inglés mediante next-intl con detección automática de idioma.
Diseño Premium
Interfaz responsive con modo oscuro, animaciones fluidas y una experiencia de usuario de alto nivel.
Stack Tecnológico
Next.js 16
Framework
React 19
Frontend
TypeScript
Language
PostgreSQL
Database
Prisma
ORM
Stripe
Payments
Socket.io
Realtime
TailwindCSS
Styling
next-intl
i18n
Nodemailer
Retos Técnicos
Sistema de Descarga Segura
Proteger el contenido digital requirió implementar tokens de descarga de un solo uso con expiración temporal. Cada token se genera tras confirmar el pago, se almacena en base de datos y se invalida automáticamente tras su primer uso, impidiendo la redistribución no autorizada.
// Generate a one-time signed download token
export async function generateDownloadToken(orderId: string, productId: string) {
const token = crypto.randomUUID();
const expiresAt = new Date(Date.now() + 15 * 60 * 1000); // 15 min
await db.downloadToken.create({
data: { token, orderId, productId, expiresAt, used: false },
});
return token;
}
// Validate and consume the token (one-time use)
export async function consumeDownloadToken(token: string) {
const record = await db.downloadToken.findUnique({ where: { token } });
if (!record || record.used || record.expiresAt < new Date()) {
throw new Error('Invalid or expired download token');
}
await db.downloadToken.update({ where: { token }, data: { used: true } });
return record;
}WebSockets en Entorno Serverless
Mantener conexiones Socket.io persistentes en un entorno serverless como Vercel fue el mayor reto. La solución pasó por migrar a Pusher como proveedor de WebSockets gestionado, permitiendo notificaciones en tiempo real sin necesidad de un servidor dedicado.