Plataforma web educativa para la práctica y evaluación de cursos de matemáticas a nivel universitario, construida con Django (backend) y React (frontend), usando PostgreSQL como base de datos principal.
- Frontend
- React
- Tailwind CSS (estilos y diseño)
- React Router (ruteo en el cliente)
- Axios o fetch API (consumo de API REST)
- Vite / Create React App (según configuración del proyecto)
- Backend
- Django
- Django REST Framework (API REST)
- Base de datos
- Infraestructura / DevOps
- Git + GitHub (control de versiones)
- Entorno virtual de Python (
venv/pipenv/poetry) - Gestor de dependencias JS:
npmoyarn - Despliegue recomendado:
- Frontend: Vercel/Netlify o servidor web estático
- Backend: servidor con Gunicorn + Nginx / Railway / Render / similar
- Base de datos: instancia de PostgreSQL gestionada (Heroku PG, Railway, RDS, etc.)
El proyecto está organizado como una aplicación web con frontend y backend desacoplados:
-
Frontend (SPA en React)
Consume la API REST del backend para gestionar:- Autenticación de usuarios y roles (estudiante, creador de contenido, administrador).
- Panel de estudiante (progreso, métricas, alertas).
- Exploración de materias y temarios.
- Banco de preguntas y simulador de exámenes.
- Módulos de recursos (marketplace) y tutorías SOS.
- Foro y herramientas (formularios, calculadoras, etc.).
-
Backend (API REST en Django + DRF)
Expone endpoints seguros para:- Gestión de usuarios y roles.
- CRUD de materias, temas y contenidos.
- Banco de preguntas y exámenes.
- Registro de progreso, resultados y estadísticas.
- Gestión de recursos, tutorías y pagos (si aplica).
- Administración (panel de administración y endpoints internos).
-
Base de datos (PostgreSQL)
- Almacena usuarios, materias, preguntas, exámenes, resultados, recursos, tutorías, etc.
- Se define mediante modelos de Django y migraciones.
estudia-pro/
├── backend/
│ ├── manage.py
│ ├── requirements.txt
│ ├── estudia_pro/ # Configuración principal de Django
│ └── apps/
│ ├── users/
│ ├── courses/
│ ├── questions/
│ ├── exams/
│ ├── marketplace/
│ └── tutoring/
├── frontend/
│ ├── package.json
│ ├── vite.config.js / webpack.config.js
│ └── src/
│ ├── components/
│ ├── pages/
│ ├── hooks/
│ ├── services/ # Cliente API (axios, fetch)
│ └── router/
└── README.mdLa estructura exacta puede variar según la implementación real del repo.
Backend
- Python 3.10+ (recomendado)
- PostgreSQL 13+
- pip y virtualenv / pipenv / poetry
Frontend
- Node.js 18+
- npm o yarn
Crear un archivo .env en el directorio backend/ (o usar variables de entorno del sistema):
# Django
DJANGO_SECRET_KEY=tu_clave_secreta
DJANGO_DEBUG=True
DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1
# Base de datos PostgreSQL
DB_NAME=estudiapro_db
DB_USER=postgres
DB_PASSWORD=postgres_password
DB_HOST=localhost
DB_PORT=5432
# CORS / frontend
FRONTEND_URL=http://localhost:5173Configurar settings.py para leer estas variables (por ejemplo con python-dotenv o os.environ).
Crear .env en frontend/:
VITE_API_BASE_URL=http://localhost:8000/apio equivalente según el empaquetador usado.
git clone https://github.com/XxCarlosOjeda12/Estudia-Pro.git
cd Estudia-Procd backend
# Crear y activar entorno virtual
python -m venv venv
source venv/bin/activate # Linux / macOS
# .\venv\Scripts\activate # Windows
# Instalar dependencias
pip install -r requirements.txt
# Aplicar migraciones
python manage.py migrate
# Crear superusuario (opcional, para admin)
python manage.py createsuperuser
# Ejecutar servidor de desarrollo
python manage.py runserver 8000El backend quedará disponible en: http://localhost:8000/
En otra terminal:
cd frontend
# Instalar dependencias
npm install # o yarn
# Ejecutar servidor de desarrollo
npm run dev # o yarn devEl frontend quedará disponible en (ejemplo con Vite): http://localhost:5173/
La lista detallada de endpoints puede documentarse con Swagger / Redoc / Postman.
Algunos grupos de endpoints esperados:
auth/– registro, login, refresh de tokens, gestión de perfil.users/– gestión de usuarios y roles.courses/– materias, temas, contenidos.questions/– banco de preguntas.exams/– creación y resolución de exámenes, simuladores.progress/– resultados, estadísticas y métricas.marketplace/– recursos de la comunidad (materiales, guías, etc.).tutoring/– gestión de tutorías SOS.forum/– hilos, respuestas, reacciones.
Pruebas unitarias/integración con pytest o el framework de pruebas de Django.
cd backend
pytest
# o
python manage.py testPruebas unitarias de componentes con Jest/Testing Library (según configuración).
cd frontend
npm testPython
- Formateo con
black/isort - Lint con
flake8oruff
JavaScript/TypeScript
eslintprettier
Ejemplos:
# Backend
black .
flake8 .
# Frontend
npm run lint
npm run formatSe recomienda configurar hooks de pre-commit para asegurar el estilo antes de cada commit.
- Configurar variables de entorno con
DJANGO_DEBUG=FalseyDJANGO_ALLOWED_HOSTSapropiados. - Aplicar migraciones en el entorno de producción:
python manage.py migrate
- Recopilar archivos estáticos:
python manage.py collectstatic
- Ejecutar servidor de aplicación (ej. Gunicorn) detrás de Nginx o usar un PaaS (Railway, Render, etc.).
- Configurar
VITE_API_BASE_URL(o equivalente) apuntando al backend en producción. - Generar build de producción:
npm run build
- Servir los archivos estáticos generados (
dist/) en:- Vercel / Netlify, o
- como static files detrás de Nginx u otro servidor web.
- Crear la base de datos y el usuario con los permisos adecuados.
- Configurar backups automáticos.
- Restringir el acceso por IP / VPC según el proveedor.
- Rama principal:
main(código estable). - Rama de desarrollo:
develop(opcional). - Ramas de trabajo por funcionalidad:
# Nueva funcionalidad git checkout -b feature/nombre-funcionalidad # Corrección de bug git checkout -b bugfix/nombre-bug
- Desarrollar la funcionalidad.
- Asegurarse de que las pruebas pasan.
- Crear Pull Request hacia
developomain. - Revisar código (code review) antes de hacer merge.
- Hacer fork del repositorio.
- Crear rama desde
developomain:git checkout -b feature/mi-aporte
- Implementar cambios + pruebas.
- Asegurarse de que el linter y las pruebas pasan.
- Crear Pull Request describiendo claramente:
- Cambios realizados.
- Cómo probarlos.
- Issues relacionados (si los hay).
Nota: Este README está centrado exclusivamente en la parte técnica (stack, instalación, configuración, despliegue y flujo de trabajo).