Una aplicación web desarrollada con React + Vite, pensada para ayudar a estudiantes a organizar sus materias, tareas y calcular sus notas finales. El sistema permitirá:
- Gestionar pendientes académicos.
- Calcular cuánto necesita un estudiante para aprobar una materia.
- Link del diseño propuesto en Figma: https://www.figma.com/design/HIw62heApnoQE7CuySLIOe/Estructuras?node-id=0-1&t=FzZUaOer2Hgkrmmt-1
- Link a el despliegue del aplicativo web: https://utracktask.netlify.app
- 🟢 React con Vite (mejor performance).
- 🟢 React Router (navegación entre páginas).
- 🟢 Context API o Redux (según necesidad de estado global).
- 🟢 Hooks (
useState,useEffect,useContext,useReducer, etc.).
- 🔸 Firebase Firestore (NoSQL y integración sencilla con React).
- 🔹 WebSockets (implementado con realtime Database de firebase).
- 🔹 TailwindCSS (para diseño responsivo y moderno).
- ✅ Props & Validación de Props.
- ✅ Hooks (useState, useEffect, useContext, useReducer).
- ✅ Renderizado condicional.
- ✅ React Router.
- ✅ Context API.
- ✅ Manejo de página 404.
- ✅ Listas enlazadas (simples, dobles, circulares).
- ✅ Stacks (LIFO).
- ✅ Queues (FIFO).
- ✅ Árboles binarios.
- ✅ Redux para manejo de estado global.
- RF-01.1 Agregar materias con nombre y código.
- RF-01.2 Definir número de cortes/evaluaciones.
- RF-01.3 Editar o eliminar materias.
- RF-02.1 Agregar notas por materia.
- RF-02.2 Asignar porcentaje a cada nota.
- RF-02.3 Editar o eliminar notas.
- RF-02.4 Cálculo automático de nota final.
- RF-02.5 Meta de nota: calcular cuánto necesita para aprobar.
- RF-03.1 Agregar tareas con título, descripción, fecha y prioridad.
- RF-03.2 Editar o eliminar tareas.
- RF-03.3 Marcar tareas como completadas.
- RF-03.4 Ordenar tareas por prioridad y fecha.
- Uso de Props y validaciones.
- Hooks para manejar estados.
- Context API para compartir estados.
- Comunicación padre-hijo.
- Renderizado condicional.
- Uso de React Router.
- Página 404 personalizada.
- Manejo de URL Params y Query Params.
- Redirecciones automáticas.
- Rutas públicas y privadas.
- Login con Google (Firebase).
- Persistencia de datos por usuario.
- Linked Lists para tareas.
- Double Linked Lists para navegación de notas.
- Circular Linked Lists para tareas recurrentes.
- Compartir tareas/materias en tiempo real.
- Recordatorios y notificaciones.
- Carga rápida y sin bloqueos.
- Uso eficiente de recursos.
- Compatible con PC, tablets y móviles.
- Paleta accesible:
#284dcb,#ffffff,#585858.
- Código modular y reutilizable.
- Protección de datos de usuarios.
- Rutas privadas con autenticación (si aplica).
- Datos persistentes en Firebase (materias, notas, tareas).
- Inicio de sesión con Google (Firebase Auth).
- Control de rutas públicas y privadas.
- Cierre de sesión.
- Resumen general de materias y tareas.
- Accesos rápidos a funciones clave.
- Agregar, editar y eliminar materias.
- Definir porcentajes por corte.
- Agregar, marcar y eliminar tareas.
- Organización por fecha.
- Simulador: ¿Cuánto necesito para aprobar?
- Visualización de notas por materia.
- Chat y colaboración entre estudiantes.
- Configurar Firebase (Auth + Firestore).
- Configurar TailwindCSS y React Router.
- Generar vistas:
- Dashboard
- Página de Materias
- Página de Tareas
- Página de Cálculo de Notas
- Conectar Firebase para autenticación.
- Conectar Firestore para persistencia de datos.
users Collection:
| Field | Type | Description |
|---|---|---|
uid |
String | Firebase Auth user ID (primary key) |
displayName |
String | User's full name |
email |
String | User's email address |
photoURL |
String | URL to user's profile picture |
createdAt |
Timestamp | When the user account was created |
lastLogin |
Timestamp | When the user last logged in |
settings |
Map | User preferences (theme, notifications, etc.) |
role |
String | User role (e.g., "student") |
subjects Collection:
| Field | Type | Description |
|---|---|---|
id |
String | Unique identifier for the subject |
userId |
String | Reference to the user who owns this subject |
name |
String | Name of the subject (e.g., "Mathematics") |
professor |
String | Name of the professor |
schedule |
String | Class schedule (e.g., "Mon, Wed 10:00 AM") |
credits |
Number | Number of credits for the subject |
color |
String | Color code for UI display |
createdAt |
Timestamp | When the subject was created |
updatedAt |
Timestamp | When the subject was last updated |
gradeStructure |
Map | Breakdown of grade components |
gradeStructure.firstCut |
Number | Percentage for first cut (e.g., 30%) |
gradeStructure.secondCut |
Number | Percentage for second cut (e.g., 30%) |
gradeStructure.finalExam |
Number | Percentage for final exam (e.g., 40%) |
currentGrade |
Number | Current overall grade in the subject |
targetGrade |
Number | Target grade the student wants to achieve |
semester |
String | Current semester (e.g., "Spring 2025") |
isActive |
Boolean | Whether the subject is active or archived |
tasks Collection:
| Field | Type | Description |
|---|---|---|
id |
String | Unique identifier for the task |
userId |
String | Reference to the user who owns this task |
subjectId |
String | Reference to the related subject |
title |
String | Title of the task |
description |
String | Detailed description of the task |
dueDate |
Timestamp | When the task is due |
priority |
String | Priority level ("high", "medium", "low") |
completed |
Boolean | Whether the task is completed |
completedAt |
Timestamp | When the task was completed (null if not completed) |
createdAt |
Timestamp | When the task was created |
updatedAt |
Timestamp | When the task was last updated |
reminderDate |
Timestamp | When to send a reminder (optional) |
attachments |
Array | List of attachment URLs (optional) |
tags |
Array | List of tags for categorization |
estimatedTime |
Number | Estimated time to complete (in minutes) |
actualTime |
Number | Actual time spent (in minutes) |
grades Collection:
| Field | Type | Description |
|---|---|---|
id |
String | Unique identifier for the grade entry |
userId |
String | Reference to the user who owns this grade |
subjectId |
String | Reference to the related subject |
title |
String | Title of the assessment (e.g., "Midterm Exam") |
type |
String | Type of assessment (e.g., "exam", "quiz", "assignment") |
score |
Number | Points earned |
maxScore |
Number | Maximum possible points |
percentage |
Number | Calculated percentage (score/maxScore * 100) |
weight |
Number | Weight of this assessment in the overall grade |
date |
Timestamp | When the assessment took place |
notes |
String | Additional notes about the grade |
createdAt |
Timestamp | When the grade entry was created |
updatedAt |
Timestamp | When the grade entry was last updated |
cutPeriod |
String | Which cut period this grade belongs to ("first", "second", "final") |
contributionToFinal |
Number | Calculated contribution to final grade |