Skip to content

Repository files navigation

Cabecera del proyecto

Codenix

Plataforma web para practicar programación competitiva y algoritmos. Problemas, envíos de soluciones, ejecución de código y seguimiento de progreso — todo en un solo lugar.

Un proyecto de IEEE Computer Society — Rama Estudiantil UNI

React TypeScript Vite TailwindCSS Node.js Express PostgreSQL Prisma Redis BullMQ Docker License: MIT

Roadmap · Arquitectura · Frontend · Juez en línea · API · Contribuir · Decisiones técnicas


Sobre el proyecto

Codenix es una iniciativa de IEEE Computer Society, Rama Estudiantil UNI, pensada para acercar la programación competitiva y el desarrollo de algoritmos a la comunidad estudiantil de la Universidad Nacional de Ingeniería y a cualquier persona que quiera mejorar resolviendo problemas.

Nace con un objetivo claro: dar a los estudiantes un espacio propio, hecho por y para la comunidad IEEE-UNI, donde practicar no dependa de plataformas externas ni de configurar nada en local — solo entrar, elegir un problema y programar.

El proyecto prioriza una base sólida antes que features vistosas: arquitectura clara, backend preparado para ejecutar código de forma segura y asíncrona, y una interfaz moderna inspirada en las plataformas de coding que ya conoces.

¿Qué puedes hacer aquí?

  • Explorar problemas de programación organizados por dificultad y tema.
  • Escribir y enviar soluciones desde el navegador.
  • Ejecutar código en los lenguajes soportados y ver el resultado del juicio (AC, WA, TLE, RE...).
  • Revisar el historial y el detalle de tus envíos.
  • Seguir tu progreso dentro de la plataforma.
  • Practicar con una interfaz clara e inspirada en plataformas modernas de coding.

Stack tecnológico

Frontend

Tecnología Uso
React Librería de UI
TypeScript Tipado estático en todo el frontend
Vite Bundler y entorno de desarrollo
Tailwind CSS Estilos utilitarios

Backend / API

Tecnología Uso
Node.js + Express Servidor HTTP y capa de rutas/controladores
TypeScript Tipado estático en todo el backend
Prisma + PostgreSQL ORM y base de datos relacional
Zod Validación de esquemas en cada endpoint
JWT (jsonwebtoken) Autenticación stateless (access tokens firmados HS256)
OAuth 2.0 (Google, GitHub) Login social, con state firmado (HMAC) para protección CSRF
bcryptjs Hash de contraseñas
express-rate-limit Límites de tasa en endpoints sensibles (login, registro, reset de contraseña)

Juez en línea / procesamiento asíncrono

Tecnología Uso
Redis Almacenamiento en memoria para colas y caché
BullMQ Cola de trabajos para desacoplar el envío de una solución de su ejecución/juicio real

Ejecutar código arbitrario de forma segura toma tiempo y no puede bloquear la petición HTTP del usuario. Por eso cada envío se encola con BullMQ (respaldado por Redis) y se procesa en un worker independiente, que compila/ejecuta la solución contra los casos de prueba y actualiza el resultado del envío de forma asíncrona.

Lenguajes objetivo para ejecución de soluciones en la primera versión:

  • Python
  • Java
  • C

Esta sección se actualizará conforme se consoliden las decisiones técnicas del juez. Ver docs/judge.md.

Infraestructura / DevOps

Tecnología Uso
Docker + Docker Compose Servicios locales (Redis, Jenkins, etc.)
Jenkins Pipeline de CI definido en Jenkinsfile

Instalación y puesta en marcha

Requisitos

Antes de empezar, asegúrate de tener instalado:

  • Node.js
  • npm
  • Git
  • Docker y Docker Compose (para Redis, servicios locales y Jenkins)

Clonar el repositorio

git clone https://github.com/<usuario>/<repositorio>.git
cd <repositorio>

Frontend

npm install
npm run dev

Luego abre la URL local que indique la terminal, normalmente:

http://localhost:5173

Backend / API

Ajusta las rutas de los comandos si tu estructura de carpetas difiere (por ejemplo, apps/api en un monorepo).

cd api
npm install

Crea un archivo .env a partir de .env.example con, al menos, las siguientes variables:

# Servidor
NODE_ENV=development
PORT=3000

# Base de datos
DATABASE_URL=postgresql://user:password@localhost:5432/codenix

# JWT (access token)
JWT_ACCESS_SECRET=
JWT_ACCESS_EXPIRES_IN=15m
JWT_ACCESS_ISSUER=codenix
JWT_ACCESS_AUDIENCE=codenix-client

# OAuth — Google
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CALLBACK_URL=http://localhost:3000/auth/google/callback

# OAuth — GitHub
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
GITHUB_CALLBACK_URL=http://localhost:3000/auth/github/callback

# Frontend
FRONTEND_URL=http://localhost:5173
FRONTEND_AUTH_CALLBACK_URL=http://localhost:5173/auth/callback

# Redis / BullMQ
REDIS_URL=redis://localhost:6379

Levanta Redis y Postgres, aplica las migraciones de Prisma y arranca el servidor:

docker-compose up -d
npx prisma migrate dev
npm run dev

El backend quedará disponible normalmente en:

http://localhost:3000

Jenkins con Docker

El repositorio incluye una instalación local de Jenkins sobre Docker para ejecutar el pipeline de CI definido en Jenkinsfile.

docker-compose -f docker-compose.jenkins.yml up -d --build

Jenkins quedará disponible en:

http://localhost:8080

La guía completa está en docs/JENKINS_DOCKER.md.


Uso básico

En esta etapa el frontend puede ejecutarse con datos simulados para construir y validar la experiencia de usuario mientras el backend y el juez terminan de integrarse.

Flujo esperado:

  1. Abrir la aplicación en el navegador.
  2. Explorar la lista de problemas disponibles.
  3. Entrar al detalle de un problema.
  4. Revisar el enunciado y la interfaz de solución.
  5. Enviar una solución y ver cómo se encola y se resuelve su resultado.

A medida que avance el backend y el juez en línea, este flujo se conecta con datos reales y ejecución controlada de código a través de la cola de BullMQ.


Documentación

La documentación ampliada del proyecto vive en docs/:


Contribución

Las contribuciones son bienvenidas, especialmente en documentación, interfaz, estructura del proyecto, backend/juez y mejoras de experiencia de usuario.

Antes de contribuir:

  1. Revisa la documentación del proyecto en docs/.
  2. Trabaja desde una rama separada (feature/..., fix/...).
  3. Envía tus cambios mediante pull request para mantener un flujo ordenado.

La guía completa de contribución está en docs/contributing.md.


IEEE Computer Society — Rama Estudiantil UNI

Codenix es uno de los proyectos impulsados por IEEE Computer Society (CS), capítulo de la Rama Estudiantil IEEE de la Universidad Nacional de Ingeniería, orientado a fomentar la computación, la programación y el desarrollo de software entre estudiantes.

Si eres parte de la comunidad UNI (o simplemente te gusta programar) y quieres sumarte al desarrollo, revisa la guía de contribución o escríbenos a través de los canales de IEEE CS UNI.


Licencia

Este proyecto está bajo la licencia MIT. Puedes usar, copiar, modificar y distribuir el código libremente, siempre que conserves el aviso de copyright. Consulta el archivo LICENSE para el texto completo.

About

Plataforma de práctica algorítmica con problemas, envíos, juez en línea y seguimiento de progreso.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages