{"id":19376051,"url":"https://github.com/daviddevgt/goals-tracker","last_synced_at":"2025-06-22T06:33:37.176Z","repository":{"id":234977192,"uuid":"789846822","full_name":"DavidDevGt/goals-tracker","owner":"DavidDevGt","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-26T14:38:03.000Z","size":446,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-24T15:51:59.383Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DavidDevGt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-21T18:00:29.000Z","updated_at":"2024-05-26T14:38:07.000Z","dependencies_parsed_at":"2024-11-10T08:42:54.827Z","dependency_job_id":null,"html_url":"https://github.com/DavidDevGt/goals-tracker","commit_stats":null,"previous_names":["daviddevgt/goals-tracker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/DavidDevGt/goals-tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidDevGt%2Fgoals-tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidDevGt%2Fgoals-tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidDevGt%2Fgoals-tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidDevGt%2Fgoals-tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DavidDevGt","download_url":"https://codeload.github.com/DavidDevGt/goals-tracker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DavidDevGt%2Fgoals-tracker/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261248534,"owners_count":23130413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T08:42:46.790Z","updated_at":"2025-06-22T06:33:32.148Z","avatar_url":"https://github.com/DavidDevGt.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Goals Tracker\n\nGoals Tracker es una aplicación web para gestionar tareas y objetivos, desarrollada con React para el frontend y Node.js con Express para el backend. Esta aplicación permite a los usuarios añadir, eliminar y gestionar sus tareas y objetivos de manera eficiente.\n\n## Tabla de Contenidos\n\n- [Características](#características)\n- [Tecnologías](#tecnologías)\n- [Estructura del Proyecto](#estructura-del-proyecto)\n- [Instalación](#instalación)\n- [Uso](#uso)\n- [Orquestación con Docker](#orquestación-con-docker)\n- [Contribuciones](#contribuciones)\n- [Licencia](#licencia)\n\n## Características\n\n- Crear, editar y eliminar objetivos o metas\n- Crear, editar y eliminar tareas\n- Gestión de tareas y objetivos con una interfaz amigable\n- Middleware para autorización por clave de API en el backend\n\n## Tecnologías\n\n### Frontend\n\n- React\n- Redux\n- Bootstrap\n- React-Bootstrap\n- React-Datepicker\n\n### Backend\n\n- Node.js\n- Express\n- Winston (para logging)\n- Celebrate (para validaciones)\n\n## Estructura del Proyecto\n\n```plaintext\n.\n├── client\n│   ├── README.md\n│   ├── package-lock.json\n│   ├── package.json\n│   ├── public\n│   │   ├── favicon.ico\n│   │   ├── index.html\n│   │   ├── logo192.png\n│   │   ├── logo512.png\n│   │   ├── manifest.json\n│   │   └── robots.txt\n│   └── src\n│       ├── App.css\n│       ├── App.js\n│       ├── App.test.js\n│       ├── app\n│       │   └── store.js\n│       ├── components\n│       │   ├── Goal.js\n│       │   ├── GoalForm.js\n│       │   ├── GoalList.js\n│       │   ├── Navbar.js\n│       │   ├── Task.js\n│       │   ├── TaskForm.js\n│       │   └── TaskList.js\n│       ├── features\n│       │   ├── goals\n│       │   │   └── goalsSlice.js\n│       │   └── tasks\n│       │       └── tasksSlice.js\n│       ├── index.css\n│       ├── index.js\n│       ├── logo.svg\n│       ├── reportWebVitals.js\n│       ├── setupTests.js\n│       └── styles\n│           ├── Goal.css\n│           └── GoalForm.css\n└── server\n    ├── combined.log\n    ├── error.log\n    ├── index.js\n    ├── package-lock.json\n    ├── package.json\n    └── src\n        ├── config\n        │   └── logger.js\n        ├── controllers\n        │   ├── goalController.js\n        │   └── taskController.js\n        ├── index.js\n        ├── middleware\n        │   └── apiKey.js\n        ├── models\n        │   ├── goalModel.js\n        │   └── taskModel.js\n        ├── routes\n        │   ├── goalRoutes.js\n        │   └── taskRoutes.js\n        ├── services\n        │   ├── goalService.js\n        │   └── taskService.js\n        └── utils\n            └── errorHandler.js\n```\n\n## Instalación\n\n### Requisitos Previos\n\n- Node.js y npm instalados en tu sistema\n\n### Pasos\n\n1. Clona el repositorio:\n   ```bash\n   git clone https://github.com/tu-usuario/goals-tracker.git\n   cd goals-tracker\n   ```\n\n2. Instala las dependencias para el frontend:\n   ```bash\n   cd client\n   npm install\n   ```\n\n3. Instala las dependencias para el backend:\n   ```bash\n   cd ../server\n   npm install\n   ```\n\n## Uso\n\n### Iniciar el Frontend\n\n1. Navega al directorio del cliente:\n   ```bash\n   cd client\n   ```\n\n2. Inicia la aplicación de React:\n   ```bash\n   npm start\n   ```\n\n### Iniciar el Backend\n\n1. Navega al directorio del servidor:\n   ```bash\n   cd ../server\n   ```\n\n2. Inicia el servidor de Node.js:\n   ```bash\n   npm start\n   ```\n\n### Endpoints del Backend\n\n- `/api/goals`: Endpoints para la gestión de objetivos\n- `/api/tasks`: Endpoints para la gestión de tareas\n\n## Orquestación con Docker\n\n### Usando Docker Compose\n\nPara construir y ejecutar la aplicación completa (servidor Node.js y base de datos MySQL) utilizando Docker Compose, sigue estos pasos:\n\n1. Asegúrate de estar en el directorio raíz del proyecto `goals-tracker`.\n\n2. Construye y levanta los contenedores:\n   ```bash\n   docker-compose up --build\n   ```\n\nEsto construirá las imágenes Docker y levantará los contenedores para el servidor y la base de datos. La aplicación estará disponible en `http://localhost:3000`.\n\n### Archivos Docker\n\n#### Dockerfile para el servidor Node.js (`server/Dockerfile`)\n\n```Dockerfile\n# Fase 1: Construcción\nFROM node:20 as builder\n\n# Establecer el directorio de trabajo\nWORKDIR /app\n\n# Copiar los archivos de proyecto\nCOPY package*.json ./\n\n# Instalar dependencias\nRUN npm install\n\n# Copiar el resto del código fuente\nCOPY . .\n\n# Exponer el puerto\nEXPOSE 3000\n\n# Comando para iniciar la aplicación\nCMD [\"node\", \"src/index.js\"]\n\n```\n\n#### Dockerfile para la base de datos MySQL (`db/Dockerfile`)\n\n```Dockerfile\nFROM mysql:latest\n\n# Copiar el script de inicialización\nCOPY ../server/src/config/db.sql /docker-entrypoint-initdb.d/\n\n# Exponer el puerto\nEXPOSE 3306\n```\n\n#### Archivo `db.sql` (dentro del directorio `db`)\n\n```sql\nCREATE DATABASE IF NOT EXISTS goal_tracker_db;\nUSE goal_tracker_db;\n\nCREATE TABLE goals (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    goal VARCHAR(255) NOT NULL,\n    deadline DATE NOT NULL\n);\n\nCREATE TABLE tasks (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    task VARCHAR(255) NOT NULL,\n    deadline DATE NOT NULL\n);\n```\n\n#### Archivo `docker-compose.yml`\n\n```yaml\nversion: '3.8'\n\nservices:\n  db:\n    build: \n      context: ./db\n    environment:\n      MYSQL_ROOT_PASSWORD: rootpassword\n      MYSQL_DATABASE: goal_tracker_db\n    ports:\n      - \"3306:3306\"\n\n  server:\n    build: \n      context: ./server\n    environment:\n      DB_HOST: db\n      DB_USER: root\n      DB_PASSWORD: rootpassword\n      DB_NAME: goal_tracker_db\n    ports:\n      - \"3000:3000\"\n    depends_on:\n      - db\n```\n\n### Forma Manual\n\n#### Frontend\n\n1. Instala las dependencias:\n   ```bash\n   cd client\n   npm install\n   ```\n\n2. Inicia la aplicación de React:\n   ```bash\n   npm start\n   ```\n\n#### Backend\n\n1. Instala las dependencias:\n   ```bash\n   cd server\n   npm install\n   ```\n\n2. Configura la base de datos MySQL y ejecuta el script `db.sql` para crear las tablas necesarias.\n\n3. Inicia el servidor de Node.js:\n   ```bash\n   npm start\n   ```\n\n## Contribuciones\n\nLas contribuciones son bienvenidas. Por favor, abre un issue o un pull request para contribuir.\n\n## Licencia\n\nEste proyecto está licenciado bajo la licencia propia de DavidDevGt.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaviddevgt%2Fgoals-tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaviddevgt%2Fgoals-tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaviddevgt%2Fgoals-tracker/lists"}