PRODUCTO SAAS v1.0

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

Slide 1
1 / 19

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

Email

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.

download-token.ts
// 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.