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
Roadmap · Arquitectura · Frontend · Juez en línea · API · Contribuir · Decisiones técnicas
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.
- 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.
| 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 |
| 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) |
| 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.
| Tecnología | Uso |
|---|---|
| Docker + Docker Compose | Servicios locales (Redis, Jenkins, etc.) |
| Jenkins | Pipeline de CI definido en Jenkinsfile |
Antes de empezar, asegúrate de tener instalado:
- Node.js
- npm
- Git
- Docker y Docker Compose (para Redis, servicios locales y Jenkins)
git clone https://github.com/<usuario>/<repositorio>.git
cd <repositorio>npm install
npm run devLuego abre la URL local que indique la terminal, normalmente:
http://localhost:5173
Ajusta las rutas de los comandos si tu estructura de carpetas difiere (por ejemplo,
apps/apien un monorepo).
cd api
npm installCrea 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:6379Levanta Redis y Postgres, aplica las migraciones de Prisma y arranca el servidor:
docker-compose up -d
npx prisma migrate dev
npm run devEl backend quedará disponible normalmente en:
http://localhost:3000
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 --buildJenkins quedará disponible en:
http://localhost:8080
La guía completa está en docs/JENKINS_DOCKER.md.
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:
- Abrir la aplicación en el navegador.
- Explorar la lista de problemas disponibles.
- Entrar al detalle de un problema.
- Revisar el enunciado y la interfaz de solución.
- 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.
La documentación ampliada del proyecto vive en docs/:
Las contribuciones son bienvenidas, especialmente en documentación, interfaz, estructura del proyecto, backend/juez y mejoras de experiencia de usuario.
Antes de contribuir:
- Revisa la documentación del proyecto en
docs/. - Trabaja desde una rama separada (
feature/...,fix/...). - Envía tus cambios mediante pull request para mantener un flujo ordenado.
La guía completa de contribución está en docs/contributing.md.
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.
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.
