{"id":28443165,"url":"https://github.com/calku0/striveup","last_synced_at":"2026-04-13T22:32:08.288Z","repository":{"id":288292470,"uuid":"957477165","full_name":"calKU0/StriveUp","owner":"calKU0","description":"StriveUp is a cross-platform fitness tracking app built with Blazor Hybrid and .NET. It lets users track workouts, earn medals, connect with friends, and sync data from external providers like Strava and Fitbit. The backend is powered by ASP.NET Core, EF Core, Azure Functions, and hosted entirely on Azure. ","archived":false,"fork":false,"pushed_at":"2025-06-11T17:02:58.000Z","size":6846,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-11T19:03:50.166Z","etag":null,"topics":["activity-tracker","aspnet-core","azure","azure-functions","blazor","cloudinary","dotnet","ef-core","fitbit","fitness-tracker","garmin","google-fit","jwt-authentication","maui","strava","webapi"],"latest_commit_sha":null,"homepage":"https://striveup.kkurowski.com/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/calKU0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2025-03-30T13:26:31.000Z","updated_at":"2025-06-11T17:03:02.000Z","dependencies_parsed_at":"2025-04-16T23:33:24.969Z","dependency_job_id":"85b75fa8-ea3b-4e72-ae4f-376f388064a7","html_url":"https://github.com/calKU0/StriveUp","commit_stats":null,"previous_names":["calku0/striveup"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/calKU0/StriveUp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calKU0%2FStriveUp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calKU0%2FStriveUp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calKU0%2FStriveUp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calKU0%2FStriveUp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/calKU0","download_url":"https://codeload.github.com/calKU0/StriveUp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calKU0%2FStriveUp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262585819,"owners_count":23332725,"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":["activity-tracker","aspnet-core","azure","azure-functions","blazor","cloudinary","dotnet","ef-core","fitbit","fitness-tracker","garmin","google-fit","jwt-authentication","maui","strava","webapi"],"created_at":"2025-06-06T07:01:04.375Z","updated_at":"2026-04-13T22:32:08.280Z","avatar_url":"https://github.com/calKU0.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# StriveUp\n\n\u003e 🎓 **Thesis Project** — developed as part of a Bachelor’s thesis for the Applied Informatics at University of Economics in Cracow.\n\n[![CI](https://github.com/calKU0/StriveUp/actions/workflows/master_striveupapi.yml/badge.svg)](https://github.com/calKU0/StriveUp/actions/workflows/master_striveupapi.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\nStriveUp is a cross-platform activity‐tracking app built with Blazor Hybrid and .NET. Track workouts, earn medals, connect with friends, and view rich activity charts (heart rate, speed, elevation, and more). The solution includes:\n\n- **Blazor Hybrid Web App** (`StriveUp.Web`)\n- **.NET MAUI Native App** (`StriveUp.MAUI`)\n- **ASP.NET Core API** with Entity Framework Core (`StriveUp.API`)\n- **Shared Models/Services** (`StriveUp.Shared`)\n- **Infrastructure**: EF Core migrations and database-related tooling (`StriveUp.Infrastructure`)\n- **Azure Functions**: External integrations and background jobs (`StriveUp.Sync`)\n\nAll services and apps are deployed to Azure App Service, Azure SQL Database, and Azure Functions.\n\n---\n\n## Table of Contents\n\n1. [Features](#features)\n2. [Architecture](#architecture)\n3. [Tech Stack](#tech-stack)\n4. [Repository Structure](#repository-structure)\n5. [Prerequisites](#prerequisites)\n6. [Getting Started](#getting-started)\n7. [Configuration](#configuration)\n8. [External Integrations](#external-integrations)\n9. [Deployment](#deployment)\n10. [Contributing](#contributing)\n11. [License](#license)\n\n---\n\n## Features\n\n- **Activity Tracking**: Record workouts, runs, rides, and more.\n- **Medals \u0026 Achievements**: Earn badges for milestones and weekly challenges.\n- **Social**: Connect with friends, like/comment their activities, and challenge each other.\n- **Rich Charts**: View detailed charts for heart rate, speed, elevation, cadence, etc.\n- **Multi-Platform**: Accessible via web browser or native mobile app (iOS, Android, Windows).\n- **External Sync**: Import data from Garmin Connect, ZEPP OS, and other providers via Azure Functions.\n\n---\n\n## Architecture\n\n```\n┌──────────────┐       \t┌───────────────┐        ┌────────────────────┐\n│ StriveUp.Web | ◀──── │  StriveUp.API │ ◀───── │ Azure SQL Database │\n│   (Blazor)   │       \t│ (ASP.NET Core)│        └────────────────────┘\n└──────────────┘       \t└───────────────┘                ▲\n       ▲                        ▲                        │\n       │                        │                        │\n┌──────────────┐        ┌────────────────┐        ┌───────────────┐\n│StriveUp.MAUI │        │ Azure Function │ ─────▶ │ External APIs │\n│ (.NET MAUI)  │        │ (Integrations) │        └───────────────┘\n└──────────────┘        └────────────────┘\n```\n\n---\n\n## Tech Stack\n\n- **Frontend**: Blazor Hybrid (WebAssembly + server), .NET MAUI\n- **Backend/API**: ASP.NET Core 9, Entity Framework Core\n- **Database**: Azure SQL (Microsoft SQL Server)\n- **Serverless**: Azure Functions (.NET 7)\n- **CI/CD \u0026 Hosting**: Azure DevOps / GitHub Actions → Azure App Service \u0026 Functions\n- **External APIs**: Unofficial Garmin Connect, ZEPP OS, etc.\n- **Cloud Image Management**: User activity images and avatars are stored and served via Cloudinary.\n- **Authentication**: Secure API access with JWT Bearer authentication for all endpoints.\n\n---\n\n## Repository Structure\n\n```\nStriveUp/\n├── StriveUp.sln\n├── .gitignore\n├── package.json              # for Blazor Web client assets\n├── package-lock.json\n├── .github/                  # Github related things, workflows\n├── StriveUp.API/             # ASP.NET Core Web API\n├── StriveUp.Infrastructure/  # EF Core migrations, domain models\n├── StriveUp.Sync/            # Azure Functions\n├── StriveUp.Shared/          # DTOs, shared services, shared components\n├── StriveUp.Web/             # Blazor Hybrid web project\n└── StriveUp.MAUI/            # .NET MAUI native app\n```\n\n---\n\n## Prerequisites\n\n- [.NET 9 SDK](https://dotnet.microsoft.com/download)\n- [Visual Studio 2022](https://visualstudio.microsoft.com) or VS Code + C# extensions\n- Azure subscription with:\n  - App Service Plan\n  - Function App\n  - Azure SQL Database\n- External API credentials (Garmin, ZEPP, etc.)\n\n---\n\n## Getting Started\n\n1. **Clone the repository**\n\n   ```bash\n   git clone https://github.com/calKU0/StriveUp.git\n   cd StriveUp\n   ```\n\n2. **Restore \u0026 Build**\n\n   ```bash\n   dotnet restore\n   dotnet build\n   ```\n\n3. **Run the solution**\n   - **API \u0026 Functions**:\n     ```bash\n     cd StriveUp.API\n     dotnet run\n     ```\n     In another terminal:\n     ```bash\n     cd StriveUp.Sync\n     func start\n     ```\n   - **Web App**:\n     ```bash\n     cd StriveUp.Web\n     dotnet run\n     ```\n   - **Native App**:  \n     Open `StriveUp.sln` in Visual Studio, set `StriveUp.MAUI` as startup, and run on emulator/device.\n\n---\n\n## Configuration\n\nAll connection strings and secrets are managed in **`appsettings.json`** (local) or in Azure App Service / Function App configuration:\n\n```jsonc\n// StriveUp.API/appsettings.json\n{\n  \"ConnectionStrings\": {\n    \"DefaultConnection\": \"Server=...;Database=StriveUp;User Id=...;Password=...\"\n  },\n  \"Jwt\": {\n    \"Issuer\": \"...\",\n    \"Audience\": \"...\",\n    \"Key\": \"...\"\n  },\n  \"ExternalProviders\": {\n    \"Cloudinary\": {\n      \"CloudName\": \"...\",\n      \"ApiKey\": \"...\",\n      \"ApiSecret\": \"...\"\n    },\n    \"ZEPP\": {\n      \"ApiKey\": \"...\",\n      \"ApiSecret\": \"...\"\n    }\n  }\n}\n```\n\n- **Azure Functions**:  \n  Set `FUNCTIONS_WORKER_RUNTIME`, `AzureWebJobsStorage`, and the same `ConnectionStrings` / provider secrets in your Function App settings.\n\n---\n\n## External Integrations\n\nAzure Functions in `StriveUp.Functions` poll external APIs on schedule or webhook trigger, fetch user activity data, and push it into your app’s database via the API’s endpoints. Supported providers:\n\n- **Garmin Connect**\n- **ZEPP OS**\n- _...more to come!_\n\n---\n\n## Deployment\n\n1. **Publish API \u0026 Web**\n   ```bash\n   dotnet publish StriveUp.API -c Release\n   dotnet publish StriveUp.Web -c Release\n   ```\n2. **Deploy to Azure App Service**\n\n   - Create two App Services (API \u0026 Web).\n   - Deploy via CLI, Azure DevOps, or GitHub Actions.\n\n3. **Deploy Azure Functions**\n\n   ```bash\n   func azure functionapp publish \u003cYourFunctionAppName\u003e\n   ```\n\n4. **Set Configuration**  \n   In the Azure Portal, under each App/Function → Configuration, add your connection strings and secrets.\n\n5. **Point Domain \u0026 SSL** (optional)\n\n---\n\n## Contributing\n\nContributions are welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feat/my-feature`)\n3. Commit your changes (`git commit -m \"Add my feature\"`)\n4. Push to your branch (`git push origin feat/my-feature`)\n5. Open a Pull Request\n\nPlease follow the existing code style and include tests where applicable.\n\n---\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n---\n\n\u003e Built with ❤️ using .NET and Azure\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalku0%2Fstriveup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcalku0%2Fstriveup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalku0%2Fstriveup/lists"}