{"id":26951531,"url":"https://github.com/coslynx/fittrack-goal-tracker","last_synced_at":"2026-04-07T08:32:08.341Z","repository":{"id":285687780,"uuid":"958997856","full_name":"coslynx/fittrack-goal-tracker","owner":"coslynx","description":"Web app to set goals track fitness progress share milestones... Created at https://coslynx.com","archived":false,"fork":false,"pushed_at":"2025-04-02T05:51:54.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-02T06:28:23.548Z","etag":null,"topics":["achievements","backend","code-generation","coslynx","developer-tools","devops","expressjs","fitness","fitness-tracker","frontend","goal-setting","health","javascript","machine-learning","mvp","nodejs","progress-tracking","react","social-sharing","web-application"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coslynx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-04-02T05:24:15.000Z","updated_at":"2025-04-02T05:51:57.000Z","dependencies_parsed_at":"2025-04-02T06:38:38.836Z","dependency_job_id":null,"html_url":"https://github.com/coslynx/fittrack-goal-tracker","commit_stats":null,"previous_names":["coslynx/fittrack-goal-tracker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/coslynx/fittrack-goal-tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coslynx%2Ffittrack-goal-tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coslynx%2Ffittrack-goal-tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coslynx%2Ffittrack-goal-tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coslynx%2Ffittrack-goal-tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coslynx","download_url":"https://codeload.github.com/coslynx/fittrack-goal-tracker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coslynx%2Ffittrack-goal-tracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31506562,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["achievements","backend","code-generation","coslynx","developer-tools","devops","expressjs","fitness","fitness-tracker","frontend","goal-setting","health","javascript","machine-learning","mvp","nodejs","progress-tracking","react","social-sharing","web-application"],"created_at":"2025-04-03T00:16:23.166Z","updated_at":"2026-04-07T08:32:08.321Z","avatar_url":"https://github.com/coslynx.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv class=\"hero-icon\" align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/PKief/vscode-material-icon-theme/ec559a9f6bfd399b82bb44393651661b08aaf7ba/icons/folder-markdown-open.svg\" width=\"100\" /\u003e\n\u003c/div\u003e\n\n\u003ch1 align=\"center\"\u003e\nfittrack-goal-tracker\n\u003c/h1\u003e\n\u003ch4 align=\"center\"\u003eA web application MVP enabling fitness enthusiasts to track goals, monitor progress, and share achievements online.\u003c/h4\u003e\n\u003ch4 align=\"center\"\u003eDeveloped with the software and tools below.\u003c/h4\u003e\n\u003cdiv class=\"badges\" align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Frontend-React%2019%20+%20Vite-blue\" alt=\"Frontend: React 19 + Vite\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/UI%20Framework-Chakra%20UI%203-red\" alt=\"UI Framework: Chakra UI 3\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Backend-Node.js%2020%20+%20Express%204-blue\" alt=\"Backend: Node.js 20 + Express 4\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Database-MongoDB%20+%20Mongoose%208-green\" alt=\"Database: MongoDB + Mongoose 8\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Authentication-JWT%20+%20bcryptjs-orange\" alt=\"Authentication: JWT + bcryptjs\"\u003e\n\u003c/div\u003e\n\u003cdiv class=\"badges\" align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/last-commit/coslynx/fittrack-goal-tracker?style=flat-square\u0026color=5D6D7E\" alt=\"git-last-commit\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/commit-activity/m/coslynx/fittrack-goal-tracker?style=flat-square\u0026color=5D6D7E\" alt=\"GitHub commit activity\" /\u003e\n  \u003cimg src=\"https://img.shields.io/github/languages/top/coslynx/fittrack-goal-tracker?style=flat-square\u0026color=5D6D7E\" alt=\"GitHub top language\" /\u003e\n\u003c/div\u003e\n\n## 📑 Table of Contents\n- [📍 Overview](#-overview)\n- [📦 Features](#-features)\n- [📂 Structure](#-structure)\n- [💻 Installation](#-installation)\n- [🏗️ Usage](#️-usage)\n- [🌐 Hosting](#-hosting)\n- [📜 API Documentation](#-api-documentation)\n- [📄 License](#-license--attribution)\n- [👏 Authors](#-authors)\n\n## 📍 Overview\n`fittrack-goal-tracker` is a Minimum Viable Product (MVP) web application designed for fitness enthusiasts. It provides a simple and intuitive interface for users to define their fitness goals (e.g., run 5k, lift 100kg), log progress entries against these goals, and visualize their journey. Built with a modern tech stack featuring React (with Vite) for the frontend and Node.js (with Express and Mongoose) for the backend, this application offers secure user authentication using JWT and robust data management with MongoDB. The core focus is on providing the essential tools for goal tracking and progress monitoring in an easy-to-use format.\n\n## 📦 Features\n|    | Feature            | Description                                                                                                                                                              |\n|----|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| ⚙️ | **Architecture**   | Monorepo structure using npm workspaces, separating `frontend` (React SPA via Vite) and `backend` (Node.js/Express REST API). API-first design with clear separation of concerns (MVC-like: Routes -\u003e Controllers -\u003e Models). |\n| 📄 | **Documentation**  | This README provides an overview, setup guide, usage instructions, API endpoints, and deployment considerations for the MVP. Code includes JSDoc comments for key functions and models. |\n| 🔗 | **Dependencies**   | **Frontend**: React 19, React Router DOM 6, Axios, Chakra UI 3. **Backend**: Express 4, Mongoose 8, JWT, bcryptjs, dotenv, CORS. Uses Node.js \u003e= 20.14.0.                     |\n| 🧩 | **Modularity**     | Backend structured into `routes`, `controllers`, `models`, and `middleware`. Frontend structured into `pages`, `components`, `services`, and `context`. Clear separation facilitates maintenance. |\n| 🧪 | **Testing**        | Placeholder test scripts are included in `package.json`. Actual unit/integration tests are not part of this MVP but the structure allows for their future addition.       |\n| ⚡️  | **Performance**    | Frontend built with Vite for optimized bundling. Backend uses Mongoose for MongoDB interaction with basic indexing on key fields (`userId`, `goalId`, `email`). Standard REST API performance considerations. |\n| 🔐 | **Security**       | Secure password hashing using `bcryptjs`. JWT for stateless authentication. Sensitive configurations managed via `.env` file (MUST be kept secure and out of Git). CORS enabled on backend. Basic input validation on frontend forms and backend models/controllers. Data ownership enforced in controllers. |\n| 🔀 | **Version Control**| Managed using Git. Assumes hosting on platforms like GitHub. Last commit and activity badges track repository status.                                                  |\n| 🔌 | **Integrations**   | Frontend SPA communicates with the backend REST API via Axios. Backend interacts with a MongoDB database (local or cloud like Atlas) via Mongoose.                      |\n| 📶 | **Scalability**    | The stateless nature of the JWT-based API and the use of MongoDB allow for standard scaling patterns (horizontal scaling of backend instances, MongoDB replica sets/sharding). MVP is focused on core functionality, not high-scale optimization. |\n\n## 📂 Structure\n```text\n.\n├── .env                  # Environment variables (secrets, config) - NOT COMMITTED\n├── README.md             # This file\n├── backend/              # Node.js Express API\n│   ├── controllers/      # Request handling logic\n│   │   ├── auth.controller.js\n│   │   └── goal.controller.js\n│   ├── middleware/       # Custom middleware (e.g., authentication)\n│   │   └── auth.middleware.js\n│   ├── models/           # Mongoose schemas and models\n│   │   ├── Goal.model.js\n│   │   ├── Progress.model.js\n│   │   └── User.model.js\n│   ├── routes/           # API route definitions\n│   │   └── api.routes.js\n│   ├── package.json      # Backend dependencies and scripts\n│   └── server.js         # Express server entry point\n├── frontend/             # React Vite SPA\n│   ├── public/           # Static assets (served directly)\n│   ├── src/              # Frontend source code\n│   │   ├── components/   # Reusable UI components\n│   │   │   ├── AuthForm.jsx\n│   │   │   ├── GoalForm.jsx\n│   │   │   ├── GoalList.jsx\n│   │   │   └── ProgressLogForm.jsx\n│   │   ├── context/      # React context providers (e.g., Auth)\n│   │   │   └── AuthContext.jsx\n│   │   ├── pages/        # Page-level components (routed views)\n│   │   │   ├── AuthPage.jsx\n│   │   │   ├── DashboardPage.jsx\n│   │   │   └── GoalDetailPage.jsx\n│   │   ├── services/     # API interaction logic\n│   │   │   └── apiClient.js\n│   │   ├── App.jsx       # Main application component with routing\n│   │   └── main.jsx      # React application entry point\n│   ├── .env              # Frontend environment variables (VITE_ prefixed)\n│   ├── index.html        # HTML template for SPA\n│   ├── package.json      # Frontend dependencies and scripts\n│   └── vite.config.js    # Vite build configuration\n├── package.json          # Root project configuration (workspaces, scripts)\n└── commands.json         # (Generated, contains command references)\n└── startup.sh            # (Generated, example startup script)\n```\n\n## 💻 Installation\n \u003e [!WARNING]\n \u003e ### 🔧 Prerequisites\n \u003e - **Node.js**: Version `\u003e=20.14.0` (check with `node -v`)\n \u003e - **npm**: Version `\u003e=10.x.x` (usually comes with Node.js, check with `npm -v`)\n \u003e - **MongoDB**: A running MongoDB instance. You can use:\n \u003e    - A local installation ([MongoDB Community Server](https://www.mongodb.com/try/download/community))\n \u003e    - Docker ([Official MongoDB Image](https://hub.docker.com/_/mongo))\n \u003e    - A cloud service like [MongoDB Atlas](https://www.mongodb.com/cloud/atlas) (offers a generous free tier suitable for development/MVP).\n\n ### 🚀 Setup Instructions\n 1.  **Clone the repository:**\n     ```bash\n     git clone https://github.com/coslynx/fittrack-goal-tracker.git\n     cd fittrack-goal-tracker\n     ```\n 2.  **Install dependencies for all workspaces:**\n     (This command installs dependencies for the root, backend, and frontend)\n     ```bash\n     npm run install:all\n     # Or simply: npm install\n     ```\n 3.  **Configure Environment Variables:**\n     *   **Backend:** Copy the example environment file in the *root* directory.\n         ```bash\n         cp .env.example .env\n         ```\n         Edit the `.env` file in the root directory and **replace placeholders** with your actual values:\n         *   `PORT`: The port for the backend server (e.g., `5001`).\n         *   `MONGODB_URI`: Your full MongoDB connection string.\n             *   *Atlas Example:* `mongodb+srv://\u003cusername\u003e:\u003cpassword\u003e@\u003ccluster-url\u003e/fitnessAppMvp?retryWrites=true\u0026w=majority`\n             *   *Local Example:* `mongodb://localhost:27017/fitnessAppMvp`\n         *   `JWT_SECRET`: A **strong, random secret** string for signing tokens. **Generate a secure one!**\n         *   `JWT_EXPIRES_IN`: Token expiration duration (e.g., `1d`, `7d`, `1h`).\n     *   **Frontend:** The frontend reads its API URL from the *root* `.env` file during the build process. Ensure `VITE_API_BASE_URL` points to your running backend API (including `/api`).\n         *   *Development Example:* `VITE_API_BASE_URL=http://localhost:5001/api` (Ensure `PORT` matches)\n\n## 🏗️ Usage\n### 🏃‍♂️ Running the MVP (Development Mode)\nThis command starts both the backend and frontend development servers concurrently with hot-reloading.\n```bash\nnpm run dev\n```\n*   **Backend API** will typically run on `http://localhost:5001` (or the `PORT` specified in `.env`).\n*   **Frontend UI** will typically run on `http://localhost:5173` (Vite's default, check console output).\n\n\u003e [!TIP]\n\u003e ### ⚙️ Configuration\n\u003e - All backend and frontend build configurations are managed via the `.env` file in the project root.\n\u003e - Ensure the `MONGODB_URI` is correct and the database server is accessible.\n\u003e - The `JWT_SECRET` is critical for security; keep it secret and make it strong.\n\u003e - `VITE_API_BASE_URL` must correctly point to the backend API endpoint (`/api` path included) for the frontend to function.\n\n### 📚 Examples (User Flow)\n1.  **Access the Frontend:** Open your browser to the frontend URL (e.g., `http://localhost:5173`).\n2.  **Register:** Navigate to the authentication page, select 'Register', enter a valid email and a password (min 8 characters), and submit.\n3.  **Login:** After registration (or if you have an account), use the 'Login' form with your credentials.\n4.  **Dashboard:** Upon successful login, you'll be redirected to the dashboard.\n5.  **Create Goal:** Click the \"+ Create New Goal\" button. A modal will appear. Enter a Title (required) and optional Description, then click \"Save Goal\".\n6.  **View Goal Details:** Click on a goal card on the dashboard. You'll navigate to the goal detail page.\n7.  **Log Progress:** On the goal detail page, use the \"Log New Progress\" form. Enter the Date, a Metric Value (required number), and optional Notes. Click \"Log Progress\".\n8.  **View Progress:** The \"Progress History\" section on the detail page will update with your new entry, sorted by date.\n\n## 🌐 Hosting\n### 🚀 Deployment Instructions (General Guidance)\nThis MVP requires deploying two components: the Node.js backend API and the static React frontend build output. Common approaches include:\n\n**Option 1: Platform-as-a-Service (e.g., Render, Heroku)**\n1.  **Backend:** Deploy the `backend` directory as a Node.js service.\n    *   Set the Build Command (usually `npm install --production --prefix backend` or handled by platform).\n    *   Set the Start Command: `npm start --prefix backend`.\n    *   Configure all required environment variables (`PORT`, `MONGODB_URI`, `JWT_SECRET`, `JWT_EXPIRES_IN`) in the platform's dashboard.\n2.  **Frontend:** Deploy the `frontend` directory as a Static Site.\n    *   Set the Build Command: `npm run build --workspace=frontend`.\n    *   Set the Publish Directory: `frontend/dist`.\n    *   Configure the `VITE_API_BASE_URL` environment variable during the build process to point to your *deployed* backend API URL.\n\n**Option 2: Docker \u0026 Container Orchestration**\n1.  Create separate `Dockerfile`s for the `backend` and `frontend` (using a multi-stage build for the frontend to serve static files via a web server like Nginx).\n2.  Build and push images to a container registry.\n3.  Deploy containers using Docker Compose, Kubernetes, etc., ensuring proper networking and environment variable injection.\n\n**Build Steps:**\n*   Frontend: `npm run build --workspace=frontend` (Outputs to `frontend/dist`)\n*   Backend: Ensure production dependencies are installed (`npm install --production --prefix backend` or handled by deployment platform).\n\n### 🔑 Environment Variables (Production)\nEnsure these variables are set securely in your hosting environment:\n*   `NODE_ENV`: Set to `production`.\n*   `PORT`: Port for the backend server (often provided by the platform).\n*   `MONGODB_URI`: Connection string for your production MongoDB database.\n*   `JWT_SECRET`: **A strong, unique secret specifically for production.**\n*   `JWT_EXPIRES_IN`: Production token lifetime (e.g., `1d`).\n*   `VITE_API_BASE_URL`: **Absolute URL** of your deployed backend API (e.g., `https://your-api.onrender.com/api`). This is a *build-time* variable for the frontend.\n\n## 📜 API Documentation\nThe backend exposes a RESTful API consumed by the frontend.\n\n### 🔍 Endpoints\nBase Path: `/api` (as configured in `backend/server.js` and `VITE_API_BASE_URL`)\n\n*   **Authentication:**\n    *   `POST /auth/register`\n        *   Description: Register a new user.\n        *   Body: `{ \"email\": \"user@example.com\", \"password\": \"yourpassword\" }`\n        *   Response (Success 201): `{ \"token\": \"jwt.token.string\" }`\n        *   Response (Error 400/409): `{ \"message\": \"Error details...\" }`\n    *   `POST /auth/login`\n        *   Description: Log in an existing user.\n        *   Body: `{ \"email\": \"user@example.com\", \"password\": \"yourpassword\" }`\n        *   Response (Success 200): `{ \"token\": \"jwt.token.string\" }`\n        *   Response (Error 400/401): `{ \"message\": \"Error details...\" }`\n\n*   **Goals (Protected Routes):**\n    *   `POST /goals`\n        *   Description: Create a new goal for the authenticated user.\n        *   Headers: `Authorization: Bearer \u003ctoken\u003e`\n        *   Body: `{ \"title\": \"Run 5k\", \"description\": \"Train 3 times a week\", \"status\": \"active\"?, \"targetDate\": \"YYYY-MM-DD\"? }`\n        *   Response (Success 201): `{ \"goal\": { ...new goal object... } }`\n    *   `GET /goals`\n        *   Description: Get all goals for the authenticated user.\n        *   Headers: `Authorization: Bearer \u003ctoken\u003e`\n        *   Response (Success 200): `{ \"goals\": [ { ...goal object... }, ... ] }`\n    *   `GET /goals/:id`\n        *   Description: Get a specific goal by ID belonging to the user.\n        *   Headers: `Authorization: Bearer \u003ctoken\u003e`\n        *   Response (Success 200): `{ \"goal\": { ...goal object... } }`\n        *   Response (Error 404): `{ \"message\": \"Goal not found.\" }`\n    *   `PUT /goals/:id`\n        *   Description: Update a specific goal by ID belonging to the user.\n        *   Headers: `Authorization: Bearer \u003ctoken\u003e`\n        *   Body: `{ \"title\": \"Updated Title\"?, \"description\": \"Updated Desc\"?, \"status\": \"completed\"?, \"targetDate\": \"YYYY-MM-DD\"? }`\n        *   Response (Success 200): `{ \"goal\": { ...updated goal object... } }`\n    *   `DELETE /goals/:id`\n        *   Description: Delete a specific goal by ID (and its progress logs) belonging to the user.\n        *   Headers: `Authorization: Bearer \u003ctoken\u003e`\n        *   Response (Success 204): No content.\n        *   Response (Error 404): `{ \"message\": \"Goal not found.\" }`\n\n*   **Progress (Protected Routes):**\n    *   `POST /goals/:goalId/progress`\n        *   Description: Log a progress entry for a specific goal.\n        *   Headers: `Authorization: Bearer \u003ctoken\u003e`\n        *   Body: `{ \"date\": \"YYYY-MM-DD\"?, \"notes\": \"Did well\"?, \"value\": 5? }` (`value` corresponds to the 'Metric Value' field)\n        *   Response (Success 201): `{ \"progress\": { ...new progress object... } }`\n        *   Response (Error 404): `{ \"message\": \"Target goal not found.\" }`\n    *   `GET /goals/:goalId/progress`\n        *   Description: Get all progress entries for a specific goal.\n        *   Headers: `Authorization: Bearer \u003ctoken\u003e`\n        *   Response (Success 200): `{ \"progressLogs\": [ { ...progress object... }, ... ] }`\n        *   Response (Error 404): `{ \"message\": \"Target goal not found.\" }`\n\n### 🔒 Authentication\n*   All routes under `/api/goals` and `/api/goals/:goalId/progress` require authentication.\n*   Obtain a JWT by calling `/api/auth/register` or `/api/auth/login`.\n*   Include the obtained token in the `Authorization` header for all protected requests:\n    ```\n    Authorization: Bearer \u003cYOUR_JWT_TOKEN\u003e\n    ```\n*   Tokens expire based on the `JWT_EXPIRES_IN` environment variable. The frontend currently requires re-login upon expiry.\n\n### 📝 Examples (API Payloads)\n\n**Create Goal Payload (`POST /api/goals`):**\n```json\n{\n  \"title\": \"Complete Morning Workout Routine\",\n  \"description\": \"Focus on consistency: 15min cardio, 15min strength.\",\n  \"status\": \"active\"\n}\n```\n\n**Log Progress Payload (`POST /api/goals/\u003cgoalId\u003e/progress`):**\n```json\n{\n  \"date\": \"2024-07-21\",\n  \"notes\": \"Felt strong today, increased weight.\",\n  \"value\": 7  // Represents achieving the routine 7 times this week, or weight lifted, etc. (context depends on goal)\n}\n```\n\n\n\u003e [!NOTE]\n\u003e ## 📜 License \u0026 Attribution\n\u003e\n\u003e ### 📄 License\n\u003e This Minimum Viable Product (MVP) is licensed under the [GNU AGPLv3](https://choosealicense.com/licenses/agpl-3.0/) license.\n\u003e\n\u003e ### 🤖 AI-Generated MVP\n\u003e This MVP was entirely generated using artificial intelligence through [CosLynx.com](https://coslynx.com).\n\u003e\n\u003e No human was directly involved in the coding process of the repository: fittrack-goal-tracker\n\u003e\n\u003e ### 📞 Contact\n\u003e For any questions or concerns regarding this AI-generated MVP, please contact CosLynx at:\n\u003e - Website: [CosLynx.com](https://coslynx.com)\n\u003e - Twitter: [@CosLynxAI](https://x.com/CosLynxAI)\n\n\u003cp align=\"center\"\u003e\n  \u003ch1 align=\"center\"\u003e🌐 CosLynx.com\u003c/h1\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eCreate Your Custom MVP in Minutes With CosLynxAI!\u003c/em\u003e\n\u003c/p\u003e\n\u003cdiv class=\"badges\" align=\"center\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Developers-Drix10,_Kais_Radwan-red\" alt=\"\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Website-CosLynx.com-blue\" alt=\"\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Backed_by-Google,_Microsoft_\u0026_Amazon_for_Startups-red\" alt=\"\"\u003e\n\u003cimg src=\"https://img.shields.io/badge/Finalist-Backdrop_Build_v4,_v6-black\" alt=\"\"\u003e\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoslynx%2Ffittrack-goal-tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoslynx%2Ffittrack-goal-tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoslynx%2Ffittrack-goal-tracker/lists"}